Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d1c985ff4 | ||
|
|
e4818cf732 | ||
|
|
a1b53b45ca | ||
|
|
09c7304bd9 | ||
|
|
58b2c72d53 | ||
|
|
627d6c154c | ||
|
|
4fbb53e817 | ||
|
|
ab78386e02 | ||
|
|
f5638e54f5 | ||
|
|
77efa1c620 | ||
|
|
a037cedfdc | ||
|
|
df78593b1b | ||
|
|
45e71aedf0 | ||
|
|
bbad6e1ae7 | ||
|
|
efb21c00ce | ||
|
|
071eb2478f | ||
|
|
770a4ee729 | ||
|
|
ccda62616d | ||
|
|
698d0dbda8 | ||
|
|
1af31a0523 | ||
|
|
a8153774b5 | ||
|
|
10e8ed7430 | ||
|
|
cde56a7eee | ||
|
|
8551ab3daf | ||
|
|
b0bee465aa | ||
|
|
7085066f08 | ||
|
|
e4dd9e1393 | ||
|
|
9c6a7522d7 | ||
|
|
01653a5f96 | ||
|
|
5acb7e3707 | ||
|
|
6c834dea7b | ||
|
|
b3c7864990 | ||
|
|
8984f24f7c | ||
|
|
294caf1ff1 | ||
|
|
033c7af292 | ||
|
|
15e5f57952 | ||
|
|
4b11c2b552 | ||
|
|
201c5bfa5c | ||
|
|
34f302e1a5 | ||
|
|
722c196b08 | ||
|
|
c6ebb59a8b |
No files matched your search
+1
-1
@@ -22,5 +22,5 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Generate the keymap.c
|
# Generate the keymap.c
|
||||||
$(KEYBOARD_OUTPUT)/src/keymap.c:
|
$(KEYBOARD_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
|
||||||
bin/qmk json-keymap --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
|
bin/qmk json-keymap --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
|
||||||
@@ -4,5 +4,6 @@
|
|||||||
- [:es: Español](/es/)
|
- [:es: Español](/es/)
|
||||||
- [:fr: Français](/fr-fr/)
|
- [:fr: Français](/fr-fr/)
|
||||||
- [:he: עברית](/he-il/)
|
- [:he: עברית](/he-il/)
|
||||||
|
- [:brazil: Português](/pt-br/)
|
||||||
- [:ru: Русский](/ru-ru/)
|
- [:ru: Русский](/ru-ru/)
|
||||||
- [:jp: 日本語](/ja/)
|
- [:jp: 日本語](/ja/)
|
||||||
@@ -87,10 +87,6 @@ Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_fi
|
|||||||
|
|
||||||
If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
|
If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
|
||||||
|
|
||||||
## WINAVR is Obsolete
|
|
||||||
It is no longer recommended and may cause some problem.
|
|
||||||
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
|
||||||
|
|
||||||
## USB VID and PID
|
## USB VID and PID
|
||||||
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
|
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
|
||||||
|
|
||||||
@@ -103,29 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
|
|||||||
- http://www.obdev.at/products/vusb/license.html
|
- http://www.obdev.at/products/vusb/license.html
|
||||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||||
|
|
||||||
## Cortex: `cstddef: No such file or directory`
|
|
||||||
GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
|
|
||||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
|
||||||
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/212
|
|
||||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
|
||||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
|
||||||
|
|
||||||
## `clock_prescale_set` and `clock_div_1` Not Available
|
|
||||||
Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
|
|
||||||
|
|
||||||
```
|
|
||||||
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
|
|
||||||
avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
|
|
||||||
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## BOOTLOADER_SIZE for AVR
|
## BOOTLOADER_SIZE for AVR
|
||||||
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
|
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
|
||||||
|
|
||||||
|
|||||||
@@ -112,56 +112,6 @@ In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't s
|
|||||||
|
|
||||||
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
||||||
|
|
||||||
|
|
||||||
## Bootloader Jump Doesn't Work
|
|
||||||
Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
|
|
||||||
```
|
|
||||||
# Size of Bootloaders in bytes:
|
|
||||||
# Atmel DFU loader(ATmega32U4) 4096
|
|
||||||
# Atmel DFU loader(AT90USB128) 8192
|
|
||||||
# LUFA bootloader(ATmega32U4) 4096
|
|
||||||
# Arduino Caterina(ATmega32U4) 4096
|
|
||||||
# USBaspLoader(ATmega***) 2048
|
|
||||||
# Teensy halfKay(ATmega32U4) 512
|
|
||||||
# Teensy++ halfKay(AT90USB128) 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
```
|
|
||||||
AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet.
|
|
||||||
Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**.
|
|
||||||
|
|
||||||
AVR Boot section is located at end of Flash memory like the followings.
|
|
||||||
```
|
|
||||||
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-4KB | | 128KB-8KB
|
|
||||||
0x6000 +---------------+ 0x1E000 +---------------+
|
|
||||||
| Bootloader | 4KB | Bootloader | 8KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
|
|
||||||
|
|
||||||
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-512B | | 128KB-2KB
|
|
||||||
0x7E00 +---------------+ 0x1FC00 +---------------+
|
|
||||||
| Bootloader | 512B | Bootloader | 2KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
And see this discussion for further reference.
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/179
|
|
||||||
|
|
||||||
If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
|
|
||||||
|
|
||||||
## Special Extra Key Doesn't Work (System, Audio Control Keys)
|
## Special Extra Key Doesn't Work (System, Audio Control Keys)
|
||||||
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
|
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
|
||||||
|
|
||||||
@@ -194,24 +144,6 @@ If you would like to keep JTAG enabled, just add the following to your `config.h
|
|||||||
#define NO_JTAG_DISABLE
|
#define NO_JTAG_DISABLE
|
||||||
```
|
```
|
||||||
|
|
||||||
## Adding LED Indicators of Lock Keys
|
|
||||||
You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
|
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
|
|
||||||
|
|
||||||
## Program Arduino Micro/Leonardo
|
|
||||||
Push reset button and then run command like this within 8 seconds.
|
|
||||||
|
|
||||||
```
|
|
||||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
|
|
||||||
```
|
|
||||||
|
|
||||||
Device name will vary depending on your system.
|
|
||||||
|
|
||||||
http://arduino.cc/en/Main/ArduinoBoardMicro
|
|
||||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
|
|
||||||
|
|
||||||
|
|
||||||
## USB 3 Compatibility
|
## USB 3 Compatibility
|
||||||
I heard some people have a problem with USB 3 port, try USB 2 port.
|
I heard some people have a problem with USB 3 port, try USB 2 port.
|
||||||
|
|
||||||
|
|||||||
+1
-62
@@ -67,24 +67,8 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
|
|||||||
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
|
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
|
||||||
|
|
||||||
## Input Special Characters Other Than ASCII like Cédille 'Ç'
|
## Input Special Characters Other Than ASCII like Cédille 'Ç'
|
||||||
NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
|
|
||||||
|
|
||||||
See this post for example **MACRO** code.
|
See the [Unicode](feature_unicode.md) feature.
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
|
|
||||||
|
|
||||||
On **Windows** you can use `AltGr` key or **Alt code**.
|
|
||||||
* http://en.wikipedia.org/wiki/AltGr_key
|
|
||||||
* http://en.wikipedia.org/wiki/Alt_code
|
|
||||||
|
|
||||||
On **Mac** OS defines `Option` key combinations.
|
|
||||||
* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
|
|
||||||
|
|
||||||
On **Xorg** you can use `compose` key, instead.
|
|
||||||
* http://en.wikipedia.org/wiki/Compose_key
|
|
||||||
|
|
||||||
And see this for **Unicode** input.
|
|
||||||
* http://en.wikipedia.org/wiki/Unicode_input
|
|
||||||
|
|
||||||
## `Fn` Key on macOS
|
## `Fn` Key on macOS
|
||||||
|
|
||||||
@@ -130,51 +114,6 @@ https://github.com/tekezo/Karabiner/issues/403
|
|||||||
|
|
||||||
See the [Grave Escape](feature_grave_esc.md) feature.
|
See the [Grave Escape](feature_grave_esc.md) feature.
|
||||||
|
|
||||||
## Arrow on Right Modifier Keys with Dual-Role
|
|
||||||
This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
|
|
||||||
```
|
|
||||||
|
|
||||||
#include "keymap_common.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* Arrow keys on right modifier keys with TMK dual role feature
|
|
||||||
*
|
|
||||||
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
|
|
||||||
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
*/
|
|
||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* 0: qwerty */
|
|
||||||
[0] = LAYOUT( \
|
|
||||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
|
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
|
||||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
|
|
||||||
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
|
|
||||||
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
|
|
||||||
[1] = LAYOUT( \
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
|
|
||||||
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
|
|
||||||
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
|
|
||||||
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
|
|
||||||
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
|
|
||||||
[4] = ACTION_LAYER_MOMENTARY(1),
|
|
||||||
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
|
|
||||||
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
|
|
||||||
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
|
|
||||||
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
|
|
||||||
};
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
|
|
||||||
|
|
||||||
## Eject on Mac OSX
|
## Eject on Mac OSX
|
||||||
`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
|
`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
|
||||||
It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
|
It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
|
||||||
|
|||||||
@@ -86,10 +86,6 @@ Relancer le script d'installation de QMK (`./util/qmk_install.sh` situé dans r
|
|||||||
|
|
||||||
Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations.
|
Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations.
|
||||||
|
|
||||||
## WINAVR est obsolète
|
|
||||||
|
|
||||||
Il n'est plus recommandé et peut causer des problèmes. Voir [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
|
||||||
|
|
||||||
## USB VID et PID
|
## USB VID et PID
|
||||||
|
|
||||||
Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
|
Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
|
||||||
@@ -103,30 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
|
|||||||
- http://www.obdev.at/products/vusb/license.html
|
- http://www.obdev.at/products/vusb/license.html
|
||||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||||
|
|
||||||
## Cortex: `cstddef: No such file or directory`
|
|
||||||
|
|
||||||
Ce problème existait avec le GCC 4.8 d'Ubuntu 14.04, la solution a nécessité de mettre à jour vers 4.9 avec ce PPA.
|
|
||||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
|
||||||
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/212
|
|
||||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
|
||||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
|
||||||
|
|
||||||
## `clock_prescale_set` and `clock_div_1` Not Available
|
|
||||||
|
|
||||||
Votre chaîne d'outils (Toolchain) est trop vieille pour supporter le MCU. Par exemple, WinAVR 20100110 ne supporte pas ATMega32u2.
|
|
||||||
|
|
||||||
```
|
|
||||||
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
|
|
||||||
avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
|
|
||||||
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
|
|
||||||
```
|
|
||||||
|
|
||||||
## BOOTLOADER_SIZE pour AVR
|
## BOOTLOADER_SIZE pour AVR
|
||||||
|
|
||||||
Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
|
Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
|
||||||
|
|||||||
@@ -104,58 +104,6 @@ En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique
|
|||||||
|
|
||||||
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
||||||
|
|
||||||
## Bootloader Jump ne fonctionne pas
|
|
||||||
|
|
||||||
Configurez correctement la taille du bootloader dans le **Makefile**. Une mauvaise taille de section du bootloader empêchera probablement le démarrage avec **Magic command** et **Boot Magic**.
|
|
||||||
|
|
||||||
```
|
|
||||||
# Size of Bootloaders in bytes:
|
|
||||||
# Atmel DFU loader(ATmega32U4) 4096
|
|
||||||
# Atmel DFU loader(AT90USB128) 8192
|
|
||||||
# LUFA bootloader(ATmega32U4) 4096
|
|
||||||
# Arduino Caterina(ATmega32U4) 4096
|
|
||||||
# USBaspLoader(ATmega***) 2048
|
|
||||||
# Teensy halfKay(ATmega32U4) 512
|
|
||||||
# Teensy++ halfKay(AT90USB128) 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
```
|
|
||||||
|
|
||||||
La taille de la section de démarrage de AVR est définie par l'option **BOOTSZ** fuse. Vérifiez la fiche technique du MCU. Veuilez noter que les tailles et adresses sont définies en **Word** (2 octets) dans la fiche technique alors que TMK utilise des **Byte**.
|
|
||||||
|
|
||||||
La section de boot AVR se trouve à la fin de la mémoire flash, comme suit.
|
|
||||||
|
|
||||||
```
|
|
||||||
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-4KB | | 128KB-8KB
|
|
||||||
0x6000 +---------------+ 0x1E000 +---------------+
|
|
||||||
| Bootloader | 4KB | Bootloader | 8KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
|
|
||||||
|
|
||||||
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-512B | | 128KB-2KB
|
|
||||||
0x7E00 +---------------+ 0x1FC00 +---------------+
|
|
||||||
| Bootloader | 512B | Bootloader | 2KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
Référez-vous à cette discussion pour plus de référence.
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/179
|
|
||||||
|
|
||||||
Si vous utilisez un TeensyUSB, il y a un [bug connu](https://github.com/qmk/qmk_firmware/issues/164) qui fait que le bouton reset matériel empêche la touche RESET de fonctionner. Débrancher et rebrancher le clavier devrait résoudre le problème.
|
|
||||||
|
|
||||||
## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son)
|
## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son)
|
||||||
|
|
||||||
Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
|
Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
|
||||||
@@ -189,25 +137,6 @@ Si vous voulez garder JTAG activé, ajoutez la ligne suivante à votre fichier `
|
|||||||
#define NO_JTAG_DISABLE
|
#define NO_JTAG_DISABLE
|
||||||
```
|
```
|
||||||
|
|
||||||
## Adding LED Indicators of Lock Keys
|
|
||||||
|
|
||||||
Si vous souhaitez votre propre indicateur LED pour CapsLock, ScrollLock et NumLock alors lisez ce post.
|
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
|
|
||||||
|
|
||||||
## Programmer Arduino Micro/Leonardo
|
|
||||||
|
|
||||||
Appuyez sur le bouton reset puis lancez la commande suivante dans les 8 secondes.
|
|
||||||
|
|
||||||
```
|
|
||||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
|
|
||||||
```
|
|
||||||
|
|
||||||
Le nom du périphérique peut varier en fonction de votre système.
|
|
||||||
|
|
||||||
http://arduino.cc/en/Main/ArduinoBoardMicro
|
|
||||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
|
|
||||||
|
|
||||||
## Compatibilité USB 3
|
## Compatibilité USB 3
|
||||||
|
|
||||||
Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2.
|
Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2.
|
||||||
|
|||||||
@@ -72,24 +72,7 @@ Des vieux claviers mécaniques ont parfois des touches à verrouillage, mais les
|
|||||||
|
|
||||||
## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç'
|
## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç'
|
||||||
|
|
||||||
IL N'EXISTE AUCUNE METHODE UNIVERSELLE POUR LES AJOUTER QUI FONCTIONNE SUR TOUS LES SYSTEMES. Vous devez définir une **MACRO** d'une manière spécifique à votre OS ou layout.
|
Voir la fonctionnalité [Unicode](feature_unicode.md).
|
||||||
|
|
||||||
Voir ce post pour un exemple de code **MACRO**.
|
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
|
|
||||||
|
|
||||||
Sous **Windows** vous pouvez utiliser la touche `AltGr` ou **Alt code**.
|
|
||||||
* http://en.wikipedia.org/wiki/AltGr_key
|
|
||||||
* http://en.wikipedia.org/wiki/Alt_code
|
|
||||||
|
|
||||||
Sous **Mac OS** définissez une combinaison de touche `Option`.
|
|
||||||
* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
|
|
||||||
|
|
||||||
Sous **Xorg** vous pouvez utiliser une touche `compose` à la place.
|
|
||||||
* http://en.wikipedia.org/wiki/Compose_key
|
|
||||||
|
|
||||||
Et voir ceci pour une entrée **Unicode**.
|
|
||||||
* http://en.wikipedia.org/wiki/Unicode_input
|
|
||||||
|
|
||||||
## Touche `Fn` sur macOS
|
## Touche `Fn` sur macOS
|
||||||
|
|
||||||
@@ -144,54 +127,6 @@ Cette fonctionnalité permet d'utiliser une touche à la fois comme touche Écha
|
|||||||
|
|
||||||
Voir la fonctionnalité [Grave Escape](feature_grave_esc.md).
|
Voir la fonctionnalité [Grave Escape](feature_grave_esc.md).
|
||||||
|
|
||||||
## Avoir les touches modificatrices qui ont double usage en flèches directionnelles.
|
|
||||||
|
|
||||||
Ceci transforme les touches "modificateur droit" en touches fléchées lorsque les touches sont seulement "tapées" tout en restant des modificateurs lorsqu'elles sont maintenues.
|
|
||||||
|
|
||||||
Dans TMK la fonction double rôle s'appelle **TAP**.
|
|
||||||
|
|
||||||
```C
|
|
||||||
|
|
||||||
#include "keymap_common.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* Arrow keys on right modifier keys with TMK dual role feature
|
|
||||||
*
|
|
||||||
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
|
|
||||||
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
*/
|
|
||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* 0: qwerty */
|
|
||||||
[0] = LAYOUT( \
|
|
||||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
|
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
|
||||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
|
|
||||||
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
|
|
||||||
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
|
|
||||||
[1] = LAYOUT( \
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
|
|
||||||
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
|
|
||||||
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
|
|
||||||
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
|
|
||||||
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
|
|
||||||
[4] = ACTION_LAYER_MOMENTARY(1),
|
|
||||||
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
|
|
||||||
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
|
|
||||||
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
|
|
||||||
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
|
|
||||||
};
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Touches double rôle : https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
|
|
||||||
## Eject sur Mac OSX
|
## Eject sur Mac OSX
|
||||||
|
|
||||||
Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
|
Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ And be sure to select "HTTPS", and select the link and copy it:
|
|||||||
From here, enter `git clone ` into the command line, and then paste your link:
|
From here, enter `git clone ` into the command line, and then paste your link:
|
||||||
|
|
||||||
```
|
```
|
||||||
user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
|
user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
|
||||||
Cloning into 'qmk_firmware'...
|
Cloning into 'qmk_firmware'...
|
||||||
remote: Counting objects: 46625, done.
|
remote: Counting objects: 46625, done.
|
||||||
remote: Compressing objects: 100% (2/2), done.
|
remote: Compressing objects: 100% (2/2), done.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
|
|||||||
|
|
||||||
## Basic QMK Structure
|
## Basic QMK Structure
|
||||||
|
|
||||||
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
|
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
|
||||||
|
|
||||||
### Userspace Structure
|
### Userspace Structure
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
'/fr-fr/': '/#/fr-fr/',
|
'/fr-fr/': '/#/fr-fr/',
|
||||||
'/he-il/': '/#/he-il/',
|
'/he-il/': '/#/he-il/',
|
||||||
'/ja/': '/#/ja/',
|
'/ja/': '/#/ja/',
|
||||||
|
'/pt-br/': '/#/pt-br/',
|
||||||
'/ru-ru/': '/#/ru-ru/',
|
'/ru-ru/': '/#/ru-ru/',
|
||||||
'/zh-cn/': '/#/zh-cn/',
|
'/zh-cn/': '/#/zh-cn/',
|
||||||
'/': '/#/'
|
'/': '/#/'
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
'fr-fr',
|
'fr-fr',
|
||||||
'he-il',
|
'he-il',
|
||||||
'ja',
|
'ja',
|
||||||
|
'pt-br',
|
||||||
'ru-ru',
|
'ru-ru',
|
||||||
'zh-cn'
|
'zh-cn'
|
||||||
],
|
],
|
||||||
@@ -60,12 +62,14 @@
|
|||||||
'/es/': 'Buscar',
|
'/es/': 'Buscar',
|
||||||
'/zh-cn/': '搜索',
|
'/zh-cn/': '搜索',
|
||||||
'/ja/': '検索',
|
'/ja/': '検索',
|
||||||
|
'/pt-br/': 'Busca',
|
||||||
'/': 'Search'
|
'/': 'Search'
|
||||||
},
|
},
|
||||||
noData: {
|
noData: {
|
||||||
'/es/': '¡Ningún resultado!',
|
'/es/': '¡Ningún resultado!',
|
||||||
'/zh-cn/': '没有结果!',
|
'/zh-cn/': '没有结果!',
|
||||||
'/ja/': '見つかりません!',
|
'/ja/': '見つかりません!',
|
||||||
|
'/pt-br/': 'Nenhum resultado!',
|
||||||
'/': 'No results!'
|
'/': 'No results!'
|
||||||
},
|
},
|
||||||
depth: 6
|
depth: 6
|
||||||
|
|||||||
@@ -29,3 +29,5 @@ These are defaults based on what has been implemented for ARM boards.
|
|||||||
| [Audio](feature_audio.md) | Enabled |
|
| [Audio](feature_audio.md) | Enabled |
|
||||||
| [RGB Lighting](feature_rgblight.md) | Disabled |
|
| [RGB Lighting](feature_rgblight.md) | Disabled |
|
||||||
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
|
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
|
||||||
|
| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
|
||||||
|
| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Quantum Mechanical Keyboard Firmware
|
||||||
|
|
||||||
|
[](https://github.com/qmk/qmk_firmware/tags)
|
||||||
|
[](https://travis-ci.org/qmk/qmk_firmware)
|
||||||
|
[](https://discord.gg/Uq7gcHh)
|
||||||
|
[](https://docs.qmk.fm)
|
||||||
|
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
||||||
|
[](https://github.com/qmk/qmk_firmware/)
|
||||||
|
|
||||||
|
## O que é o firmware QMK?
|
||||||
|
QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mantém o QMK Firmware, o QMK Toolbox, qmk.fm e suas documentações. O QMK Firmware é um software embarcado ("firmware") de teclado baseado no [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](http://olkb.com), o teclado [ErgoDox EZ](http://www.ergodox-ez.com) e a [linha de produtos Clueboard](http://clueboard.co/). Também foi portado para chips ARM usando o ChibiOS. Você pode usá-lo no seu próprio teclado com fio ou personalizado.
|
||||||
|
|
||||||
|
## Como obter e usar o QMK
|
||||||
|
|
||||||
|
Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
|
||||||
|
|
||||||
|
Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
|
||||||
|
|
||||||
|
## Como compilar
|
||||||
|
|
||||||
|
Antes de compilar, você precisará [instalar um ambiente específico](getting_started_build_tools.md) para o desenvolvimento em plataforma AVR e/ou ARM; vez que isto for feito, você usará o comando `make` para criar um teclado e um mapa de teclas com a seguinte notação:
|
||||||
|
|
||||||
|
make planck/rev4:default
|
||||||
|
|
||||||
|
Isso compilaria a revisão `rev4` do teclado ` planck` com o mapa de teclas `default`. Nem todos os teclados têm revisões (também chamadas de _subprojects_ ou _folders_); nesse caso, a revisão pode ser omitida:
|
||||||
|
|
||||||
|
make preonic:default
|
||||||
|
|
||||||
|
## Como personalizar
|
||||||
|
|
||||||
|
O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](http://docs.qmk.fm) para explorar. A maioria dos recursos é aproveitada modificando seu [keymap](keymap.md) e alterando os [keycodes](keycodes.md).
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
* [Complete Newbs Guide](pt-br/newbs.md)
|
||||||
|
* [Getting Started](pt-br/newbs_getting_started.md)
|
||||||
|
* [Building Your First Firmware](pt-br/newbs_building_firmware.md)
|
||||||
|
* [Flashing Firmware](pt-br/newbs_flashing.md)
|
||||||
|
* [Testing and Debugging](pt-br/newbs_testing_debugging.md)
|
||||||
|
* [Git Best Practices](pt-br/newbs_best_practices.md)
|
||||||
|
* [Learning Resources](pt-br/newbs_learn_more_resources.md)
|
||||||
|
|
||||||
|
* [QMK Basics](pt-br/README.md)
|
||||||
|
* [QMK Introduction](pt-br/getting_started_introduction.md)
|
||||||
|
* [QMK CLI](pt-br/cli.md)
|
||||||
|
* [QMK CLI Config](pt-br/cli_configuration.md)
|
||||||
|
* [Contributing to QMK](pt-br/contributing.md)
|
||||||
|
* [How to Use Github](pt-br/getting_started_github.md)
|
||||||
|
* [Getting Help](pt-br/getting_started_getting_help.md)
|
||||||
|
|
||||||
|
* [Breaking Changes](pt-br/breaking_changes.md)
|
||||||
|
* [2019 Aug 30](pt-br/ChangeLog/20190830.md)
|
||||||
|
|
||||||
|
* [FAQ](faq.md)
|
||||||
|
* [General FAQ](pt-br/faq_general.md)
|
||||||
|
* [Build/Compile QMK](pt-br/faq_build.md)
|
||||||
|
* [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
|
||||||
|
* [Keymap](pt-br/faq_keymap.md)
|
||||||
|
* [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
|
||||||
|
|
||||||
|
* Detailed Guides
|
||||||
|
* [Install Build Tools](pt-br/getting_started_build_tools.md)
|
||||||
|
* [Vagrant Guide](pt-br/getting_started_vagrant.md)
|
||||||
|
* [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
|
||||||
|
* [Flashing Firmware](pt-br/flashing.md)
|
||||||
|
* [Customizing Functionality](pt-br/custom_quantum_functions.md)
|
||||||
|
* [Keymap Overview](pt-br/keymap.md)
|
||||||
|
|
||||||
|
* [Hardware](hardware.md)
|
||||||
|
* [AVR Processors](pt-br/hardware_avr.md)
|
||||||
|
* [Drivers](pt-br/hardware_drivers.md)
|
||||||
|
|
||||||
|
* Reference
|
||||||
|
* [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
|
||||||
|
* [Config Options](pt-br/config_options.md)
|
||||||
|
* [Keycodes](pt-br/keycodes.md)
|
||||||
|
* [Coding Conventions - C](pt-br/coding_conventions_c.md)
|
||||||
|
* [Coding Conventions - Python](pt-br/coding_conventions_python.md)
|
||||||
|
* [Documentation Best Practices](pt-br/documentation_best_practices.md)
|
||||||
|
* [Documentation Templates](pt-br/documentation_templates.md)
|
||||||
|
* [Glossary](pt-br/reference_glossary.md)
|
||||||
|
* [Unit Testing](pt-br/unit_testing.md)
|
||||||
|
* [Useful Functions](pt-br/ref_functions.md)
|
||||||
|
* [Configurator Support](pt-br/reference_configurator_support.md)
|
||||||
|
* [info.json Format](pt-br/reference_info_json.md)
|
||||||
|
* [Python CLI Development](pt-br/cli_development.md)
|
||||||
|
|
||||||
|
* [Features](pt-br/features.md)
|
||||||
|
* [Basic Keycodes](pt-br/keycodes_basic.md)
|
||||||
|
* [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
|
||||||
|
* [Quantum Keycodes](pt-br/quantum_keycodes.md)
|
||||||
|
* [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
|
||||||
|
* [Audio](pt-br/feature_audio.md)
|
||||||
|
* [Auto Shift](pt-br/feature_auto_shift.md)
|
||||||
|
* [Backlight](pt-br/feature_backlight.md)
|
||||||
|
* [Bluetooth](pt-br/feature_bluetooth.md)
|
||||||
|
* [Bootmagic](pt-br/feature_bootmagic.md)
|
||||||
|
* [Combos](pt-br/feature_combo.md)
|
||||||
|
* [Command](pt-br/feature_command.md)
|
||||||
|
* [Debounce API](pt-br/feature_debounce_type.md)
|
||||||
|
* [DIP Switch](pt-br/feature_dip_switch.md)
|
||||||
|
* [Dynamic Macros](pt-br/feature_dynamic_macros.md)
|
||||||
|
* [Encoders](pt-br/feature_encoders.md)
|
||||||
|
* [Grave Escape](pt-br/feature_grave_esc.md)
|
||||||
|
* [Haptic Feedback](pt-br/feature_haptic_feedback.md)
|
||||||
|
* [HD44780 LCD Controller](pt-br/feature_hd44780.md)
|
||||||
|
* [Key Lock](pt-br/feature_key_lock.md)
|
||||||
|
* [Layouts](pt-br/feature_layouts.md)
|
||||||
|
* [Leader Key](pt-br/feature_leader_key.md)
|
||||||
|
* [LED Matrix](pt-br/feature_led_matrix.md)
|
||||||
|
* [Macros](pt-br/feature_macros.md)
|
||||||
|
* [Mouse Keys](pt-br/feature_mouse_keys.md)
|
||||||
|
* [OLED Driver](pt-br/feature_oled_driver.md)
|
||||||
|
* [One Shot Keys](pt-br/feature_advanced_keycodes.md#one-shot-keys)
|
||||||
|
* [Pointing Device](pt-br/feature_pointing_device.md)
|
||||||
|
* [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
|
||||||
|
* [RGB Lighting](pt-br/feature_rgblight.md)
|
||||||
|
* [RGB Matrix](pt-br/feature_rgb_matrix.md)
|
||||||
|
* [Space Cadet](pt-br/feature_space_cadet.md)
|
||||||
|
* [Split Keyboard](pt-br/feature_split_keyboard.md)
|
||||||
|
* [Stenography](pt-br/feature_stenography.md)
|
||||||
|
* [Swap Hands](pt-br/feature_swap_hands.md)
|
||||||
|
* [Tap Dance](pt-br/feature_tap_dance.md)
|
||||||
|
* [Terminal](pt-br/feature_terminal.md)
|
||||||
|
* [Thermal Printer](pt-br/feature_thermal_printer.md)
|
||||||
|
* [Unicode](pt-br/feature_unicode.md)
|
||||||
|
* [Userspace](pt-br/feature_userspace.md)
|
||||||
|
* [Velocikey](pt-br/feature_velocikey.md)
|
||||||
|
|
||||||
|
* For Makers and Modders
|
||||||
|
* [Hand Wiring Guide](pt-br/hand_wire.md)
|
||||||
|
* [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
|
||||||
|
* [ARM Debugging Guide](pt-br/arm_debugging.md)
|
||||||
|
* [I2C Driver](pt-br/i2c_driver.md)
|
||||||
|
* [GPIO Controls](pt-br/internals_gpio_control.md)
|
||||||
|
* [Proton C Conversion](pt-br/proton_c_conversion.md)
|
||||||
|
|
||||||
|
* For a Deeper Understanding
|
||||||
|
* [How Keyboards Work](pt-br/how_keyboards_work.md)
|
||||||
|
* [Understanding QMK](pt-br/understanding_qmk.md)
|
||||||
|
|
||||||
|
* Other Topics
|
||||||
|
* [Using Eclipse with QMK](pt-br/other_eclipse.md)
|
||||||
|
* [Using VSCode with QMK](pt-br/other_vscode.md)
|
||||||
|
* [Support](pt-br/support.md)
|
||||||
|
* [How to add translations](pt-br/translating.md)
|
||||||
|
|
||||||
|
* QMK Internals (In Progress)
|
||||||
|
* [Defines](pt-br/internals_defines.md)
|
||||||
|
* [Input Callback Reg](pt-br/internals_input_callback_reg.md)
|
||||||
|
* [Midi Device](pt-br/internals_midi_device.md)
|
||||||
|
* [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
|
||||||
|
* [Midi Util](pt-br/internals_midi_util.md)
|
||||||
|
* [Send Functions](pt-br/internals_send_functions.md)
|
||||||
|
* [Sysex Tools](pt-br/internals_sysex_tools.md)
|
||||||
@@ -56,11 +56,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
|
|||||||
?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
|
?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
|
||||||
如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备)
|
如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备)
|
||||||
|
|
||||||
|
|
||||||
## WINAVR已淘汰
|
|
||||||
不再推荐使用WINAVR,使用可能会导致问题
|
|
||||||
详情请见[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
|
||||||
|
|
||||||
## USB VID 和 PID
|
## USB VID 和 PID
|
||||||
你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。
|
你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。
|
||||||
|
|
||||||
@@ -73,29 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
|
|||||||
- http://www.obdev.at/products/vusb/license.html
|
- http://www.obdev.at/products/vusb/license.html
|
||||||
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
|
||||||
|
|
||||||
## Cortex: `cstddef: No such file or directory`
|
|
||||||
在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
|
|
||||||
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
|
|
||||||
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/212
|
|
||||||
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
|
|
||||||
https://developer.mbed.org/forum/mbed/topic/5205/
|
|
||||||
|
|
||||||
## `clock_prescale_set` and `clock_div_1` Not Available
|
|
||||||
你的工具链太旧了不支持MCU。比如WinAVR 20100110就不支持ATMega32u2.
|
|
||||||
|
|
||||||
```
|
|
||||||
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
|
|
||||||
avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
|
|
||||||
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
|
|
||||||
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## AVR的BOOTLOADER_SIZE
|
## AVR的BOOTLOADER_SIZE
|
||||||
注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
|
注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
|
||||||
|
|
||||||
|
|||||||
@@ -101,56 +101,6 @@ https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switc
|
|||||||
|
|
||||||
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
||||||
|
|
||||||
|
|
||||||
## Bootloader跳转不好用
|
|
||||||
在**Makefile**中正确配置**Makefile**大小。如果分区大小不正确,引导加载程序可能无法从**Magic command**和**Boot Magic**加载。
|
|
||||||
```
|
|
||||||
# bootloader字节数:
|
|
||||||
# Atmel DFU loader(ATmega32U4) 4096
|
|
||||||
# Atmel DFU loader(AT90USB128) 8192
|
|
||||||
# LUFA bootloader(ATmega32U4) 4096
|
|
||||||
# Arduino Caterina(ATmega32U4) 4096
|
|
||||||
# USBaspLoader(ATmega***) 2048
|
|
||||||
# Teensy halfKay(ATmega32U4) 512
|
|
||||||
# Teensy++ halfKay(AT90USB128) 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
|
||||||
```
|
|
||||||
AVR引导大小是通过**BOOTSZ**熔丝位来设置的。查阅你单片机的datasheet。
|
|
||||||
记住,datasheet用的是**Word**(2字节)表示大小和地址,TMK用的是**Byte**。
|
|
||||||
|
|
||||||
AVR引导部分位于闪存的末尾,如下所示(Application是应用区,Bootloader是引导区)。
|
|
||||||
```
|
|
||||||
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-4KB | | 128KB-8KB
|
|
||||||
0x6000 +---------------+ 0x1E000 +---------------+
|
|
||||||
| Bootloader | 4KB | Bootloader | 8KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
|
|
||||||
|
|
||||||
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
|
|
||||||
0x0000 +---------------+ 0x00000 +---------------+
|
|
||||||
| | | |
|
|
||||||
| | | |
|
|
||||||
| Application | | Application |
|
|
||||||
| | | |
|
|
||||||
= = = =
|
|
||||||
| | 32KB-512B | | 128KB-2KB
|
|
||||||
0x7E00 +---------------+ 0x1FC00 +---------------+
|
|
||||||
| Bootloader | 512B | Bootloader | 2KB
|
|
||||||
0x7FFF +---------------+ 0x1FFFF +---------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
详情请见下方issue。
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/179
|
|
||||||
|
|
||||||
如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件重置按钮阻止软件定义重置键工作。重新插拔键盘就好了。
|
|
||||||
|
|
||||||
## 特殊额外键不起作用(系统,音频控制键)
|
## 特殊额外键不起作用(系统,音频控制键)
|
||||||
你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
|
你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
|
||||||
|
|
||||||
@@ -173,24 +123,6 @@ EXTRAKEY_ENABLE = yes # 音频控制和系统控制
|
|||||||
|
|
||||||
Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
|
Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
|
||||||
|
|
||||||
## 为锁定键添加指示灯
|
|
||||||
你要自制CapsLock, ScrollLock 和 NumLock指示灯?见下文。
|
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
|
|
||||||
|
|
||||||
## 为Arduino Micro/Leonardo编程
|
|
||||||
按下重置键然后在8秒内运行下方这样的命令。
|
|
||||||
|
|
||||||
```
|
|
||||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
|
|
||||||
```
|
|
||||||
|
|
||||||
设备名称因系统而异。
|
|
||||||
|
|
||||||
http://arduino.cc/en/Main/ArduinoBoardMicro
|
|
||||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
|
|
||||||
|
|
||||||
|
|
||||||
## USB 3 兼容性
|
## USB 3 兼容性
|
||||||
据传说有些人用USB3接口会有问题,用USB2的试试。
|
据传说有些人用USB3接口会有问题,用USB2的试试。
|
||||||
|
|
||||||
|
|||||||
@@ -66,24 +66,8 @@ https://github.com/tmk/tmk_keyboard/issues/67
|
|||||||
远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
|
远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
|
||||||
|
|
||||||
## 输入ASCII之外的特殊字符比如Cédille 'Ç'
|
## 输入ASCII之外的特殊字符比如Cédille 'Ç'
|
||||||
没有在所有系统中输入这个的通用方法。你要定义针对你的特定操作系统或布局的**宏**。
|
|
||||||
|
|
||||||
比如看这个**宏**代码的文章。
|
请见[Unicode](feature_unicode.md)功能。
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
|
|
||||||
<!--翻译问题:下方维基百科链接应全部替换为中文链接,暂未找到全部-->
|
|
||||||
在**Windows**上,可以用`AltGr`键或**Alt码**。
|
|
||||||
* http://en.wikipedia.org/wiki/AltGr_key
|
|
||||||
* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
|
|
||||||
|
|
||||||
在**Mac OS**定义`Option`键组合。
|
|
||||||
* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
|
|
||||||
|
|
||||||
在**Xorg**可以改用`compose`键。
|
|
||||||
* http://en.wikipedia.org/wiki/Compose_key
|
|
||||||
|
|
||||||
下方链接查看**Unicode**输入。
|
|
||||||
* http://en.wikipedia.org/wiki/Unicode_input
|
|
||||||
|
|
||||||
## macOS上的`Fn`
|
## macOS上的`Fn`
|
||||||
|
|
||||||
@@ -136,51 +120,6 @@ https://github.com/tekezo/Karabiner/issues/403
|
|||||||
|
|
||||||
请见[Grave Escape](feature_grave_esc.md)功能。
|
请见[Grave Escape](feature_grave_esc.md)功能。
|
||||||
|
|
||||||
## 右侧双角色修改键(诸如Shift、Alt等有修改其他键作用的键)变箭头键
|
|
||||||
右侧修改键单击时会变为箭头键,长按就还是修改键。在TMK中双角色键称之为**TAP**.
|
|
||||||
```
|
|
||||||
|
|
||||||
#include "keymap_common.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* 用TMK双角色键功能实现右侧修改键改箭头键
|
|
||||||
*
|
|
||||||
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
|
|
||||||
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
*/
|
|
||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* 0: qwerty */
|
|
||||||
[0] = LAYOUT( \
|
|
||||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
|
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
|
||||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
|
|
||||||
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
|
|
||||||
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
|
|
||||||
[1] = LAYOUT( \
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
|
|
||||||
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
|
|
||||||
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
|
|
||||||
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
|
|
||||||
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
|
|
||||||
[4] = ACTION_LAYER_MOMENTARY(1),
|
|
||||||
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
|
|
||||||
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
|
|
||||||
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
|
|
||||||
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
|
|
||||||
};
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
双角色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
|
||||||
|
|
||||||
|
|
||||||
## Mac OSX的弹出键
|
## Mac OSX的弹出键
|
||||||
`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
|
`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
|
||||||
似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。
|
似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ tmk_core/protocol/bluefruit
|
|||||||
tmk_core/protocol/chibios
|
tmk_core/protocol/chibios
|
||||||
tmk_core/protocol/iwrap
|
tmk_core/protocol/iwrap
|
||||||
tmk_core/protocol/lufa
|
tmk_core/protocol/lufa
|
||||||
tmk_core/protocol/mbed
|
|
||||||
tmk_core/protocol/midi
|
tmk_core/protocol/midi
|
||||||
tmk_core/protocol/midi/bytequeue
|
tmk_core/protocol/midi/bytequeue
|
||||||
tmk_core/protocol/midi/Config
|
tmk_core/protocol/midi/Config
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ __attribute__((weak)) void i2c_init(void) {
|
|||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
|
||||||
|
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
#ifdef USE_I2CV1
|
#if defined(USE_GPIOV1)
|
||||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include <hal.h>
|
#include <hal.h>
|
||||||
|
|
||||||
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
|
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F4XX) || defined(STM32L0xx) || defined(STM32L1xx)
|
||||||
# define USE_I2CV1
|
# define USE_I2CV1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -51,6 +51,20 @@
|
|||||||
# define I2C1_SDA 7
|
# define I2C1_SDA 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(STM32F1XX) || defined(STM32F1xx)
|
||||||
|
# define USE_GPIOV1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef USE_GPIOV1
|
||||||
|
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
||||||
|
# ifndef I2C1_SCL_PAL_MODE
|
||||||
|
# define I2C1_SCL_PAL_MODE 4
|
||||||
|
# endif
|
||||||
|
# ifndef I2C1_SDA_PAL_MODE
|
||||||
|
# define I2C1_SDA_PAL_MODE 4
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_I2CV1
|
#ifdef USE_I2CV1
|
||||||
# ifndef I2C1_OPMODE
|
# ifndef I2C1_OPMODE
|
||||||
# define I2C1_OPMODE OPMODE_I2C
|
# define I2C1_OPMODE OPMODE_I2C
|
||||||
@@ -62,14 +76,6 @@
|
|||||||
# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
|
# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
|
||||||
# ifndef I2C1_SCL_PAL_MODE
|
|
||||||
# define I2C1_SCL_PAL_MODE 4
|
|
||||||
# endif
|
|
||||||
# ifndef I2C1_SDA_PAL_MODE
|
|
||||||
# define I2C1_SDA_PAL_MODE 4
|
|
||||||
# endif
|
|
||||||
|
|
||||||
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
|
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
|
||||||
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
||||||
# ifndef I2C1_TIMINGR_PRESC
|
# ifndef I2C1_TIMINGR_PRESC
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* Adapted from https://github.com/bigjosh/SimpleNeoPixelDemo/ */
|
/* Adapted from https://github.com/bigjosh/SimpleNeoPixelDemo/ */
|
||||||
|
|
||||||
#ifndef NOP_FUDGE
|
#ifndef NOP_FUDGE
|
||||||
# if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F0XX) || defined(STM32F0xx) || defined(STM32F3XX) || defined(STM32F3xx) || defined(STM32L0XX) || defined(STM32L0xx)
|
# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX)
|
||||||
# define NOP_FUDGE 0.4
|
# define NOP_FUDGE 0.4
|
||||||
# else
|
# else
|
||||||
# error("NOP_FUDGE configuration required")
|
# error("NOP_FUDGE configuration required")
|
||||||
|
|||||||
@@ -21,6 +21,3 @@
|
|||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
/* prevent stuck modifiers */
|
|
||||||
#define PREVENT_STUCK_MODIFIERS
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "angel64.h"
|
#include "alpha.h"
|
||||||
|
|
||||||
// Optional override functions below.
|
// Optional override functions below.
|
||||||
// You can leave any or all of these undefined.
|
// You can leave any or all of these undefined.
|
||||||
File renamed without changes.
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0xFEED
|
#define VENDOR_ID 0xFEED
|
||||||
#define PRODUCT_ID 0x0000
|
#define PRODUCT_ID 0x0A64
|
||||||
#define DEVICE_VER 0x0001
|
#define DEVICE_VER 0x0001
|
||||||
#define MANUFACTURER kakunpc
|
#define MANUFACTURER kakunpc
|
||||||
#define PRODUCT angel64
|
#define PRODUCT angel64
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"keyboard_name": "angel64",
|
"keyboard_name": "angel64_alpha",
|
||||||
"url": "https://kakunpc.booth.pm/",
|
"url": "https://kakunpc.booth.pm/",
|
||||||
"maintainer": "kakunpc",
|
"maintainer": "kakunpc",
|
||||||
"width": 14,
|
"width": 14,
|
||||||
File renamed without changes.
@@ -0,0 +1,60 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layers{
|
||||||
|
BASE = 0,
|
||||||
|
COMMAND
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KC_COMMAND LT(COMMAND,KC_SPC)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[BASE] = LAYOUT(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
LCTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
|
||||||
|
KC_TAB, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_APP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL),
|
||||||
|
[COMMAND] = LAYOUT(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
|
||||||
|
KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, _______, KC_NO, _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
void oled_task_user(void) {
|
||||||
|
oled_write_P(PSTR("Layer: "), false);
|
||||||
|
switch (biton32(layer_state)) {
|
||||||
|
case BASE:
|
||||||
|
oled_write_P(PSTR("Default\n"), false);
|
||||||
|
break;
|
||||||
|
case COMMAND:
|
||||||
|
oled_write_P(PSTR("COMMAND\n"), false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Or use the write_ln shortcut over adding 'n' to the end of your string
|
||||||
|
oled_write_ln_P(PSTR("Undefined"), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,15 @@
|
|||||||
|
# angel64
|
||||||
|
|
||||||
|

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

|

|
||||||
|
|
||||||
Keyboard for tablets.
|
Keyboard for tablets.
|
||||||
|
|
||||||
Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
||||||
Hardware Supported: angel64_alpha, promicro
|
* Hardware Supported: angel64_alpha, angel64_rev1, promicro
|
||||||
Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 kakunpc
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x0A64
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER kakunpc
|
||||||
|
#define PRODUCT angel64
|
||||||
|
#define DESCRIPTION A custom keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 12
|
||||||
|
#define MATRIX_COLS 6
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
|
||||||
|
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||||
|
*/
|
||||||
|
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||||
|
|
||||||
|
// #define BACKLIGHT_PIN B7
|
||||||
|
// #define BACKLIGHT_BREATHING
|
||||||
|
// #define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define RGB_DI_PIN D3
|
||||||
|
#ifdef RGB_DI_PIN
|
||||||
|
#define RGBLED_NUM 64
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 25 /* The maximum brightness level */
|
||||||
|
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
/*== all animations enable ==*/
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
// #define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
/* defined by default; to change, uncomment and set to the combination you want */
|
||||||
|
// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "angel64_rev1",
|
||||||
|
"url": "https://kakunpc.booth.pm/",
|
||||||
|
"maintainer": "kakunpc",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"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":2}, {"label":"A", "x":2, "y":2}, {"label":"S", "x":3, "y":2}, {"label":"D", "x":4, "y":2}, {"label":"F", "x":5, "y":2}, {"label":"G", "x":6, "y":2}, {"label":"H", "x":7, "y":2}, {"label":"J", "x":8, "y":2}, {"label":"K", "x":9, "y":2}, {"label":"L", "x":10, "y":2}, {"label":":", "x":11, "y":2}, {"label":"\"", "x":12, "y":2}, {"label":"Enter", "x":13, "y":2, "w":2}, {"label":"Shift", "x":0, "y":3, "w":2.5}, {"label":"Z", "x":2.5, "y":3}, {"label":"X", "x":3.5, "y":3}, {"label":"C", "x":4.5, "y":3}, {"label":"V", "x":5.5, "y":3}, {"label":"B", "x":6.5, "y":3}, {"label":"N", "x":7.5, "y":3}, {"label":"M", "x":8.5, "y":3}, {"label":"<", "x":9.5, "y":3}, {"label":">", "x":10.5, "y":3}, {"label":"?", "x":11.5, "y":3}, {"label":"Shift", "x":12.5, "y":3, "w":2.5}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Alt", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4}, {"x":5.25, "y":4, "w":1.5}, {"x":6.75, "y":4, "w":1.5}, {"x":8.25, "y":4, "w":1.5}, {"x":9.75, "y":4}, {"label":"Alt", "x":10.75, "y":4, "w":1.5}, {"label":"Menu", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_APP, KC_RCTL),
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
void oled_task_user(void) {
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for angel64
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#define USE_LED_RIPPLE_EFFECT
|
||||||
|
// #define RANDOM_RIPPLE_EFFECT
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "lufa.h"
|
||||||
|
|
||||||
|
#ifdef USE_LED_RIPPLE_EFFECT
|
||||||
|
struct keybuf {
|
||||||
|
char col, row;
|
||||||
|
char frame;
|
||||||
|
};
|
||||||
|
struct keybuf keybufs[256];
|
||||||
|
unsigned char keybuf_begin, keybuf_end;
|
||||||
|
|
||||||
|
unsigned char r = 0;
|
||||||
|
unsigned char g = 112;
|
||||||
|
unsigned char b = 255;
|
||||||
|
int col, row;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
enum layers{
|
||||||
|
BASE = 0,
|
||||||
|
COMMAND
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KC_COMMAND_NUM LT(COMMAND,KC_F13)
|
||||||
|
#define KC_COMMAND_KANA LT(COMMAND,KC_F14)
|
||||||
|
#define KC_COMMAND LT(COMMAND,KC_SPC)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[BASE] = LAYOUT_all(
|
||||||
|
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_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_COMMAND_NUM, KC_SPC, KC_SPC, KC_SPC, KC_COMMAND_KANA, KC_RALT, MO(COMMAND),KC_RCTL),
|
||||||
|
[COMMAND] = LAYOUT_all(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
|
||||||
|
KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_LCTL, KC_NO, KC_NO, _______, KC_NO, RGB_MOD, KC_NO, _______, KC_NO, _______, KC_NO),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
#ifdef USE_LED_RIPPLE_EFFECT
|
||||||
|
col = record->event.key.col;
|
||||||
|
row = record->event.key.row;
|
||||||
|
if (record->event.pressed) {
|
||||||
|
int end = keybuf_end;
|
||||||
|
keybufs[end].col = col;
|
||||||
|
keybufs[end].row = row;
|
||||||
|
keybufs[end].frame = 0;
|
||||||
|
keybuf_end ++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard_post_init_user(void) {
|
||||||
|
#ifdef USE_LED_RIPPLE_EFFECT
|
||||||
|
rgblight_enable_noeeprom();
|
||||||
|
rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_LED_RIPPLE_EFFECT
|
||||||
|
int scan_count = -10;
|
||||||
|
int keys[] = { 14, 14, 13, 12, 11 };
|
||||||
|
int keys_sum[] = { 0, 14, 28, 41, 53 };
|
||||||
|
unsigned char rgb[14][5][3];
|
||||||
|
int row_max = 12;
|
||||||
|
int ToIndex(char _col, char _row) {
|
||||||
|
return (_col * row_max) + _row;
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_ripple_effect(void){
|
||||||
|
if (scan_count == -1) {
|
||||||
|
rgblight_enable_noeeprom();
|
||||||
|
rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||||
|
} else if (scan_count >= 0 && scan_count < 5) {
|
||||||
|
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
|
||||||
|
int i = c;
|
||||||
|
// FIXME:
|
||||||
|
|
||||||
|
int index = ToIndex(keybufs[i].col,keybufs[i].row);
|
||||||
|
int coll = 0;
|
||||||
|
for(int s = 4; s >= 0; --s){
|
||||||
|
if( index >= keys_sum[s]){
|
||||||
|
coll = s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int roww = MAX(0,index - keys_sum[coll]);
|
||||||
|
|
||||||
|
int y = scan_count;
|
||||||
|
int dist_y = abs(y - coll);
|
||||||
|
for (int x=0; x<keys[y]; x++) {
|
||||||
|
int dist = abs(x - roww) + dist_y;
|
||||||
|
if (dist <= keybufs[i].frame) {
|
||||||
|
int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2;
|
||||||
|
if (elevation) {
|
||||||
|
if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); }
|
||||||
|
if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); }
|
||||||
|
if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (scan_count == 5) {
|
||||||
|
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
|
||||||
|
int i = c;
|
||||||
|
if (keybufs[i].frame < 64) {
|
||||||
|
keybufs[i].frame ++;
|
||||||
|
} else {
|
||||||
|
keybuf_begin ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (scan_count >= 6 && scan_count <= 10) {
|
||||||
|
int y = scan_count - 6;
|
||||||
|
for (int x=0; x<keys[y]; x++) {
|
||||||
|
int at = keys_sum[y] + x;
|
||||||
|
led[at].r = rgb[x][y][0];
|
||||||
|
led[at].g = rgb[x][y][1];
|
||||||
|
led[at].b = rgb[x][y][2];
|
||||||
|
}
|
||||||
|
rgblight_set();
|
||||||
|
} else if (scan_count == 11) {
|
||||||
|
memset(rgb, 0, sizeof(rgb));
|
||||||
|
}
|
||||||
|
scan_count++;
|
||||||
|
if (scan_count >= 12) { scan_count = 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
#ifdef USE_LED_RIPPLE_EFFECT
|
||||||
|
#ifdef RANDOM_RIPPLE_EFFECT
|
||||||
|
static int timer = 0;
|
||||||
|
static int timeout = 300;
|
||||||
|
timer++;
|
||||||
|
if(timer > timeout){
|
||||||
|
int end = keybuf_end;
|
||||||
|
col = rand() % 6;
|
||||||
|
row = rand() % 12;
|
||||||
|
keybufs[end].col = col;
|
||||||
|
keybufs[end].row = row;
|
||||||
|
keybufs[end].frame = 0;
|
||||||
|
keybuf_end ++;
|
||||||
|
timer = rand() % timeout;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
led_ripple_effect();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
void oled_task_user(void) {
|
||||||
|
oled_write_P(PSTR("Layer: "), false);
|
||||||
|
switch (biton32(layer_state)) {
|
||||||
|
case BASE:
|
||||||
|
oled_write_P(PSTR("Default\n"), false);
|
||||||
|
break;
|
||||||
|
case COMMAND:
|
||||||
|
oled_write_P(PSTR("COMMAND\n"), false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Or use the write_ln shortcut over adding 'n' to the end of your string
|
||||||
|
oled_write_ln_P(PSTR("Undefined"), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The kakunpc keymap for angel64
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
|
||||||
|
|
||||||
|
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 <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "wait.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "debounce.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#if (MATRIX_COLS <= 8)
|
||||||
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
|
# define matrix_bitpop(i) bitpop(matrix[i])
|
||||||
|
# define ROW_SHIFTER ((uint8_t)1)
|
||||||
|
#elif (MATRIX_COLS <= 16)
|
||||||
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
|
# define matrix_bitpop(i) bitpop16(matrix[i])
|
||||||
|
# define ROW_SHIFTER ((uint16_t)1)
|
||||||
|
#elif (MATRIX_COLS <= 32)
|
||||||
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
|
# define matrix_bitpop(i) bitpop32(matrix[i])
|
||||||
|
# define ROW_SHIFTER ((uint32_t)1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MATRIX_MASKED
|
||||||
|
extern const matrix_row_t matrix_mask[];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
|
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
/* matrix state(1:on, 0:off) */
|
||||||
|
static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_quantum(void) {
|
||||||
|
matrix_init_kb();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_quantum(void) {
|
||||||
|
matrix_scan_kb();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_rows(void) {
|
||||||
|
return MATRIX_ROWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_cols(void) {
|
||||||
|
return MATRIX_COLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Deprecated.
|
||||||
|
bool matrix_is_modified(void)
|
||||||
|
{
|
||||||
|
if (debounce_active()) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
|
{
|
||||||
|
return (matrix[row] & ((matrix_row_t)1<<col));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
// Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
|
||||||
|
// switch blocker installed and the switch is always pressed.
|
||||||
|
#ifdef MATRIX_MASKED
|
||||||
|
return matrix[row] & matrix_mask[row];
|
||||||
|
#else
|
||||||
|
return matrix[row];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print_matrix_header();
|
||||||
|
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
phex(row); print(": ");
|
||||||
|
print_matrix_row(row);
|
||||||
|
print("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_key_count(void)
|
||||||
|
{
|
||||||
|
uint8_t count = 0;
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
count += matrix_bitpop(i);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void select_row(uint8_t row)
|
||||||
|
{
|
||||||
|
setPinOutput(row_pins[row]);
|
||||||
|
writePinLow(row_pins[row]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_row(uint8_t row)
|
||||||
|
{
|
||||||
|
setPinInputHigh(row_pins[row]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_rows(void)
|
||||||
|
{
|
||||||
|
for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
|
||||||
|
setPinInputHigh(row_pins[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void select_col(uint8_t col)
|
||||||
|
{
|
||||||
|
setPinOutput(col_pins[col]);
|
||||||
|
writePinLow(col_pins[col]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_col(uint8_t col)
|
||||||
|
{
|
||||||
|
setPinInputHigh(col_pins[col]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unselect_cols(void)
|
||||||
|
{
|
||||||
|
for(uint8_t x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
setPinInputHigh(col_pins[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_pins(void) {
|
||||||
|
unselect_rows();
|
||||||
|
unselect_cols();
|
||||||
|
for (uint8_t x = 0; x < MATRIX_COLS; x++) {
|
||||||
|
setPinInputHigh(col_pins[x]);
|
||||||
|
}
|
||||||
|
for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
|
||||||
|
setPinInputHigh(row_pins[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
|
{
|
||||||
|
// Store last value of row prior to reading
|
||||||
|
matrix_row_t last_row_value = current_matrix[current_row];
|
||||||
|
|
||||||
|
// Clear data in matrix row
|
||||||
|
current_matrix[current_row] = 0;
|
||||||
|
|
||||||
|
// Select row and wait for row selecton to stabilize
|
||||||
|
select_row(current_row);
|
||||||
|
wait_us(30);
|
||||||
|
|
||||||
|
// For each col...
|
||||||
|
for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
||||||
|
|
||||||
|
// Select the col pin to read (active low)
|
||||||
|
uint8_t pin_state = readPin(col_pins[col_index]);
|
||||||
|
|
||||||
|
// Populate the matrix row with the state of the col pin
|
||||||
|
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unselect row
|
||||||
|
unselect_row(current_row);
|
||||||
|
|
||||||
|
return (last_row_value != current_matrix[current_row]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
|
{
|
||||||
|
bool matrix_changed = false;
|
||||||
|
|
||||||
|
// Select col and wait for col selecton to stabilize
|
||||||
|
select_col(current_col);
|
||||||
|
wait_us(30);
|
||||||
|
|
||||||
|
// For each row...
|
||||||
|
for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
|
||||||
|
{
|
||||||
|
uint8_t tmp = row_index + MATRIX_ROWS/2;
|
||||||
|
// Store last value of row prior to reading
|
||||||
|
matrix_row_t last_row_value = current_matrix[tmp];
|
||||||
|
|
||||||
|
// Check row pin state
|
||||||
|
if (readPin(row_pins[row_index]) == 0)
|
||||||
|
{
|
||||||
|
// Pin LO, set col bit
|
||||||
|
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Pin HI, clear col bit
|
||||||
|
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if the matrix changed state
|
||||||
|
if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
|
||||||
|
{
|
||||||
|
matrix_changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unselect col
|
||||||
|
unselect_col(current_col);
|
||||||
|
|
||||||
|
return matrix_changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void) {
|
||||||
|
|
||||||
|
// initialize key pins
|
||||||
|
init_pins();
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||||
|
raw_matrix[i] = 0;
|
||||||
|
matrix[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
debounce_init(MATRIX_ROWS);
|
||||||
|
|
||||||
|
matrix_init_quantum();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
// Set row, read cols
|
||||||
|
for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
|
||||||
|
changed |= read_cols_on_row(raw_matrix, current_row);
|
||||||
|
}
|
||||||
|
//else
|
||||||
|
// Set col, read rows
|
||||||
|
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
|
||||||
|
changed |= read_rows_on_col(raw_matrix, current_col);
|
||||||
|
}
|
||||||
|
|
||||||
|
debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
|
||||||
|
|
||||||
|
matrix_scan_quantum();
|
||||||
|
return (uint8_t)changed;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# angel64
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Keyboard for tablets.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
||||||
|
* Hardware Supported: angel64_rev1, promicro
|
||||||
|
* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make angel64/rev1:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "rev1.h"
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// put your per-action keyboard code here
|
||||||
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
|
led_set_user(usb_led);
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright 2019 kakunpc
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, \
|
||||||
|
k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, \
|
||||||
|
k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, \
|
||||||
|
k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, \
|
||||||
|
k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64\
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k01, k13, k25, k37, k49, k61 }, \
|
||||||
|
{ k02, k14, k26, k38, k50, k62 }, \
|
||||||
|
{ k03, k15, k27, k39, k51, k63 }, \
|
||||||
|
{ k04, k16, k28, k40, k52, k64 }, \
|
||||||
|
{ k05, k17, k29, k41, k53, KC_NO }, \
|
||||||
|
{ k06, k18, k30, k42, k54, KC_NO }, \
|
||||||
|
{ k07, k19, k31, k43, k55, KC_NO }, \
|
||||||
|
{ k08, k20, k32, k44, k56, KC_NO }, \
|
||||||
|
{ k09, k21, k33, k45, k57, KC_NO }, \
|
||||||
|
{ k10, k22, k34, k46, k58, KC_NO }, \
|
||||||
|
{ k11, k23, k35, k47, k59, KC_NO }, \
|
||||||
|
{ k12, k24, k36, k48, k60, KC_NO } \
|
||||||
|
}
|
||||||
Whitespace-only changes.
@@ -31,6 +31,9 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||||
|
OLED_DRIVER_ENABLE = yes
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
SRC += matrix.c
|
SRC += matrix.c
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = angel64/rev1
|
||||||
@@ -44,7 +44,7 @@ VPATH += keyboards/cannonkeys/stm32f072
|
|||||||
SRC = keyboard.c \
|
SRC = keyboard.c \
|
||||||
led.c
|
led.c
|
||||||
|
|
||||||
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
CONSOLE_ENABLE = yes # Console for debug
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ In addition to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.o
|
|||||||
* naKey - Through hole numpad
|
* naKey - Through hole numpad
|
||||||
* Handwire 101 - Handwired 4x4 (Proton C or Pro Micro)
|
* Handwire 101 - Handwired 4x4 (Proton C or Pro Micro)
|
||||||
* The Dora Board - 4x5 with rotary encoder and Proton C pinouts
|
* The Dora Board - 4x5 with rotary encoder and Proton C pinouts
|
||||||
|
* Washington Macropad - Macropad shaped like Washington State with rotary encoder and OLED
|
||||||
@@ -0,0 +1,253 @@
|
|||||||
|
/*
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x002A
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER merlin04
|
||||||
|
#define PRODUCT Washington Macropad
|
||||||
|
#define DESCRIPTION Washington State shaped macropad
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 3
|
||||||
|
#define MATRIX_COLS 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { F4, F5, F6 }
|
||||||
|
#define MATRIX_COL_PINS { F7, B1, B3 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
#define ENCODERS_PAD_A { D4 }
|
||||||
|
#define ENCODERS_PAD_B { C6 }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||||
|
*/
|
||||||
|
// #define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B6
|
||||||
|
#define BACKLIGHT_BREATHING
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
// #define RGB_DI_PIN E2
|
||||||
|
// #ifdef RGB_DI_PIN
|
||||||
|
// #define RGBLED_NUM 16
|
||||||
|
// #define RGBLIGHT_HUE_STEP 8
|
||||||
|
// #define RGBLIGHT_SAT_STEP 8
|
||||||
|
// #define RGBLIGHT_VAL_STEP 8
|
||||||
|
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
// /*== all animations enable ==*/
|
||||||
|
// #define RGBLIGHT_ANIMATIONS
|
||||||
|
// /*== or choose animations ==*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||||
|
// #define RGBLIGHT_EFFECT_SNAKE
|
||||||
|
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||||
|
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||||
|
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||||
|
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||||
|
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||||
|
// /*== customize breathing effect ==*/
|
||||||
|
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
// /*==== use exp() and sin() ====*/
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
/* defined by default; to change, uncomment and set to the combination you want */
|
||||||
|
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "washington",
|
||||||
|
"url": "https://keypcb.xyz/ViewPage/Washington",
|
||||||
|
"maintainer": "merlin04",
|
||||||
|
"width": 4.5,
|
||||||
|
"height": 3,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [{"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":0, "y":0.75}, {"x":0.5, "y":1.75}, {"x":1.5, "y":2}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
/* Copyright 2019 merlin04
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
// Defines names for use in layer keycodes and the keymap
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_FN
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defines the keycodes used by our macros in process_record_user
|
||||||
|
/*enum custom_keycodes {
|
||||||
|
};*/
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Base */
|
||||||
|
[_BASE] = LAYOUT(
|
||||||
|
KC_PGUP, KC_UP, KC_PGDN,
|
||||||
|
KC_LEFT, KC_DOWN, KC_RIGHT,
|
||||||
|
MO(_FN), KC_MUTE, BL_TOGG
|
||||||
|
),
|
||||||
|
[_FN] = LAYOUT(
|
||||||
|
KC_HOME, KC_CALC, KC_END,
|
||||||
|
BL_STEP, KC_ESC, KC_SLEP,
|
||||||
|
KC_TRNS, KC_MPLY, RESET
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
switch (biton32(layer_state)) {
|
||||||
|
case _BASE:
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_VOLU);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_VOLD);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _FN:
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_MNXT);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_MPRV);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OLED_DRIVER_ENABLE
|
||||||
|
void oled_task_user(void) {
|
||||||
|
// Host Keyboard Layer Status
|
||||||
|
oled_write_P(PSTR("Layer: "), false);
|
||||||
|
switch (biton32(layer_state)) {
|
||||||
|
case _BASE:
|
||||||
|
oled_write_P(PSTR("Default\n"), false);
|
||||||
|
break;
|
||||||
|
case _FN:
|
||||||
|
oled_write_P(PSTR("FN\n"), false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Or use the write_ln shortcut over adding '\n' to the end of your string
|
||||||
|
oled_write_ln_P(PSTR("Undefined"), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
uint8_t usb_led = host_keyboard_leds();
|
||||||
|
oled_write_P(IS_LED_ON(usb_led, USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_LED_ON(usb_led, USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
|
||||||
|
oled_write_P(IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for washington
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Washington Macropad
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A macropad shaped like Washington State that supports a rotary encoder and an OLED display.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [merlin04/KeyPCB](https://github.com/merlin04)
|
||||||
|
* Hardware Supported: Washington Macropad
|
||||||
|
* Hardware Availability: [cKeys.org](https://ckeys.org)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make ckeys/washington:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
|
|
||||||
|
## PCB Design
|
||||||
|
|
||||||
|
Download the files for the PCB [here.](https://keypcb.xyz/ViewPage/Washington#files)
|
||||||
|
|
||||||
|
## Default Layout
|
||||||
|
|
||||||
|
You can find the default layout in `washington/keymaps/default/keymap.c`
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||||
|
ENCODER_ENABLE = yes # Enable support for encoders
|
||||||
|
OLED_DRIVER_ENABLE = yes # Enable support for OLED displays
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Copyright 2019 merlin04
|
||||||
|
*
|
||||||
|
* 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 "washington.h"
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright 2019 merlin04
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This is a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
#define LAYOUT( \
|
||||||
|
k00, k01, k02, \
|
||||||
|
k10, k11, k12, \
|
||||||
|
k20, k21, k22 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k01, k02 }, \
|
||||||
|
{ k10, k11, k12 }, \
|
||||||
|
{ k20, k21, k22 } \
|
||||||
|
}
|
||||||
+2
-17
@@ -13,7 +13,6 @@
|
|||||||
#define MANUFACTURER astro
|
#define MANUFACTURER astro
|
||||||
#define PRODUCT Dumplings
|
#define PRODUCT Dumplings
|
||||||
#define DESCRIPTION 60% rgb keyboard with ble extension
|
#define DESCRIPTION 60% rgb keyboard with ble extension
|
||||||
#define LANDING_PAGE yulei.github.io/qmk_webusb_tool/60_wkl.json
|
|
||||||
|
|
||||||
/* key matrix size */
|
/* key matrix size */
|
||||||
#define MATRIX_ROWS 5
|
#define MATRIX_ROWS 5
|
||||||
@@ -35,13 +34,6 @@
|
|||||||
/* disable print */
|
/* disable print */
|
||||||
//#define NO_PRINT
|
//#define NO_PRINT
|
||||||
|
|
||||||
/* disable action features */
|
|
||||||
//#define NO_ACTION_LAYER
|
|
||||||
//#define NO_ACTION_TAPPING
|
|
||||||
//#define NO_ACTION_ONESHOT
|
|
||||||
//#define NO_ACTION_MACRO
|
|
||||||
//#define NO_ACTION_FUNCTION
|
|
||||||
|
|
||||||
//rgb light setting
|
//rgb light setting
|
||||||
#define RGBLED_NUM 18
|
#define RGBLED_NUM 18
|
||||||
#define RGB_DI_PIN D7
|
#define RGB_DI_PIN D7
|
||||||
@@ -56,16 +48,9 @@
|
|||||||
#define DRIVER_COUNT 2
|
#define DRIVER_COUNT 2
|
||||||
#define DRIVER_1_LED_TOTAL 36
|
#define DRIVER_1_LED_TOTAL 36
|
||||||
#define DRIVER_2_LED_TOTAL 36
|
#define DRIVER_2_LED_TOTAL 36
|
||||||
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
|
#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
|
||||||
|
|
||||||
// tapping setting
|
#if defined(RAW_ENABLE)
|
||||||
//#define TAPPING_TERM 200
|
|
||||||
//#define RETRO_TAPPING
|
|
||||||
//#define PERMISSIVE_HOLD
|
|
||||||
|
|
||||||
#if defined(WEBUSB_ENABLE) || defined(RAW_ENABLE)
|
|
||||||
#define WEBUSB_KEYCOUNT 61
|
|
||||||
#define WEBUSB_LAYERCOUNT 2
|
|
||||||
//VIA
|
//VIA
|
||||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 2
|
#define DYNAMIC_KEYMAP_LAYER_COUNT 2
|
||||||
// EEPROM usage
|
// EEPROM usage
|
||||||
|
|||||||
@@ -160,3 +160,27 @@ webusb_pos_t webusb_keymap[] = {
|
|||||||
{4, 0}, {4, 1}, {4, 2}, {4, 6}, {4, 10}, {4, 11}, {4, 12}, {4, 13},
|
{4, 0}, {4, 1}, {4, 2}, {4, 6}, {4, 10}, {4, 11}, {4, 12}, {4, 13},
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef RAW_ENABLE
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
#else
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
#endif
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch(keycode) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
case KC_F13: // toggle rgb matrix
|
||||||
|
rgb_matrix_toggle();
|
||||||
|
return false;
|
||||||
|
case KC_F14:
|
||||||
|
rgb_matrix_step();
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
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_DEL, KC_BSPC,
|
||||||
|
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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
|
||||||
|
|
||||||
|
[1] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
_______, 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_PSCR,
|
||||||
|
RESET, RGB_TOG,RGB_MOD,_______,KC_F13,KC_F14,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
|
||||||
|
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
|
||||||
|
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______, _______, _______,_______,TG(0),_______),
|
||||||
|
};
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
|
MIDI_ENABLE = no # MIDI support
|
||||||
|
UNICODE_ENABLE = no # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
RGBLIGHT_ENABLE = yes # Use RGB underglow light
|
||||||
|
RGB_MATRIX_ENABLE = yes # Use RGB matrix
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
|
||||||
|
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
SRC += matrix.c
|
||||||
@@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_60_ansi_split_bs_rshift(
|
[0] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
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_DEL, KC_BSPC,
|
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_DEL, KC_BSPC,
|
||||||
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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
|
||||||
|
|
||||||
[1] = LAYOUT_60_ansi_split_bs_rshift(
|
[1] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
_______, 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_PSCR,
|
_______, 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_PSCR,
|
||||||
RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
|
RESET, RGB_TOG,RGB_MOD,_______,KC_F13,KC_F14,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
|
||||||
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
|
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
|
||||||
_______,_______,_______, _______, _______,_______,TG(0),_______),
|
_______,_______,_______, _______, _______,_______,TG(0),_______),
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
At this point, September 2019, this requires a custom version of VIA in order for VIA enabled keymaps to work.
|
|
||||||
@@ -1,47 +1,39 @@
|
|||||||
# MCU name
|
# MCU name
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
# Bootloader selection
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
# Boot Section Size in *bytes*
|
# Atmel DFU atmel-dfu
|
||||||
# Teensy halfKay 512
|
# LUFA DFU lufa-dfu
|
||||||
# Teensy++ halfKay 1024
|
# QMK DFU qmk-dfu
|
||||||
# Atmel DFU loader 4096
|
# ATmega32A bootloadHID
|
||||||
# LUFA bootloader 4096
|
# ATmega328P USBasp
|
||||||
# USBaspLoader 2048
|
|
||||||
BOOTLOADER = atmel-dfu
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
# Do not put the microcontroller into power saving mode
|
|
||||||
# when we get USB suspend event. We want it to keep updating
|
|
||||||
# backlight effects.
|
|
||||||
#OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
|
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
NKRO_ENABLE = no # USB Nkey Rollover
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
MIDI_ENABLE = no # MIDI support
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
#RGBLIGHT_ENABLE = yes # Use RGB bottom light
|
RGBLIGHT_ENABLE = yes # Use RGB bottom light
|
||||||
RGB_MATRIX_ENABLE = yes # Use RGB matrix
|
RGB_MATRIX_ENABLE = yes # Use RGB matrix
|
||||||
|
|
||||||
RAW_ENABLE = yes
|
RAW_ENABLE = yes
|
||||||
#WEBUSB_ENABLE = yes
|
|
||||||
DYNAMIC_KEYMAP_ENABLE = yes
|
DYNAMIC_KEYMAP_ENABLE = yes
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
SRC += matrix.c keyboards/wilba_tech/wt_main.c
|
SRC += matrix.c keyboards/wilba_tech/wt_main.c
|
||||||
#keyboards/stm60/webusb.c
|
|
||||||
+6
-11
@@ -11,30 +11,25 @@ MCU = atmega32u4
|
|||||||
# ATmega328P USBasp
|
# ATmega328P USBasp
|
||||||
BOOTLOADER = atmel-dfu
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
# Do not put the microcontroller into power saving mode
|
|
||||||
# when we get USB suspend event. We want it to keep updating
|
|
||||||
# backlight effects.
|
|
||||||
#OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
|
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
# change yes to no to disable
|
# change yes to no to disable
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
NKRO_ENABLE = no # USB Nkey Rollover
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
MIDI_ENABLE = no # MIDI support
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
#RGBLIGHT_ENABLE = yes # Use RGB bottom light
|
#RGBLIGHT_ENABLE = yes # Use RGB underglow light
|
||||||
RGB_MATRIX_ENABLE = yes # Use RGB matrix
|
RGB_MATRIX_ENABLE = yes # Use RGB matrix
|
||||||
|
|
||||||
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
|
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# Docs
|
||||||
|
|
||||||
|
1. https://docs.qmk.fm/#/
|
||||||
|
2. To build, run: `make dz60:_bonfire`
|
||||||
|
|
||||||
|
## Map of Layers
|
||||||
|
|
||||||
|
http://www.keyboard-layout-editor.com/#/gists/b19ee1c251c908d9b5ef76965d588937
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Todo
|
||||||
|
- lighting effects based on layer in use
|
||||||
|
- https://github.com/DanDobrick/qmk_firmware/blob/danDobrick-v60r-layout/keyboards/v60_type_r/keymaps/danDobrick/keymap.c#L140
|
||||||
|
|
||||||
|
- rewrite the mod-tap functions to use the non-deprecated way of instancing them
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Variables
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int held_esc_threshold = 230;
|
||||||
|
bool is_esc_held = false;
|
||||||
|
uint16_t held_esc_timer = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define Layers
|
||||||
|
*/
|
||||||
|
enum layers {
|
||||||
|
BASE = 0,
|
||||||
|
NRMN,
|
||||||
|
GAME,
|
||||||
|
FCTN,
|
||||||
|
KEYB
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define Custom Keycodes
|
||||||
|
*/
|
||||||
|
enum custom_keycodes {
|
||||||
|
HLD_ESC = SAFE_RANGE,
|
||||||
|
MOD_UP = MT(MOD_RSFT, KC_UP),
|
||||||
|
MOD_RT = MT(MOD_HYPR, KC_RIGHT),
|
||||||
|
MOD_DN = MT(MOD_RCTL, KC_DOWN),
|
||||||
|
MOD_LT = MT(MOD_RGUI, KC_LEFT)
|
||||||
|
};
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
* Custom Keycodes
|
||||||
|
* https://beta.docs.qmk.fm/detailed-guides/custom_quantum_functions#custom-keycodes
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Called on every keyup and keydown
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record)
|
||||||
|
{
|
||||||
|
switch (keycode) {
|
||||||
|
case HLD_ESC:
|
||||||
|
if(record->event.pressed) {
|
||||||
|
is_esc_held = true;
|
||||||
|
held_esc_timer = timer_read();
|
||||||
|
} else {
|
||||||
|
is_esc_held = false;
|
||||||
|
unregister_code(KC_ESC);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// checking the held escape timer
|
||||||
|
void matrix_scan_user(void)
|
||||||
|
{
|
||||||
|
if(is_esc_held && timer_elapsed(held_esc_timer) > held_esc_threshold) {
|
||||||
|
register_code(KC_ESC);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LAYOUT_bonfire Row Keys
|
||||||
|
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||||
|
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │ 0e │ 14
|
||||||
|
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||||
|
* │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ 14
|
||||||
|
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||||
|
* │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ 13
|
||||||
|
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
|
||||||
|
* │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ 13
|
||||||
|
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
|
||||||
|
* │40 │41 │43 │ 46 │4a │4b │4d │4e │ 8
|
||||||
|
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define LAYOUT_bonfire( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
|
||||||
|
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
|
||||||
|
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||||
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
|
||||||
|
k40, k41, k43, k46, k4a, k4b, k4d, k4e \
|
||||||
|
) { \
|
||||||
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
|
||||||
|
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
|
||||||
|
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
|
||||||
|
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
|
||||||
|
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XXXXXXX = Key does nothing.
|
||||||
|
* _______ = Key that allows the uppermost exposed key in a layer below it.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer 0
|
||||||
|
*
|
||||||
|
* QWERTY and basic modifiers.
|
||||||
|
* Upper layers are toggled or accessed through the "HACK" key: last key on fourth row.
|
||||||
|
*/
|
||||||
|
[BASE] = LAYOUT_bonfire(
|
||||||
|
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_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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOD_UP, MO(FCTN),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MOD_LT, MOD_DN, MOD_RT
|
||||||
|
),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer 1
|
||||||
|
*
|
||||||
|
* NORMAN Key layout.
|
||||||
|
* All that's changed is the position of A-Z and a few punctuation keys.
|
||||||
|
*/
|
||||||
|
[NRMN] = LAYOUT_bonfire(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, _______, _______, _______,
|
||||||
|
_______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______, _______,
|
||||||
|
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer 2
|
||||||
|
*
|
||||||
|
* Moves the escape key from the left to the right side of the keyboard for gaming.
|
||||||
|
*/
|
||||||
|
[GAME] = LAYOUT_bonfire(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
HLD_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer 3
|
||||||
|
*
|
||||||
|
* Function layer.
|
||||||
|
* This layer is accessed when "HACK" is held down.
|
||||||
|
* Modifiers and such to basic keys, but with basic key functions.
|
||||||
|
*/
|
||||||
|
[FCTN] = LAYOUT_bonfire(
|
||||||
|
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_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
|
||||||
|
KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
|
||||||
|
_______, KC_SLEP, KC_WAKE, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, MO(KEYB), _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer 4
|
||||||
|
*
|
||||||
|
* This is the KEYB/System layer.
|
||||||
|
* Other keymaps call this a NAV layer, but it's more than just NAV-ing the board's layers.
|
||||||
|
* This Layer currently handles RGB and puts the board into RESET for flashing.
|
||||||
|
*
|
||||||
|
* ~ key resets board to [BASE].
|
||||||
|
* 1 key toggles [NRMN].
|
||||||
|
* 2 key toggles [GAME].
|
||||||
|
* BACKSPACE puts board into reset.
|
||||||
|
*/
|
||||||
|
[KEYB] = LAYOUT_bonfire(
|
||||||
|
TO(BASE), TG(NRMN), TO(GAME), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
|
||||||
|
XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bonfire Layout
|
||||||
|
* v6.1.0
|
||||||
|
*
|
||||||
|
* @author Ethan Beyer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "keymap-parts/defs.c"
|
||||||
|
#include "keymap-parts/layers.c"
|
||||||
|
#include "keymap-parts/functions.c"
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Cool Function where a single key does ALT+TAB
|
||||||
|
* From: https://beta.docs.qmk.fm/features/feature_macros#super-alt-tab
|
||||||
|
*/
|
||||||
|
bool is_alt_tab_active = false; // ADD this near the begining of keymap.c
|
||||||
|
uint16_t alt_tab_timer = 0; // we will be using them soon.
|
||||||
|
|
||||||
|
enum custom_keycodes { // Make sure have the awesome keycode ready
|
||||||
|
ALT_TAB = SAFE_RANGE,
|
||||||
|
};
|
||||||
|
|
||||||
|
// key processing
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) { // This will do most of the grunt work with the keycodes.
|
||||||
|
case ALT_TAB:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (!is_alt_tab_active) {
|
||||||
|
is_alt_tab_active = true;
|
||||||
|
register_code(KC_LALT);
|
||||||
|
}
|
||||||
|
alt_tab_timer = timer_read();
|
||||||
|
register_code(KC_TAB);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_TAB);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The very important timer.
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
if (is_alt_tab_active && timer_elapsed(alt_tab_timer) > 1000) {
|
||||||
|
unregister_code(KC_LALT);
|
||||||
|
is_alt_tab_active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
|
||||||
|
# CONSOLE_ENABLE = yes
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[NAME] = LAYOUT_bonfire(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
+110
-423
@@ -1,426 +1,113 @@
|
|||||||
{
|
{
|
||||||
"keyboard_name": "ep96",
|
"keyboard_name": "ep96",
|
||||||
"maintainer": "e11i0t23",
|
"maintainer": "e11i0t23",
|
||||||
"width": 19,
|
"width": 19,
|
||||||
"height": 6,
|
"height": 6,
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT": {
|
"LAYOUT": {
|
||||||
"key_count": 100,
|
"key_count": 100,
|
||||||
"layout": [{
|
"layout": [
|
||||||
"label": "Esc",
|
{"label":"Esc", "x":0, "y":0},
|
||||||
"x": 0,
|
{"label":"F1", "x":1, "y":0},
|
||||||
"y": 0
|
{"label":"F2", "x":2, "y":0},
|
||||||
}, {
|
{"label":"F3", "x":3, "y":0},
|
||||||
"label": "F1",
|
{"label":"F4", "x":4, "y":0},
|
||||||
"x": 1,
|
{"label":"F5", "x":5, "y":0},
|
||||||
"y": 0
|
{"label":"F6", "x":6, "y":0},
|
||||||
}, {
|
{"label":"F7", "x":7, "y":0},
|
||||||
"label": "F2",
|
{"label":"F8", "x":8, "y":0},
|
||||||
"x": 2,
|
{"label":"F9", "x":9, "y":0},
|
||||||
"y": 0
|
{"label":"F10", "x":10, "y":0},
|
||||||
}, {
|
{"label":"F11", "x":11, "y":0},
|
||||||
"label": "F3",
|
{"label":"F12", "x":12, "y":0},
|
||||||
"x": 3,
|
{"label":"Print Screen", "x":13, "y":0},
|
||||||
"y": 0
|
{"label":"Delete", "x":14, "y":0},
|
||||||
}, {
|
{"label":"Home", "x":15, "y":0},
|
||||||
"label": "F4",
|
{"label":"End", "x":16, "y":0},
|
||||||
"x": 4,
|
{"label":"Page Up", "x":17, "y":0},
|
||||||
"y": 0
|
{"label":"Page Down", "x":18, "y":0},
|
||||||
}, {
|
{"label":"~", "x":0, "y":1},
|
||||||
"label": "F5",
|
{"label":"!", "x":1, "y":1},
|
||||||
"x": 5,
|
{"label":"@", "x":2, "y":1},
|
||||||
"y": 0
|
{"label":"#", "x":3, "y":1},
|
||||||
}, {
|
{"label":"$", "x":4, "y":1},
|
||||||
"label": "F6",
|
{"label":"%", "x":5, "y":1},
|
||||||
"x": 6,
|
{"label":"^", "x":6, "y":1},
|
||||||
"y": 0
|
{"label":"&", "x":7, "y":1},
|
||||||
}, {
|
{"label":"*", "x":8, "y":1},
|
||||||
"label": "F7",
|
{"label":"(", "x":9, "y":1},
|
||||||
"x": 7,
|
{"label":")", "x":10, "y":1},
|
||||||
"y": 0
|
{"label":"_", "x":11, "y":1},
|
||||||
}, {
|
{"label":"+", "x":12, "y":1},
|
||||||
"label": "F8",
|
{"label":"Backspace", "x":13, "y":1, "w":2},
|
||||||
"x": 8,
|
{"label":"Num Lock", "x":15, "y":1},
|
||||||
"y": 0
|
{"label":"/", "x":16, "y":1},
|
||||||
}, {
|
{"label":"*", "x":17, "y":1},
|
||||||
"label": "F9",
|
{"label":"-", "x":18, "y":1},
|
||||||
"x": 9,
|
{"label":"Tab", "x":0, "y":2, "w":1.5},
|
||||||
"y": 0
|
{"label":"Q", "x":1.5, "y":2},
|
||||||
}, {
|
{"label":"W", "x":2.5, "y":2},
|
||||||
"label": "F10",
|
{"label":"E", "x":3.5, "y":2},
|
||||||
"x": 10,
|
{"label":"R", "x":4.5, "y":2},
|
||||||
"y": 0
|
{"label":"T", "x":5.5, "y":2},
|
||||||
}, {
|
{"label":"Y", "x":6.5, "y":2},
|
||||||
"label": "F11",
|
{"label":"U", "x":7.5, "y":2},
|
||||||
"x": 11,
|
{"label":"I", "x":8.5, "y":2},
|
||||||
"y": 0
|
{"label":"O", "x":9.5, "y":2},
|
||||||
}, {
|
{"label":"P", "x":10.5, "y":2},
|
||||||
"label": "F12",
|
{"label":"{", "x":11.5, "y":2},
|
||||||
"x": 12,
|
{"label":"}", "x":12.5, "y":2},
|
||||||
"y": 0
|
{"label":"7", "x":15, "y":2},
|
||||||
}, {
|
{"label":"8", "x":16, "y":2},
|
||||||
"label": "Prt Sc",
|
{"label":"9", "x":17, "y":2},
|
||||||
"x": 13,
|
{"label":"Caps Lock", "x":0, "y":3, "w":1.75},
|
||||||
"y": 0
|
{"label":"A", "x":1.75, "y":3},
|
||||||
}, {
|
{"label":"S", "x":2.75, "y":3},
|
||||||
"label": "Delete",
|
{"label":"D", "x":3.75, "y":3},
|
||||||
"x": 14,
|
{"label":"F", "x":4.75, "y":3},
|
||||||
"y": 0
|
{"label":"G", "x":5.75, "y":3},
|
||||||
}, {
|
{"label":"H", "x":6.75, "y":3},
|
||||||
"label": "home",
|
{"label":"J", "x":7.75, "y":3},
|
||||||
"x": 15,
|
{"label":"K", "x":8.75, "y":3},
|
||||||
"y": 0
|
{"label":"L", "x":9.75, "y":3},
|
||||||
}, {
|
{"label":":", "x":10.75, "y":3},
|
||||||
"label": "Menu",
|
{"label":"\"", "x":11.75, "y":3},
|
||||||
"x": 16,
|
{"label":"~", "x":12.75, "y":3},
|
||||||
"y": 0
|
{"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
|
||||||
}, {
|
{"label":"4", "x":15, "y":3},
|
||||||
"label": "Pg Up",
|
{"label":"5", "x":16, "y":3},
|
||||||
"x": 17,
|
{"label":"6", "x":17, "y":3},
|
||||||
"y": 0
|
{"label":"+", "x":18, "y":2, "h":2},
|
||||||
}, {
|
{"label":"Shift", "x":0, "y":4, "w":1.25},
|
||||||
"label": "Pg Dn",
|
{"label":"|", "x":1.25, "y":4},
|
||||||
"x": 18,
|
{"label":"Z", "x":2.25, "y":4},
|
||||||
"y": 0
|
{"label":"X", "x":3.25, "y":4},
|
||||||
}, {
|
{"label":"C", "x":4.25, "y":4},
|
||||||
"label": "~",
|
{"label":"V", "x":5.25, "y":4},
|
||||||
"x": 0,
|
{"label":"B", "x":6.25, "y":4},
|
||||||
"y": 1
|
{"label":"N", "x":7.25, "y":4},
|
||||||
}, {
|
{"label":"M", "x":8.25, "y":4},
|
||||||
"label": "!",
|
{"label":"<", "x":9.25, "y":4},
|
||||||
"x": 1,
|
{"label":">", "x":10.25, "y":4},
|
||||||
"y": 1
|
{"label":"?", "x":11.25, "y":4},
|
||||||
}, {
|
{"label":"Shift", "x":12.25, "y":4, "w":1.75},
|
||||||
"label": "@",
|
{"label":"↑", "x":14, "y":4},
|
||||||
"x": 2,
|
{"label":"1", "x":15, "y":4},
|
||||||
"y": 1
|
{"label":"2", "x":16, "y":4},
|
||||||
}, {
|
{"label":"3", "x":17, "y":4},
|
||||||
"label": "#",
|
{"label":"Ctrl", "x":0, "y":5, "w":1.25},
|
||||||
"x": 3,
|
{"label":"Win", "x":1.25, "y":5, "w":1.25},
|
||||||
"y": 1
|
{"label":"Alt", "x":2.5, "y":5, "w":1.25},
|
||||||
}, {
|
{"label":"Space", "x":3.75, "y":5, "w":6.25},
|
||||||
"label": "$",
|
{"label":"Alt", "x":10, "y":5, "w":1.5},
|
||||||
"x": 4,
|
{"label":"Ctrl", "x":11.5, "y":5, "w":1.5},
|
||||||
"y": 1
|
{"label":"←", "x":13, "y":5},
|
||||||
}, {
|
{"label":"↓", "x":14, "y":5},
|
||||||
"label": "%",
|
{"label":"→", "x":15, "y":5},
|
||||||
"x": 5,
|
{"label":"0", "x":16, "y":5},
|
||||||
"y": 1
|
{"label":".", "x":17, "y":5},
|
||||||
}, {
|
{"label":"Enter", "x":18, "y":4, "h":2}
|
||||||
"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": "Num Lock",
|
|
||||||
"x": 15,
|
|
||||||
"y": 1
|
|
||||||
}, {
|
|
||||||
"label": "/",
|
|
||||||
"x": 16,
|
|
||||||
"y": 1
|
|
||||||
}, {
|
|
||||||
"label": "*",
|
|
||||||
"x": 17,
|
|
||||||
"y": 1
|
|
||||||
}, {
|
|
||||||
"label": "-",
|
|
||||||
"x": 18,
|
|
||||||
"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": "7",
|
|
||||||
"x": 15,
|
|
||||||
"y": 2
|
|
||||||
}, {
|
|
||||||
"label": "8",
|
|
||||||
"x": 16,
|
|
||||||
"y": 2
|
|
||||||
}, {
|
|
||||||
"label": "9",
|
|
||||||
"x": 17,
|
|
||||||
"y": 2
|
|
||||||
}, {
|
|
||||||
"label": "+",
|
|
||||||
"x": 18,
|
|
||||||
"y": 2,
|
|
||||||
"h": 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": "4",
|
|
||||||
"x": 15,
|
|
||||||
"y": 3
|
|
||||||
}, {
|
|
||||||
"label": "5",
|
|
||||||
"x": 16,
|
|
||||||
"y": 3
|
|
||||||
}, {
|
|
||||||
"label": "6",
|
|
||||||
"x": 17,
|
|
||||||
"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": "1",
|
|
||||||
"x": 15,
|
|
||||||
"y": 4
|
|
||||||
}, {
|
|
||||||
"label": "2",
|
|
||||||
"x": 16,
|
|
||||||
"y": 4
|
|
||||||
}, {
|
|
||||||
"label": "3",
|
|
||||||
"x": 17,
|
|
||||||
"y": 4
|
|
||||||
}, {
|
|
||||||
"label": "Enter",
|
|
||||||
"x": 18,
|
|
||||||
"y": 4,
|
|
||||||
"h": 2
|
|
||||||
}, {
|
|
||||||
"label": "Ctrl",
|
|
||||||
"x": 0,
|
|
||||||
"y": 5,
|
|
||||||
"w": 1.25
|
|
||||||
}, {
|
|
||||||
"label": "Win",
|
|
||||||
"x": 1.25,
|
|
||||||
"y": 5,
|
|
||||||
"w": 1.25
|
|
||||||
}, {
|
|
||||||
"label": "Alt",
|
|
||||||
"x": 2.5,
|
|
||||||
"y": 5,
|
|
||||||
"w": 1.25
|
|
||||||
}, {
|
|
||||||
"x": 3.75,
|
|
||||||
"y": 5,
|
|
||||||
"w": 6.25
|
|
||||||
}, {
|
|
||||||
"label": "Alt",
|
|
||||||
"x": 10,
|
|
||||||
"y": 5,
|
|
||||||
"w": 1.5
|
|
||||||
}, {
|
|
||||||
"label": "Crtl",
|
|
||||||
"x": 11.5,
|
|
||||||
"y": 5,
|
|
||||||
"w": 1.5
|
|
||||||
}, {
|
|
||||||
"label": "\u2190",
|
|
||||||
"x": 13,
|
|
||||||
"y": 5
|
|
||||||
}, {
|
|
||||||
"label": "\u2193",
|
|
||||||
"x": 14,
|
|
||||||
"y": 5
|
|
||||||
}, {
|
|
||||||
"label": "\u2192",
|
|
||||||
"x": 15,
|
|
||||||
"y": 5
|
|
||||||
}, {
|
|
||||||
"label": "0",
|
|
||||||
"x": 16,
|
|
||||||
"y": 5
|
|
||||||
}, {
|
|
||||||
"label": ".",
|
|
||||||
"x": 17,
|
|
||||||
"y": 5
|
|
||||||
}]
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,6 @@
|
|||||||
{ "label": "7", "x": 17.5, "y": 1 },
|
{ "label": "7", "x": 17.5, "y": 1 },
|
||||||
{ "label": "8", "x": 18.5, "y": 1 },
|
{ "label": "8", "x": 18.5, "y": 1 },
|
||||||
{ "label": "9", "x": 19.5, "y": 1 },
|
{ "label": "9", "x": 19.5, "y": 1 },
|
||||||
{ "label": "+", "x": 20.5, "y": 1, "h": 2 },
|
|
||||||
{ "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 },
|
{ "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 },
|
||||||
{ "label": "A", "x": 1.75, "y": 2 },
|
{ "label": "A", "x": 1.75, "y": 2 },
|
||||||
{ "label": "S", "x": 2.75, "y": 2 },
|
{ "label": "S", "x": 2.75, "y": 2 },
|
||||||
@@ -62,6 +61,7 @@
|
|||||||
{ "label": "4", "x": 17.5, "y": 2 },
|
{ "label": "4", "x": 17.5, "y": 2 },
|
||||||
{ "label": "5", "x": 18.5, "y": 2 },
|
{ "label": "5", "x": 18.5, "y": 2 },
|
||||||
{ "label": "6", "x": 19.5, "y": 2 },
|
{ "label": "6", "x": 19.5, "y": 2 },
|
||||||
|
{ "label": "+", "x": 20.5, "y": 1, "h": 2 },
|
||||||
{ "label": "Shift", "x": 0, "y": 3, "w": 1.25 },
|
{ "label": "Shift", "x": 0, "y": 3, "w": 1.25 },
|
||||||
{ "label": "|", "x": 1.25, "y": 3 },
|
{ "label": "|", "x": 1.25, "y": 3 },
|
||||||
{ "label": "Z", "x": 2.25, "y": 3 },
|
{ "label": "Z", "x": 2.25, "y": 3 },
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
#define IGNORE_MOD_TAP_INTERRUPT
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
#undef PERMISSIVE_HOLD
|
#undef PERMISSIVE_HOLD
|
||||||
#undef PREVENT_STUCK_MODIFIERS
|
|
||||||
|
|
||||||
|
|
||||||
#define FORCE_NKRO
|
#define FORCE_NKRO
|
||||||
|
|||||||
@@ -35,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define RGBLIGHT_SAT_STEP 8
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
#define RGBLIGHT_VAL_STEP 8
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
|
||||||
|
#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LGUI)))
|
||||||
@@ -1 +1,7 @@
|
|||||||
BOOTLOADER = qmk-dfu
|
BOOTLOADER = qmk-dfu
|
||||||
|
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum keyboard_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_FNM
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FNM MO(_FNM)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_65_ansi_7u_wk_splitbs(
|
||||||
|
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_BSLS,KC_DEL, KC_HOME,
|
||||||
|
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_BSPC,KC_PGUP,
|
||||||
|
KC_TILD, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, FNM, KC_LEFT,KC_DOWN,KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FNM] = LAYOUT_65_ansi_7u_wk_splitbs(
|
||||||
|
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, KC_MPLY,
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, RESET, KC_VOLU,
|
||||||
|
AG_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_VOLD,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_MNXT,
|
||||||
|
_______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Bart Riemens
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x7051
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Exclusive / E-Team
|
||||||
|
#define PRODUCT E7-V1 SE
|
||||||
|
#define DESCRIPTION E7-V1 SE
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 6
|
||||||
|
#define MATRIX_COLS 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, F0 }
|
||||||
|
#define MATRIX_COL_PINS { D5, D3, D2, D1, D0, D7, D6, D4, B4, B5, B6, C6, C7, F7, F6, F4 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||||
|
*/
|
||||||
|
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
#define BACKLIGHT_BREATHING
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
#define RGB_DI_PIN E2
|
||||||
|
#ifdef RGB_DI_PIN
|
||||||
|
#define RGBLED_NUM 16
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||||
|
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||||
|
/*== all animations enable ==*/
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
/*== or choose animations ==*/
|
||||||
|
/* #define RGBLIGHT_EFFECT_BREATHING */
|
||||||
|
/* #define RGBLIGHT_EFFECT_RAINBOW_MOOD */
|
||||||
|
/* #define RGBLIGHT_EFFECT_RAINBOW_SWIRL */
|
||||||
|
/* #define RGBLIGHT_EFFECT_SNAKE */
|
||||||
|
/* #define RGBLIGHT_EFFECT_KNIGHT */
|
||||||
|
/* #define RGBLIGHT_EFFECT_CHRISTMAS */
|
||||||
|
/* #define RGBLIGHT_EFFECT_STATIC_GRADIENT */
|
||||||
|
/* #define RGBLIGHT_EFFECT_RGB_TEST */
|
||||||
|
/* #define RGBLIGHT_EFFECT_ALTERNATING */
|
||||||
|
/*== customize breathing effect ==*/
|
||||||
|
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||||
|
#define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||||
|
/*==== use exp() and sin() ====*/
|
||||||
|
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||||
|
#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* key combination for magic key command */
|
||||||
|
/* defined by default; to change, uncomment and set to the combination you want */
|
||||||
|
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
|
||||||
|
|
||||||
|
/* control how magic key switches layers */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||||
|
|
||||||
|
/* override magic key keymap */
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||||
|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||||
|
//#define MAGIC_KEY_HELP H
|
||||||
|
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||||
|
//#define MAGIC_KEY_DEBUG D
|
||||||
|
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||||
|
//#define MAGIC_KEY_DEBUG_KBD K
|
||||||
|
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||||
|
//#define MAGIC_KEY_VERSION V
|
||||||
|
//#define MAGIC_KEY_STATUS S
|
||||||
|
//#define MAGIC_KEY_CONSOLE C
|
||||||
|
//#define MAGIC_KEY_LAYER0 0
|
||||||
|
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||||
|
//#define MAGIC_KEY_LAYER1 1
|
||||||
|
//#define MAGIC_KEY_LAYER2 2
|
||||||
|
//#define MAGIC_KEY_LAYER3 3
|
||||||
|
//#define MAGIC_KEY_LAYER4 4
|
||||||
|
//#define MAGIC_KEY_LAYER5 5
|
||||||
|
//#define MAGIC_KEY_LAYER6 6
|
||||||
|
//#define MAGIC_KEY_LAYER7 7
|
||||||
|
//#define MAGIC_KEY_LAYER8 8
|
||||||
|
//#define MAGIC_KEY_LAYER9 9
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER B
|
||||||
|
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||||
|
//#define MAGIC_KEY_LOCK CAPS
|
||||||
|
//#define MAGIC_KEY_EEPROM E
|
||||||
|
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||||
|
//#define MAGIC_KEY_NKRO N
|
||||||
|
//#define MAGIC_KEY_SLEEP_LED Z
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* MIDI options
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent use of disabled MIDI features in the keymap */
|
||||||
|
//#define MIDI_ENABLE_STRICT 1
|
||||||
|
|
||||||
|
/* enable basic MIDI features:
|
||||||
|
- MIDI notes can be sent when in Music mode is on
|
||||||
|
*/
|
||||||
|
//#define MIDI_BASIC
|
||||||
|
|
||||||
|
/* enable advanced MIDI features:
|
||||||
|
- MIDI notes can be added to the keymap
|
||||||
|
- Octave shift and transpose
|
||||||
|
- Virtual sustain, portamento, and modulation wheel
|
||||||
|
- etc.
|
||||||
|
*/
|
||||||
|
//#define MIDI_ADVANCED
|
||||||
|
|
||||||
|
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||||
|
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HD44780 LCD Display Configuration
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
#define LCD_LINES 2 //< number of visible lines of the display
|
||||||
|
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||||
|
|
||||||
|
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||||
|
|
||||||
|
#if LCD_IO_MODE
|
||||||
|
#define LCD_PORT PORTB //< port for the LCD lines
|
||||||
|
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||||
|
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||||
|
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||||
|
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||||
|
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||||
|
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||||
|
#define LCD_RS_PIN 3 //< pin for RS line
|
||||||
|
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||||
|
#define LCD_RW_PIN 2 //< pin for RW line
|
||||||
|
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||||
|
#define LCD_E_PIN 1 //< pin for Enable line
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
// #define BOOTMAGIC_LITE_ROW 0
|
||||||
|
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/* Copyright 2019 Bart Riemens
|
||||||
|
*
|
||||||
|
* 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 "e7v1se.h"
|
||||||
|
|
||||||
|
// Optional override functions below.
|
||||||
|
// You can leave any or all of these undefined.
|
||||||
|
// These are only required if you want to perform custom actions.
|
||||||
|
|
||||||
|
/*
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
// put your per-action keyboard code here
|
||||||
|
// runs for every action, just before processing by the firmware
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool led_update_kb(led_t led_state) {
|
||||||
|
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||||
|
|
||||||
|
return led_update_user(led_state);
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright 2019 Bart Riemens
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This is a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
#define LAYOUT( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
|
||||||
|
K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, \
|
||||||
|
K50, K51, K52, K56, K5A, K5B, K5D, K5E, K5F \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E, K0F }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
|
||||||
|
{ K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
|
||||||
|
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, K4E, KC_NO }, \
|
||||||
|
{ K50, K51, K52, KC_NO, KC_NO, KC_NO, K56, KC_NO, KC_NO, KC_NO, K5A, K5B, KC_NO, K5D, K5E, K5F } \
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "e7v1se",
|
||||||
|
"url": "https://geekhack.org/index.php?topic=101363",
|
||||||
|
"maintainer": "Bart Riemens",
|
||||||
|
"width": 16.25,
|
||||||
|
"height": 6.25,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{ "label": "K00", "x": 0, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K01", "x": 1.25, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K02", "x": 2.25, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K03", "x": 3.25, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K04", "x": 4.25, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K05", "x": 5.5, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K06", "x": 6.5, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K07", "x": 7.5, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K08", "x": 8.5, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K09", "x": 9.75, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K0a", "x": 10.75, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K0b", "x": 11.75, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K0c", "x": 12.75, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K0e", "x": 14, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K0f", "x": 15.25, "y": 0, "w": 1 },
|
||||||
|
{ "label": "K10", "x": 0, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K11", "x": 1, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K12", "x": 2, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K13", "x": 3, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K14", "x": 4, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K15", "x": 5, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K16", "x": 6, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K17", "x": 7, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K18", "x": 8, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K19", "x": 9, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1a", "x": 10, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1b", "x": 11, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1c", "x": 12, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1d", "x": 13, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1e", "x": 14, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K1f", "x": 15.25, "y": 1, "w": 1 },
|
||||||
|
{ "label": "K20", "x": 0, "y": 2, "w": 1.5 },
|
||||||
|
{ "label": "K22", "x": 1.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K23", "x": 2.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K24", "x": 3.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K25", "x": 4.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K26", "x": 5.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K27", "x": 6.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K28", "x": 7.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K29", "x": 8.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K2a", "x": 9.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K2b", "x": 10.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K2c", "x": 11.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K2d", "x": 12.5, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K2e", "x": 13.5, "y": 2, "w": 1.5 },
|
||||||
|
{ "label": "K2f", "x": 15.25, "y": 2, "w": 1 },
|
||||||
|
{ "label": "K30", "x": 0, "y": 3, "w": 1.75 },
|
||||||
|
{ "label": "K32", "x": 1.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K33", "x": 2.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K34", "x": 3.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K35", "x": 4.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K36", "x": 5.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K37", "x": 6.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K38", "x": 7.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K39", "x": 8.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K3a", "x": 9.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K3b", "x": 10.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K3c", "x": 11.75, "y": 3, "w": 1 },
|
||||||
|
{ "label": "K3d", "x": 12.75, "y": 3, "w": 2.25 },
|
||||||
|
{ "label": "K40", "x": 0, "y": 4, "w": 1.25 },
|
||||||
|
{ "label": "K41", "x": 1.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K42", "x": 2.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K43", "x": 3.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K44", "x": 4.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K45", "x": 5.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K46", "x": 6.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K47", "x": 7.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K48", "x": 8.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K49", "x": 9.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K4a", "x": 10.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K4b", "x": 11.25, "y": 4, "w": 1 },
|
||||||
|
{ "label": "K4d", "x": 12.25, "y": 4, "w": 1.75 },
|
||||||
|
{ "label": "K4e", "x": 14.25, "y": 4.25, "w": 1 },
|
||||||
|
{ "label": "K50", "x": 0, "y": 5, "w": 1.25 },
|
||||||
|
{ "label": "K51", "x": 1.25, "y": 5, "w": 1.25 },
|
||||||
|
{ "label": "K52", "x": 2.5, "y": 5, "w": 1.25 },
|
||||||
|
{ "label": "K56", "x": 3.75, "y": 5, "w": 6.25 },
|
||||||
|
{ "label": "K5a", "x": 10, "y": 5, "w": 1.25 },
|
||||||
|
{ "label": "K5b", "x": 11.25, "y": 5, "w": 1.25 },
|
||||||
|
{ "label": "K5d", "x": 13.25, "y": 5.25, "w": 1 },
|
||||||
|
{ "label": "K5e", "x": 14.25, "y": 5.25, "w": 1 },
|
||||||
|
{ "label": "K5f", "x": 15.25, "y": 5.25, "w": 1 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ,---------------------------------------------------------------------|
|
||||||
|
* |Esc|▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓|Ins|▓|Del|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|▓PgU |
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |▓PgDn|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |▓▓▓▓▓▓▓|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |▓| Up |▓▓|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Ctrl|GUI |Alt | Space |Alt |Fn |▓|Lt |Dn |Rt |
|
||||||
|
* `---------------------------------------------------------------------|'
|
||||||
|
*/
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[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_INS, KC_DEL,
|
||||||
|
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_BSPC, KC_PGUP,
|
||||||
|
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_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[1] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, BL_DEC, BL_INC, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
|
||||||
|
_______, _______, AG_TOGG, _______, _______, MO(1), RGB_MOD, RGB_VAD, RGB_HUD),
|
||||||
|
};
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# The default keymap for e7v1se
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------------------------|
|
||||||
|
|Esc|▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓|Ins|▓|Del|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|▓PgU |
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |▓PgDn|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |▓▓▓▓▓▓▓|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |▓| Up |▓▓|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Ctrl|GUI |Alt | Space |Alt |Fn |▓|Lt |Dn |Rt |
|
||||||
|
`---------------------------------------------------------------------|'
|
||||||
|
```
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ,---------------------------------------------------------------------|
|
||||||
|
* |Esc|▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓|Ins|▓|Del|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|▓PgU |
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |▓PgDn|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |▓▓▓▓▓▓▓|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |▓| Up |▓▓|
|
||||||
|
* |---------------------------------------------------------------------|
|
||||||
|
* |Ctrl|Alt |GUI| Space |Alt |Fn |▓|Lt |Dn |Rt |
|
||||||
|
* `---------------------------------------------------------------------|'
|
||||||
|
*/
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[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_INS, KC_DEL,
|
||||||
|
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_BSPC, KC_PGUP,
|
||||||
|
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_PGDN,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[1] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
BL_TOGG, BL_DEC, BL_INC, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
|
||||||
|
_______, _______, AG_TOGG , _______, _______, MO(1), RGB_MOD, RGB_VAD, RGB_HUD),
|
||||||
|
};
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# The MacOS keymap for e7v1se
|
||||||
|
|
||||||
|
```
|
||||||
|
,---------------------------------------------------------------------|
|
||||||
|
|Esc|▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓|Ins|▓|Del|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|▓PgU |
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |▓PgDn|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |▓▓▓▓▓▓▓|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |▓| Up |▓▓|
|
||||||
|
|---------------------------------------------------------------------|
|
||||||
|
|Ctrl|Alt |GUI| Space |Alt |Fn |▓|Lt |Dn |Rt |
|
||||||
|
`---------------------------------------------------------------------|'
|
||||||
|
```
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# E7-V1 SE
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A 75% keyboard made by Exclusive and run in a Geekhack group buy.
|
||||||
|
|
||||||
|
- Keyboard Maintainer: [Bart Riemens](https://github.com/briemens)
|
||||||
|
- Hardware Supported: E7-V1 SE
|
||||||
|
- Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=101363)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make exclusive/e7v1se:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "fluorite",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "ihotsuno, qmk",
|
||||||
|
"width": 24,
|
||||||
|
"height": 9,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"F1", "x":3.5, "y":0},
|
||||||
|
{"label":"F2", "x":4.5, "y":0},
|
||||||
|
{"label":"F3", "x":5.5, "y":0},
|
||||||
|
{"label":"F4", "x":6.5, "y":0},
|
||||||
|
{"label":"Print Screen", "x":7.5, "y":1},
|
||||||
|
{"label":"*", "x":8.5, "y":1},
|
||||||
|
{"label":"/", "x":9.5, "y":1},
|
||||||
|
{"label":"0", "x":10.5, "y":1},
|
||||||
|
{"label":"Num Lock", "x":12.5, "y":1},
|
||||||
|
{"label":"/", "x":13.5, "y":1},
|
||||||
|
{"label":"*", "x":14.5, "y":1},
|
||||||
|
{"label":"Backspace", "x":15.5, "y":1},
|
||||||
|
{"label":"F1", "x":16.5, "y":0},
|
||||||
|
{"label":"F2", "x":17.5, "y":0},
|
||||||
|
{"label":"F3", "x":18.5, "y":0},
|
||||||
|
{"label":"F4", "x":19.5, "y":0},
|
||||||
|
|
||||||
|
{"label":"F5", "x":3.25, "y":1},
|
||||||
|
{"label":"F6", "x":4.25, "y":1},
|
||||||
|
{"label":"F7", "x":5.25, "y":1},
|
||||||
|
{"label":"F8", "x":6.25, "y":1},
|
||||||
|
{"label":"-", "x":7.5, "y":2},
|
||||||
|
{"label":"7", "x":8.5, "y":2},
|
||||||
|
{"label":"8", "x":9.5, "y":2},
|
||||||
|
{"label":"9", "x":10.5, "y":2},
|
||||||
|
{"label":"7", "x":12.5, "y":2},
|
||||||
|
{"label":"8", "x":13.5, "y":2},
|
||||||
|
{"label":"9", "x":14.5, "y":2},
|
||||||
|
{"label":"-", "x":15.5, "y":2},
|
||||||
|
{"label":"F5", "x":16.75, "y":1},
|
||||||
|
{"label":"F6", "x":17.75, "y":1},
|
||||||
|
{"label":"F7", "x":18.75, "y":1},
|
||||||
|
{"label":"F8", "x":19.75, "y":1},
|
||||||
|
|
||||||
|
{"label":"GUI", "x":1.5, "y":2},
|
||||||
|
{"label":"F9", "x":3, "y":2},
|
||||||
|
{"label":"F10", "x":4, "y":2},
|
||||||
|
{"label":"F11", "x":5, "y":2},
|
||||||
|
{"label":"F12", "x":6, "y":2},
|
||||||
|
{"label":"+", "x":7.5, "y":3},
|
||||||
|
{"label":"4", "x":8.5, "y":3},
|
||||||
|
{"label":"5", "x":9.5, "y":3},
|
||||||
|
{"label":"6", "x":10.5, "y":3},
|
||||||
|
{"label":"4", "x":12.5, "y":3},
|
||||||
|
{"label":"5", "x":13.5, "y":3},
|
||||||
|
{"label":"6", "x":14.5, "y":3},
|
||||||
|
{"label":"+", "x":15.5, "y":3},
|
||||||
|
{"label":"F9", "x":17, "y":2},
|
||||||
|
{"label":"F10", "x":18, "y":2},
|
||||||
|
{"label":"F11", "x":19, "y":2},
|
||||||
|
{"label":"F12", "x":20, "y":2},
|
||||||
|
{"label":"GUI", "x":21.5, "y":2},
|
||||||
|
|
||||||
|
{"label":"1", "x":1.5, "y":3},
|
||||||
|
{"label":"2", "x":2.5, "y":3},
|
||||||
|
{"label":"3", "x":3.5, "y":3},
|
||||||
|
{"label":"4", "x":4.5, "y":3},
|
||||||
|
{"label":"5", "x":5.5, "y":3},
|
||||||
|
{"label":"Esc", "x":7.5, "y":4},
|
||||||
|
{"label":"1", "x":8.5, "y":4},
|
||||||
|
{"label":"2", "x":9.5, "y":4},
|
||||||
|
{"label":"3", "x":10.5, "y":4},
|
||||||
|
{"label":"1", "x":12.5, "y":4},
|
||||||
|
{"label":"2", "x":13.5, "y":4},
|
||||||
|
{"label":"3", "x":14.5, "y":4},
|
||||||
|
{"label":"Tab", "x":15.5, "y":4},
|
||||||
|
{"label":"6", "x":17.5, "y":3},
|
||||||
|
{"label":"7", "x":18.5, "y":3},
|
||||||
|
{"label":"8", "x":19.5, "y":3},
|
||||||
|
{"label":"9", "x":20.5, "y":3},
|
||||||
|
{"label":"0", "x":21.5, "y":3},
|
||||||
|
|
||||||
|
{"label":"Q", "x":1.75, "y":4},
|
||||||
|
{"label":"W", "x":2.75, "y":4},
|
||||||
|
{"label":"E", "x":3.75, "y":4},
|
||||||
|
{"label":"R", "x":4.75, "y":4},
|
||||||
|
{"label":"T", "x":5.75, "y":4},
|
||||||
|
{"label":"Backspace", "x":7.5, "y":5},
|
||||||
|
{"label":"Y", "x":8.5, "y":5},
|
||||||
|
{"label":"Insert", "x":9.5, "y":5},
|
||||||
|
{"label":".", "x":10.5, "y":5},
|
||||||
|
{"label":"0", "x":12.5, "y":5},
|
||||||
|
{"label":".", "x":13.5, "y":5},
|
||||||
|
{"label":"Page Up", "x":14.5, "y":5},
|
||||||
|
{"label":"Home", "x":15.5, "y":5},
|
||||||
|
{"label":"Y", "x":17.25, "y":4},
|
||||||
|
{"label":"U", "x":18.25, "y":4},
|
||||||
|
{"label":"I", "x":19.25, "y":4},
|
||||||
|
{"label":"O", "x":20.25, "y":4},
|
||||||
|
{"label":"P", "x":21.25, "y":4},
|
||||||
|
|
||||||
|
{"label":"A", "x":2, "y":5},
|
||||||
|
{"label":"S", "x":3, "y":5},
|
||||||
|
{"label":"D", "x":4, "y":5},
|
||||||
|
{"label":"F", "x":5, "y":5},
|
||||||
|
{"label":"G", "x":6, "y":5},
|
||||||
|
{"label":"Delete", "x":7.5, "y":6},
|
||||||
|
{"label":"N", "x":8.5, "y":6},
|
||||||
|
{"label":"Up", "x":9.5, "y":6},
|
||||||
|
{"label":"PEnter", "x":10.5, "y":6},
|
||||||
|
{"label":"PEnter", "x":12.5, "y":6},
|
||||||
|
{"label":"Up", "x":13.5, "y":6},
|
||||||
|
{"label":"Page Down", "x":14.5, "y":6},
|
||||||
|
{"label":"End", "x":15.5, "y":6},
|
||||||
|
{"label":"H", "x":17, "y":5},
|
||||||
|
{"label":"J", "x":18, "y":5},
|
||||||
|
{"label":"K", "x":19, "y":5},
|
||||||
|
{"label":"L", "x":20, "y":5},
|
||||||
|
{"label":"-", "x":21, "y":5},
|
||||||
|
|
||||||
|
{"label":"Z", "x":2.25, "y":6},
|
||||||
|
{"label":"X", "x":3.25, "y":6},
|
||||||
|
{"label":"C", "x":4.25, "y":6},
|
||||||
|
{"label":"V", "x":5.25, "y":6},
|
||||||
|
{"label":"B", "x":6.25, "y":6},
|
||||||
|
{"label":"Shift", "x":7.25, "y":7, "w":1.25},
|
||||||
|
{"label":"Left", "x":8.5, "y":7},
|
||||||
|
{"label":"Down", "x":9.5, "y":7},
|
||||||
|
{"label":"Right", "x":10.5, "y":7},
|
||||||
|
{"label":"Left", "x":12.5, "y":7},
|
||||||
|
{"label":"Down", "x":13.5, "y":7},
|
||||||
|
{"label":"Right", "x":14.5, "y":7},
|
||||||
|
{"label":"Shift", "x":15.5, "y":7, "w":1.25},
|
||||||
|
{"label":"N", "x":16.75, "y":6},
|
||||||
|
{"label":"M", "x":17.75, "y":6},
|
||||||
|
{"label":",", "x":18.75, "y":6},
|
||||||
|
{"label":".", "x":19.75, "y":6},
|
||||||
|
{"label":"/", "x":20.75, "y":6},
|
||||||
|
|
||||||
|
{"label":"`", "x":0.25, "y":3},
|
||||||
|
{"label":"Tab", "x":0.25, "y":4, "w":1.5},
|
||||||
|
{"label":"Shift", "x":0.5, "y":5, "w":1.5},
|
||||||
|
{"label":"Ctrl", "x":1, "y":6},
|
||||||
|
{"label":"TT(3)", "x":0, "y":6},
|
||||||
|
{"label":"Space", "x":4.625, "y":7, "w":1.25},
|
||||||
|
{"label":"MO(1)", "x":5.875, "y":7},
|
||||||
|
{"label":"Ctrl", "x":9.25, "y":8, "w":1.25},
|
||||||
|
{"label":"Alt", "x":10.5, "y":8},
|
||||||
|
{"label":"Alt", "x":12.5, "y":8},
|
||||||
|
{"label":"Ctrl", "x":13.5, "y":8, "w":1.25},
|
||||||
|
{"label":"MO(2)", "x":17.125, "y":7},
|
||||||
|
{"label":"Enter", "x":18.125, "y":7, "w":1.25},
|
||||||
|
{"label":"Esc", "x":23, "y":6},
|
||||||
|
{"label":"Menu", "x":22, "y":6},
|
||||||
|
{"label":"\"", "x":22, "y":5, "w":1.5},
|
||||||
|
{"label":"=", "x":22.25, "y":4, "w":1.5},
|
||||||
|
{"label":"Backspace", "x":22.5, "y":3, "w":1.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Maarten Dekkers <[email protected]>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x7353
|
||||||
|
#define PRODUCT_ID 0x0160
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Maartenwut
|
||||||
|
#define PRODUCT Lex60
|
||||||
|
#define DESCRIPTION A 60% PCB
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
// ROWS: Top to bottom, COLS: Left to right
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS {D5,D4,B0,D2,D3}
|
||||||
|
#define MATRIX_COL_PINS {B7,F7,C7,E6,C6,F0,B6,F1,B5,F4,B4,F5,D7,F6,D6}
|
||||||
|
|
||||||
|
/* COL2ROW or ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* define if matrix has ghost */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
#define QMK_ESC_OUTPUT B7 // usually COL
|
||||||
|
#define QMK_ESC_INPUT D5 // usually ROW
|
||||||
|
|
||||||
|
#define RGB_DI_PIN D1
|
||||||
|
#define RGBLED_NUM 12
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
|
// entirely and just use numbers.
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_GAMING,
|
||||||
|
_FUNCTION,
|
||||||
|
_FIRMWARE
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,\
|
||||||
|
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, \
|
||||||
|
MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_ENT), KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
|
||||||
|
|
||||||
|
[_GAMING] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,\
|
||||||
|
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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, XXXXXXX, KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
|
||||||
|
|
||||||
|
[_FUNCTION] = 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_BSLS, KC_DEL,\
|
||||||
|
KC_TAB, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, 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, KC_SPC, LT(2, KC_ENT), KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
|
||||||
|
|
||||||
|
[_FIRMWARE] = LAYOUT(
|
||||||
|
RESET, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_DEC, BL_TOGG, BL_INC, XXXXXXX, XXXXXXX, TG(1),\
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#include "lex60.h"
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// readability
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
|
||||||
|
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, k46, k4a, k4b, k4c, k4d \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
|
||||||
|
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, XXX}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX}, \
|
||||||
|
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, XXX}, \
|
||||||
|
{k40, k41, k42, XXX, XXX, k45, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, XXX} \
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Gami Studio Lex60
|
||||||
|
|
||||||
|
A 60% with split space bars made by Gami Studio.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Gami Studio](https://github.com/GamiStudio)
|
||||||
|
* Hardware Supported: Lex60 powered by the ATmega32U4
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make gami_studio/lex60:default # postfix with `:flash` to load the firmware into the board
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
# Teensy halfkay
|
||||||
|
# Pro Micro caterina
|
||||||
|
# Atmel DFU atmel-dfu
|
||||||
|
# LUFA DFU lufa-dfu
|
||||||
|
# QMK DFU qmk-dfu
|
||||||
|
# ATmega32A bootloadHID
|
||||||
|
# ATmega328P USBasp
|
||||||
|
BOOTLOADER = qmk-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = no # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||||
|
MIDI_ENABLE = no # MIDI support
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||||
@@ -22,20 +22,20 @@ enum custom_keycodes {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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_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_BSPC, KC_DEL, \
|
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_BSPC, KC_DEL, \
|
||||||
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_INS, \
|
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_INS, \
|
||||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
|
||||||
KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
),
|
),
|
||||||
[1] = LAYOUT( \
|
[1] = LAYOUT( \
|
||||||
KC_TRNS, 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_TRNS, KC_TRNS, KC_MUTE, \
|
KC_TRNS, 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_TRNS, KC_TRNS, KC_MUTE, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|||||||
@@ -27,10 +27,10 @@
|
|||||||
*/
|
*/
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
|
||||||
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
|
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
|
||||||
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
|
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
|
||||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
|
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
|
||||||
k40, k41, k43, k45, k47, k48, k4A, k4B, k4D, k4E, k4F \
|
k40, k41, k43, k45, k47, k48, k4A, k4B, k4D, k4E, k4F \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
|
||||||
@@ -41,14 +41,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define LAYOUT_65_ansi_blocker( \
|
#define LAYOUT_65_ansi_blocker( \
|
||||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, \
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0F, \
|
||||||
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
|
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
|
||||||
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
|
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
|
||||||
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
|
||||||
k40, k41, k43, k47, k4A, k4B, k4D, k4E, k4F \
|
k40, k41, k43, k47, k4A, k4B, k4D, k4E, k4F \
|
||||||
) \
|
) \
|
||||||
{ \
|
{ \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, k0E, k0F }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, KC_NO, k0F }, \
|
||||||
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
|
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
|
||||||
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F }, \
|
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F }, \
|
||||||
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, k3E, k3F }, \
|
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, k3E, k3F }, \
|
||||||
|
|||||||
Loaded 100 of 174 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user