Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
adb72b60b0 | ||
|
|
bc2157eea8 | ||
|
|
f3bf301825 | ||
|
|
85f4c3ebb4 | ||
|
|
853b99954e | ||
|
|
74dc65ab2e | ||
|
|
3eb82e0470 | ||
|
|
ad7ba08ac8 | ||
|
|
876e544433 | ||
|
|
b54722cc63 | ||
|
|
94e2a39d72 | ||
|
|
f6b9604f4a | ||
|
|
0374677814 | ||
|
|
3d54b1adf0 | ||
|
|
d4c23d881f | ||
|
|
1f26101f0e | ||
|
|
80c2e26741 | ||
|
|
707d449ba0 | ||
|
|
ba13127c04 | ||
|
|
20d3a979f1 | ||
|
|
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 | ||
|
|
25d1901d7a |
No files matched your search
+8
-7
@@ -231,15 +231,16 @@ endif
|
|||||||
|
|
||||||
# backward compat
|
# backward compat
|
||||||
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
|
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
|
||||||
BACKLIGHT_ENABLE = custom
|
BACKLIGHT_DRIVER = custom
|
||||||
endif
|
endif
|
||||||
|
|
||||||
VALID_BACKLIGHT_TYPES := yes software custom
|
VALID_BACKLIGHT_TYPES := pwm software custom
|
||||||
|
|
||||||
BACKLIGHT_ENABLE ?= no
|
BACKLIGHT_ENABLE ?= no
|
||||||
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
BACKLIGHT_DRIVER ?= pwm
|
||||||
ifeq ($(filter $(BACKLIGHT_ENABLE),$(VALID_BACKLIGHT_TYPES)),)
|
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
||||||
$(error BACKLIGHT_ENABLE="$(BACKLIGHT_ENABLE)" is not a valid backlight type)
|
ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
|
||||||
|
$(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||||
@@ -250,10 +251,10 @@ ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
|||||||
SRC += $(QUANTUM_DIR)/backlight/backlight.c
|
SRC += $(QUANTUM_DIR)/backlight/backlight.c
|
||||||
OPT_DEFS += -DBACKLIGHT_ENABLE
|
OPT_DEFS += -DBACKLIGHT_ENABLE
|
||||||
|
|
||||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), software)
|
ifeq ($(strip $(BACKLIGHT_DRIVER)), software)
|
||||||
SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
|
SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
|
||||||
else
|
else
|
||||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
|
ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
|
||||||
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
|
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -6,16 +6,14 @@ QMK is able to control the brightness of these LEDs by switching them on and off
|
|||||||
|
|
||||||
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
|
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
|
||||||
|
|
||||||
## Driver configuration
|
## Feature Configuration
|
||||||
|
|
||||||
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
|
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
|
||||||
|
|
||||||
```makefile
|
```makefile
|
||||||
BACKLIGHT_ENABLE = software # Valid driver values are 'yes,software,no'
|
BACKLIGHT_ENABLE = yes
|
||||||
```
|
```
|
||||||
|
|
||||||
See below for help on individual drivers.
|
|
||||||
|
|
||||||
## Keycodes
|
## Keycodes
|
||||||
Once enabled the following keycodes below can be used to change the backlight level.
|
Once enabled the following keycodes below can be used to change the backlight level.
|
||||||
|
|
||||||
@@ -51,6 +49,16 @@ Once enabled the following keycodes below can be used to change the backlight le
|
|||||||
|`breathing_enable()` |Turns on backlight breathing |
|
|`breathing_enable()` |Turns on backlight breathing |
|
||||||
|`breathing_disable()` |Turns off backlight breathing |
|
|`breathing_disable()` |Turns off backlight breathing |
|
||||||
|
|
||||||
|
## Driver Configuration
|
||||||
|
|
||||||
|
To select which driver to use, configure your `rules.mk` with the following:
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
BACKLIGHT_DRIVER = software # Valid driver values are 'pwm,software,no'
|
||||||
|
```
|
||||||
|
|
||||||
|
See below for help on individual drivers.
|
||||||
|
|
||||||
## Common Driver Configuration
|
## Common Driver Configuration
|
||||||
|
|
||||||
To change the behavior of the backlighting, `#define` these in your `config.h`:
|
To change the behavior of the backlighting, `#define` these in your `config.h`:
|
||||||
@@ -72,9 +80,9 @@ This functionality is configured at the keyboard level with the `BACKLIGHT_ON_ST
|
|||||||
|
|
||||||
## AVR driver
|
## AVR driver
|
||||||
|
|
||||||
On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. To enable it, add this to your rules.mk:
|
On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. The driver is configured by default, however the equivalent setting within rules.mk would be:
|
||||||
```makefile
|
```makefile
|
||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_DRIVER = pwm
|
||||||
```
|
```
|
||||||
|
|
||||||
### Caveats
|
### Caveats
|
||||||
@@ -150,9 +158,9 @@ The breathing effect is the same as in the hardware PWM implementation.
|
|||||||
|
|
||||||
## ARM Driver
|
## ARM Driver
|
||||||
|
|
||||||
While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. To enable it, add this to your rules.mk:
|
While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. The driver is configured by default, however the equivalent setting within rules.mk would be:
|
||||||
```makefile
|
```makefile
|
||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_DRIVER = pwm
|
||||||
```
|
```
|
||||||
|
|
||||||
### Caveats
|
### Caveats
|
||||||
@@ -176,7 +184,7 @@ To change the behavior of the backlighting, `#define` these in your `config.h`:
|
|||||||
|
|
||||||
Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
|
Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
|
||||||
```makefile
|
```makefile
|
||||||
BACKLIGHT_ENABLE = software
|
BACKLIGHT_DRIVER = software
|
||||||
```
|
```
|
||||||
|
|
||||||
### Software PWM Configuration
|
### Software PWM Configuration
|
||||||
@@ -200,3 +208,29 @@ To activate multiple backlight pins, you need to add something like this to your
|
|||||||
#undef BACKLIGHT_PIN
|
#undef BACKLIGHT_PIN
|
||||||
#define BACKLIGHT_PINS { F5, B2 }
|
#define BACKLIGHT_PINS { F5, B2 }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Custom Driver
|
||||||
|
|
||||||
|
To enable, add this to your rules.mk:
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
BACKLIGHT_DRIVER = custom
|
||||||
|
```
|
||||||
|
|
||||||
|
When implementing the custom driver API, the provided keyboard hooks are as follows:
|
||||||
|
|
||||||
|
```c
|
||||||
|
void backlight_init_ports(void) {
|
||||||
|
// Optional - Run on startup
|
||||||
|
// - usually you want to configure pins here
|
||||||
|
}
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
// Optional - Run on level change
|
||||||
|
// - usually you want to respond to the new value
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_task(void) {
|
||||||
|
// Optional - Run periodically
|
||||||
|
// - long running actions here can cause performance issues
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
|
|||||||
* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
|
* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
|
||||||
* [Flashing Firmware](newbs_flashing.md)
|
* [Flashing Firmware](newbs_flashing.md)
|
||||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
* [Testing and Debugging](newbs_testing_debugging.md)
|
||||||
* [Git Best Practices](newbs_best_practices.md)
|
* [Best Git Practices](newbs_git_best_practices.md)
|
||||||
* [Learn More with these Resources](newbs_learn_more_resources.md)
|
* [Learn More with these Resources](newbs_learn_more_resources.md)
|
||||||
|
|
||||||
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
|
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define ENCODER_RESOLUTION 2
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2019 Boy_314
|
||||||
|
|
||||||
|
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 keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_2x2(
|
||||||
|
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_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_NO, ENC_PRESS,
|
||||||
|
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_HOME,
|
||||||
|
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_ENTER, KC_END,
|
||||||
|
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_DEL,
|
||||||
|
KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_2x2(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
NK_TOGG, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, OLED_TOGG,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, RESET, CLOCK_SET,
|
||||||
|
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
|
||||||
|
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Boy_314's Satisfaction75 Layout
|
||||||
|
|
||||||
|
This is Boy_314's Satisfaction75 Layout. It can be used on VIA. It features a QWERTY layout on the base, along with missing TKL keys on layer 1. Right side 3 keys from top down are: Home, End, Delete. The encoder resolution has been reduced from the default of 4 down to 2 so that it no longer needs to click twice, but now only once, before triggering an action.
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# rules.mk overrides to enable VIA
|
||||||
|
|
||||||
|
RAW_ENABLE = yes
|
||||||
|
DYNAMIC_KEYMAP_ENABLE = yes
|
||||||
@@ -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(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
@@ -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).
|
||||||
Loaded 100 of 211 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user