Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7acd39b78 | ||
|
|
70fce6564f | ||
|
|
28ff51175b | ||
|
|
c16ee22784 | ||
|
|
1b7101f065 | ||
|
|
c4cc697aef | ||
|
|
a0305f5e7e | ||
|
|
c2a0cebf8b | ||
|
|
ef1b050b32 | ||
|
|
4bee445c2f | ||
|
|
7921c5d9b8 | ||
|
|
72b1ff5899 | ||
|
|
eee6dd3544 | ||
|
|
510138f525 | ||
|
|
07e37c857c | ||
|
|
a21e487fbc |
No files matched your search
+6
-6
@@ -35,30 +35,30 @@
|
|||||||
ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
|
ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
|
||||||
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
|
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
|
||||||
OPT_DEFS += -DBOOTLOADER_DFU
|
OPT_DEFS += -DBOOTLOADER_DFU
|
||||||
ifneq (,$(filter $(MCU), at90usb646 atmega16u2 atmega16u4 atmega32u2 atmega32u4))
|
ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
|
||||||
BOOTLOADER_SIZE = 4096
|
BOOTLOADER_SIZE = 4096
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(MCU)), at90usb1286)
|
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
|
||||||
BOOTLOADER_SIZE = 8192
|
BOOTLOADER_SIZE = 8192
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
|
ifeq ($(strip $(BOOTLOADER)), lufa-dfu)
|
||||||
OPT_DEFS += -DBOOTLOADER_LUFA_DFU
|
OPT_DEFS += -DBOOTLOADER_LUFA_DFU
|
||||||
OPT_DEFS += -DBOOTLOADER_DFU
|
OPT_DEFS += -DBOOTLOADER_DFU
|
||||||
ifneq (,$(filter $(MCU), at90usb646 atmega16u2 atmega16u4 atmega32u2 atmega32u4))
|
ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
|
||||||
BOOTLOADER_SIZE = 4096
|
BOOTLOADER_SIZE = 4096
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(MCU)), at90usb1286)
|
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
|
||||||
BOOTLOADER_SIZE = 8192
|
BOOTLOADER_SIZE = 8192
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
|
ifeq ($(strip $(BOOTLOADER)), qmk-dfu)
|
||||||
OPT_DEFS += -DBOOTLOADER_QMK_DFU
|
OPT_DEFS += -DBOOTLOADER_QMK_DFU
|
||||||
OPT_DEFS += -DBOOTLOADER_DFU
|
OPT_DEFS += -DBOOTLOADER_DFU
|
||||||
ifneq (,$(filter $(MCU), at90usb646 atmega16u2 atmega16u4 atmega32u2 atmega32u4))
|
ifneq (,$(filter $(MCU), atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647))
|
||||||
BOOTLOADER_SIZE = 4096
|
BOOTLOADER_SIZE = 4096
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(MCU)), at90usb1286)
|
ifneq (,$(filter $(MCU), at90usb1286 at90usb1287))
|
||||||
BOOTLOADER_SIZE = 8192
|
BOOTLOADER_SIZE = 8192
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|||||||
+55
-84
@@ -13,65 +13,76 @@ An example of using `sudo`, when your controller is ATMega32u4:
|
|||||||
|
|
||||||
or just:
|
or just:
|
||||||
|
|
||||||
$ sudo make <keyboard>:<keymap>:dfu
|
$ sudo make <keyboard>:<keymap>:flash
|
||||||
|
|
||||||
Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
|
Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
|
||||||
|
|
||||||
### Linux `udev` Rules
|
### Linux `udev` Rules
|
||||||
On Linux, you'll need proper privileges to access the MCU. You can either use
|
|
||||||
`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`. Once added run the following:
|
On Linux, you'll need proper privileges to communicate with the bootloader device. You can either use `sudo` when flashing firmware, or place this file in `/etc/udev/rules.d/`:
|
||||||
```console
|
|
||||||
|
**/etc/udev/rules.d/50-qmk.rules:**
|
||||||
|
```
|
||||||
|
# Atmel DFU
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega16U2
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega32U2
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega16U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega32U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess" # AT90USB64
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess" # AT90USB128
|
||||||
|
|
||||||
|
# Input Club
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1C11", ATTRS{idProduct}=="B007", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# STM32duino
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1EAF", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
# STM32 DFU
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="DF11", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# BootloadHID
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DF", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# USBAspLoader
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# ModemManager should ignore the following devices
|
||||||
|
# Atmel SAM-BA (Massdrop)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="6124", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
|
||||||
|
# Caterina (Pro Micro)
|
||||||
|
# Spark Fun Electronics
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pro Micro 3V3/8MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pro Micro 5V/16MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9207", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # LilyPad 3V3/8MHz (and some Pro Micro clones)
|
||||||
|
# Pololu Electronics
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB", ATTRS{idProduct}=="0101", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # A-Star 32U4
|
||||||
|
# Arduino SA
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Leonardo
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Micro
|
||||||
|
# Adafruit Industries LLC
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000C", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Feather 32U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000D", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # ItsyBitsy 32U4 3V3/8MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000E", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # ItsyBitsy 32U4 5V/16MHz
|
||||||
|
# dog hunter AG
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Leonardo
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Micro
|
||||||
|
```
|
||||||
|
|
||||||
|
Once added, run the following:
|
||||||
|
|
||||||
|
```
|
||||||
sudo udevadm control --reload-rules
|
sudo udevadm control --reload-rules
|
||||||
sudo udevadm trigger
|
sudo udevadm trigger
|
||||||
```
|
```
|
||||||
|
|
||||||
**/etc/udev/rules.d/50-atmel-dfu.rules:**
|
**Note:** With older versions of ModemManager (< 1.12), filtering only works when not in strict mode. The following commands can update that setting:
|
||||||
```
|
|
||||||
# Atmel ATMega32U4
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
# Atmel USBKEY AT90USB1287
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
# Atmel ATMega32U2
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
```
|
|
||||||
|
|
||||||
**/etc/udev/rules.d/54-input-club-keyboard.rules:**
|
|
||||||
|
|
||||||
```
|
```
|
||||||
# Input Club keyboard bootloader
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
```
|
|
||||||
|
|
||||||
**/etc/udev/rules.d/55-caterina.rules:**
|
|
||||||
```
|
|
||||||
# ModemManager should ignore the following devices
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note:** With older (before 1.12) ModemManager, filtering only works when not in strict mode, the following commands can update that settings:
|
|
||||||
```console
|
|
||||||
printf '[Service]\nExecStart=\nExecStart=/usr/sbin/ModemManager --filter-policy=default' | sudo tee /etc/systemd/system/ModemManager.service.d/policy.conf
|
printf '[Service]\nExecStart=\nExecStart=/usr/sbin/ModemManager --filter-policy=default' | sudo tee /etc/systemd/system/ModemManager.service.d/policy.conf
|
||||||
sudo systemctl daemon-reload
|
sudo systemctl daemon-reload
|
||||||
sudo systemctl restart ModemManager
|
sudo systemctl restart ModemManager
|
||||||
```
|
```
|
||||||
|
|
||||||
**/etc/udev/rules.d/56-dfu-util.rules:**
|
|
||||||
```
|
|
||||||
# stm32duino
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
# Generic stm32
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
```
|
|
||||||
|
|
||||||
**/etc/udev/rules.d/57-bootloadhid.rules:**
|
|
||||||
```
|
|
||||||
# bootloadHID
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Serial device is not detected in bootloader mode on Linux
|
### Serial device is not detected in bootloader mode on Linux
|
||||||
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
|
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
|
||||||
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
|
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
|
||||||
@@ -96,46 +107,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
|
||||||
|
|
||||||
## BOOTLOADER_SIZE for AVR
|
|
||||||
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
|
|
||||||
|
|
||||||
```
|
|
||||||
# Boot Section Size in *bytes*
|
|
||||||
# Teensy halfKay 512
|
|
||||||
# Teensy++ halfKay 2048
|
|
||||||
# Atmel DFU loader 4096 (TMK Alt Controller)
|
|
||||||
# LUFA bootloader 4096
|
|
||||||
# USBaspLoader 2048
|
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=2048
|
|
||||||
```
|
|
||||||
|
|
||||||
## `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` on MacOS
|
|
||||||
|
|
||||||
This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
|
|
||||||
|
|
||||||
The solution is to remove and reinstall all affected modules.
|
|
||||||
|
|
||||||
```
|
|
||||||
brew rm avr-gcc avr-gcc@8 dfu-programmer dfu-util gcc-arm-none-eabi arm-gcc-bin@8 avrdude qmk
|
|
||||||
brew install qmk/qmk/qmk
|
|
||||||
brew link --force avr-gcc@8
|
|
||||||
brew link --force arm-gcc-bin@8
|
|
||||||
```
|
|
||||||
|
|
||||||
### `avr-gcc` and LUFA
|
|
||||||
|
|
||||||
If you updated your `avr-gcc` and you see errors involving LUFA, for example:
|
|
||||||
|
|
||||||
`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
|
|
||||||
|
|
||||||
For now, you need to rollback `avr-gcc` to 8 in Homebrew.
|
|
||||||
|
|
||||||
```
|
|
||||||
brew uninstall --force avr-gcc
|
|
||||||
brew install avr-gcc@8
|
|
||||||
brew link --force avr-gcc@8
|
|
||||||
```
|
|
||||||
|
|
||||||
### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
|
### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
|
||||||
Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
|
Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
|
||||||
|
|
||||||
|
|||||||
@@ -31,20 +31,6 @@ Check:
|
|||||||
- try using 'print' function instead of debug print. See **common/print.h**.
|
- try using 'print' function instead of debug print. See **common/print.h**.
|
||||||
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
|
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
|
||||||
|
|
||||||
## Linux or UNIX Like System Requires Super User Privilege
|
|
||||||
Just use 'sudo' to execute *hid_listen* with privilege.
|
|
||||||
```
|
|
||||||
$ sudo hid_listen
|
|
||||||
```
|
|
||||||
|
|
||||||
Or add an *udev rule* for TMK devices with placing a file in rules directory. The directory may vary on each system.
|
|
||||||
|
|
||||||
File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu)
|
|
||||||
```
|
|
||||||
# tmk keyboard products https://github.com/tmk/tmk_keyboard
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
|
|
||||||
```
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
# Miscellaneous
|
# Miscellaneous
|
||||||
|
|||||||
+21
-21
@@ -1,22 +1,22 @@
|
|||||||
# Tap-Hold Configuration Options
|
# Tap-Hold Configuration Options
|
||||||
|
|
||||||
While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonable defaults, but that may still cause issues for some people.
|
While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonable defaults, but that may still cause issues for some people.
|
||||||
|
|
||||||
These options let you modify the behavior of the Tap-Hold keys.
|
These options let you modify the behavior of the Tap-Hold keys.
|
||||||
|
|
||||||
## Tapping Term
|
## Tapping Term
|
||||||
|
|
||||||
The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. And the exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
|
The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. And the exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
|
||||||
|
|
||||||
You can set the global time for this by adding the following setting to your `config.h`:
|
You can set the global time for this by adding the following setting to your `config.h`:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define TAPPING_TERM 200
|
#define TAPPING_TERM 200
|
||||||
```
|
```
|
||||||
|
|
||||||
This setting is defined in milliseconds, and does default to 200ms. This is a good average for a majority of people.
|
This setting is defined in milliseconds, and does default to 200ms. This is a good average for a majority of people.
|
||||||
|
|
||||||
For more granular control of this feature, you can add the following to your `config.h`:
|
For more granular control of this feature, you can add the following to your `config.h`:
|
||||||
```c
|
```c
|
||||||
#define TAPPING_TERM_PER_KEY
|
#define TAPPING_TERM_PER_KEY
|
||||||
```
|
```
|
||||||
@@ -45,9 +45,9 @@ As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new
|
|||||||
#define PERMISSIVE_HOLD
|
#define PERMISSIVE_HOLD
|
||||||
```
|
```
|
||||||
|
|
||||||
This makes tap and hold keys (like Mod Tap) work better for fast typists, or for high `TAPPING_TERM` settings.
|
This makes tap and hold keys (like Mod Tap) work better for fast typists, or for high `TAPPING_TERM` settings.
|
||||||
|
|
||||||
If you press a Mod Tap key, tap another key (press and release) and then release the Mod Tap key, all within the tapping term, it will output the "tapping" function for both keys.
|
If you press a Mod Tap key, tap another key (press and release) and then release the Mod Tap key, all within the tapping term, it will output the tapping function for both keys.
|
||||||
|
|
||||||
For Instance:
|
For Instance:
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ For Instance:
|
|||||||
- `KC_X` Up
|
- `KC_X` Up
|
||||||
- `SFT_T(KC_A)` Up
|
- `SFT_T(KC_A)` Up
|
||||||
|
|
||||||
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`).
|
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`).
|
||||||
|
|
||||||
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ To enable this setting, add this to your `config.h`:
|
|||||||
#define IGNORE_MOD_TAP_INTERRUPT
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
```
|
```
|
||||||
|
|
||||||
Similar to Permissive Hold, this alters how the firmware processes inputs for fast typists. If you press a Mod Tap key, press another key, release the Mod Tap key, and then release the normal key, it would normally output the "tapping" function for both keys. This may not be desirable for rolling combo keys.
|
Similar to Permissive Hold, this alters how the firmware processes inputs for fast typists. If you press a Mod Tap key, press another key, release the Mod Tap key, and then release the normal key, it would normally output the tapping function for both keys. This may not be desirable for rolling combo keys.
|
||||||
|
|
||||||
Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_TERM` to trigger the hold function (the mod).
|
Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_TERM` to trigger the hold function (the mod).
|
||||||
|
|
||||||
@@ -126,27 +126,27 @@ bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
|
|||||||
|
|
||||||
## Tapping Force Hold
|
## Tapping Force Hold
|
||||||
|
|
||||||
To enable `tapping force hold`, add the following to your `config.h`:
|
To enable `tapping force hold`, add the following to your `config.h`:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define TAPPING_FORCE_HOLD
|
#define TAPPING_FORCE_HOLD
|
||||||
```
|
```
|
||||||
|
|
||||||
When the user holds a key after tap, this repeats the tapped key rather to hold a modifier key. This allows to use auto repeat for the tapped key.
|
When the user holds a key after tapping it, the tapping function is repeated by default, rather than activating the hold function. This allows keeping the ability to auto-repeat the tapping function of a dual-role key. `TAPPING_FORCE_HOLD` removes that ability to let the user activate the hold function instead, in the case of holding the dual-role key after having tapped it.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
- SFT_T(KC_A) Down
|
- `SFT_T(KC_A)` Down
|
||||||
- SFT_T(KC_A) Up
|
- `SFT_T(KC_A)` Up
|
||||||
- SFT_T(KC_A) Down
|
- `SFT_T(KC_A)` Down
|
||||||
- wait more than tapping term...
|
- wait until the tapping term expires...
|
||||||
- SFT_T(KC_A) Up
|
- `SFT_T(KC_A)` Up
|
||||||
|
|
||||||
With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function.
|
With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function.
|
||||||
|
|
||||||
With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allowing to use it as a modifier shortly after having used it as a tap.
|
With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allowing to use it as a modifier shortly after having used it as a tap.
|
||||||
|
|
||||||
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
|
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tap Toggle).
|
||||||
|
|
||||||
For more granular control of this feature, you can add the following to your `config.h`:
|
For more granular control of this feature, you can add the following to your `config.h`:
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
|
|||||||
|
|
||||||
## Retro Tapping
|
## Retro Tapping
|
||||||
|
|
||||||
To enable `retro tapping`, add the following to your `config.h`:
|
To enable `retro tapping`, add the following to your `config.h`:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define RETRO_TAPPING
|
#define RETRO_TAPPING
|
||||||
@@ -179,11 +179,11 @@ Holding and releasing a dual function key without pressing another key will resu
|
|||||||
|
|
||||||
For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
|
For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
|
||||||
|
|
||||||
## Why do we include the key record for the per key functions?
|
## Why do we include the key record for the per key functions?
|
||||||
|
|
||||||
One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that.
|
One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that.
|
||||||
|
|
||||||
Well, it's simply really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine tune those to not interfere with your normal typing.
|
Well, it's simple really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine tune those to not interfere with your normal typing.
|
||||||
|
|
||||||
## Why is there no `*_kb` or `*_user` functions?!
|
## Why is there no `*_kb` or `*_user` functions?!
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Team Mechlovin
|
||||||
|
|
||||||
|
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 0x4D4C
|
||||||
|
#define MANUFACTURER Team Mechlovin
|
||||||
|
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 { A4, A5, A3, A2, A1 }
|
||||||
|
#define MATRIX_COL_PINS { B11, B10, B2, B1, B0, A7, A6, A0, C15, B4, B5, B3, C13, C14, A13 }
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B8
|
||||||
|
#define BACKLIGHT_BREATHING
|
||||||
|
#define BACKLIGHT_PWM_DRIVER PWMD3
|
||||||
|
#define BACKLIGHT_PWM_CHANNEL 3
|
||||||
|
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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 "hannah65.h"
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
matrix_init_user();
|
||||||
|
led_init_ports();
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_init_ports(void) {
|
||||||
|
setPinOutput(B9);
|
||||||
|
writePinLow(B9);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool led_update_kb(led_t led_state) {
|
||||||
|
if(led_update_user(led_state)) {
|
||||||
|
writePin(B9, led_state.caps_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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"
|
||||||
|
|
||||||
|
#if defined(KEYBOARD_mechlovin_hannah65_rev1)
|
||||||
|
# include "rev1.h"
|
||||||
|
#elif defined(KEYBOARD_mechlovin_hannah65_mechlovin9)
|
||||||
|
# include "mechlovin9.h"
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define PRODUCT_ID 0x6501
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define PRODUCTION Mechlovin9
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "mechlovin9",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "Team Mechlovin",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (B0,B5)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (B0,B6)", "x":1, "y":0},
|
||||||
|
{"label":"K02 (B0,B7)", "x":2, "y":0},
|
||||||
|
{"label":"K03 (B0,C0)", "x":3, "y":0},
|
||||||
|
{"label":"K04 (B0,C1)", "x":4, "y":0},
|
||||||
|
{"label":"K05 (B0,C2)", "x":5, "y":0},
|
||||||
|
{"label":"K06 (B0,C3)", "x":6, "y":0},
|
||||||
|
{"label":"K07 (B0,C4)", "x":7, "y":0},
|
||||||
|
{"label":"K08 (B0,C5)", "x":8, "y":0},
|
||||||
|
{"label":"K09 (B0,C6)", "x":9, "y":0},
|
||||||
|
{"label":"K0A (B0,C7)", "x":10, "y":0},
|
||||||
|
{"label":"K0B (B0,D0)", "x":11, "y":0},
|
||||||
|
{"label":"K0C (B0,D1)", "x":12, "y":0},
|
||||||
|
{"label":"K0D (B0,D2)", "x":13, "y":0},
|
||||||
|
{"label":"K1D (B1,D2)", "x":14, "y":0},
|
||||||
|
{"label":"K0E (B0,D3)", "x":15, "y":0},
|
||||||
|
{"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"K11 (B1,B6)", "x":1.5, "y":1},
|
||||||
|
{"label":"K12 (B1,B7)", "x":2.5, "y":1},
|
||||||
|
{"label":"K13 (B1,C0)", "x":3.5, "y":1},
|
||||||
|
{"label":"K14 (B1,C1)", "x":4.5, "y":1},
|
||||||
|
{"label":"K15 (B1,C2)", "x":5.5, "y":1},
|
||||||
|
{"label":"K16 (B1,C3)", "x":6.5, "y":1},
|
||||||
|
{"label":"K17 (B1,C4)", "x":7.5, "y":1},
|
||||||
|
{"label":"K18 (B1,C5)", "x":8.5, "y":1},
|
||||||
|
{"label":"K19 (B1,C6)", "x":9.5, "y":1},
|
||||||
|
{"label":"K1A (B1,C7)", "x":10.5, "y":1},
|
||||||
|
{"label":"K1B (B1,D0)", "x":11.5, "y":1},
|
||||||
|
{"label":"K1C (B1,D1)", "x":12.5, "y":1},
|
||||||
|
{"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
|
||||||
|
{"label":"K1E (B1,D3)", "x":15, "y":1},
|
||||||
|
{"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"K21 (B2,B6)", "x":1.75, "y":2},
|
||||||
|
{"label":"K22 (B2,B7)", "x":2.75, "y":2},
|
||||||
|
{"label":"K23 (B2,C0)", "x":3.75, "y":2},
|
||||||
|
{"label":"K24 (B2,C1)", "x":4.75, "y":2},
|
||||||
|
{"label":"K25 (B2,C2)", "x":5.75, "y":2},
|
||||||
|
{"label":"K26 (B2,C3)", "x":6.75, "y":2},
|
||||||
|
{"label":"K27 (B2,C4)", "x":7.75, "y":2},
|
||||||
|
{"label":"K28 (B2,C5)", "x":8.75, "y":2},
|
||||||
|
{"label":"K29 (B2,C6)", "x":9.75, "y":2},
|
||||||
|
{"label":"K2A (B2,C7)", "x":10.75, "y":2},
|
||||||
|
{"label":"K2B (B2,D0)", "x":11.75, "y":2},
|
||||||
|
{"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
|
||||||
|
{"label":"K2E (B2,D3)", "x":15, "y":2},
|
||||||
|
{"label":"K30 (B3,B5)", "x":0, "y":3, "w":2.25},
|
||||||
|
{"label":"K32 (B3,B7)", "x":2.25, "y":3},
|
||||||
|
{"label":"K33 (B3,C0)", "x":3.25, "y":3},
|
||||||
|
{"label":"K34 (B3,C1)", "x":4.25, "y":3},
|
||||||
|
{"label":"K35 (B3,C2)", "x":5.25, "y":3},
|
||||||
|
{"label":"K36 (B3,C3)", "x":6.25, "y":3},
|
||||||
|
{"label":"K37 (B3,C4)", "x":7.25, "y":3},
|
||||||
|
{"label":"K38 (B3,C5)", "x":8.25, "y":3},
|
||||||
|
{"label":"K39 (B3,C6)", "x":9.25, "y":3},
|
||||||
|
{"label":"K3A (B3,C7)", "x":10.25, "y":3},
|
||||||
|
{"label":"K3B (B3,D0)", "x":11.25, "y":3},
|
||||||
|
{"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
|
||||||
|
{"label":"K3D (B3,D2)", "x":14, "y":3},
|
||||||
|
{"label":"K3E (B3,D3)", "x":15, "y":3},
|
||||||
|
{"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.5},
|
||||||
|
{"label":"K41 (B4,B6)", "x":1.5, "y":4},
|
||||||
|
{"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.5},
|
||||||
|
{"label":"K46 (B4,C3)", "x":4, "y":4, "w":7},
|
||||||
|
{"label":"K4B (B4,D0)", "x":11, "y":4, "w":1.5},
|
||||||
|
{"label":"K4C (B4,D1)", "x":13, "y":4},
|
||||||
|
{"label":"K4D (B4,D2)", "x":14, "y":4},
|
||||||
|
{"label":"K4E (B4,D3)", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_BSLS, KC_PGUP,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for mechlovin9
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_BSLS, KC_PGUP,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[3] = LAYOUT_all(
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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"
|
||||||
|
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, K0E, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
||||||
|
K40, K41, K42, K46, K4B, K4C, K4D, K4E \
|
||||||
|
) { \
|
||||||
|
{ 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, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# mechlovin9
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A 65% PCB, compatible with Kyuu.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Team Mechlovin](https://github.com/mechlovin)
|
||||||
|
* Hardware Supported: Kyuu Keyboard.
|
||||||
|
* Hardware Availability: [Reddit GB](https://www.reddit.com/r/mechmarket/comments/i61par/gb_mechlovin_9_a_kyuu_65_keyboard_compatible_pcb/)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make mechlovin/hannah65/mechlovin9: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.
@@ -0,0 +1,15 @@
|
|||||||
|
# hannah65
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A 65% PCB, compatible with E6.5, Kyuu,...
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Team Mechlovin](https://github.com/mechlovin)
|
||||||
|
* Hardware Supported: Hannah65, STM32F303
|
||||||
|
* Hardware Availability: [Mechlovin Store](https://mechlove.com/)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make mechlovin/hannah65/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,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define PRODUCT_ID 0x6500
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define PRODUCTION Hannah65
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "hannah65-rev1",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "Team Mechlovin",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (B0,B5)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (B0,B6)", "x":1, "y":0},
|
||||||
|
{"label":"K02 (B0,B7)", "x":2, "y":0},
|
||||||
|
{"label":"K03 (B0,C0)", "x":3, "y":0},
|
||||||
|
{"label":"K04 (B0,C1)", "x":4, "y":0},
|
||||||
|
{"label":"K05 (B0,C2)", "x":5, "y":0},
|
||||||
|
{"label":"K06 (B0,C3)", "x":6, "y":0},
|
||||||
|
{"label":"K07 (B0,C4)", "x":7, "y":0},
|
||||||
|
{"label":"K08 (B0,C5)", "x":8, "y":0},
|
||||||
|
{"label":"K09 (B0,C6)", "x":9, "y":0},
|
||||||
|
{"label":"K0A (B0,C7)", "x":10, "y":0},
|
||||||
|
{"label":"K0B (B0,D0)", "x":11, "y":0},
|
||||||
|
{"label":"K0C (B0,D1)", "x":12, "y":0},
|
||||||
|
{"label":"K0D (B0,D2)", "x":13, "y":0},
|
||||||
|
{"label":"K1D (B1,D2)", "x":14, "y":0},
|
||||||
|
{"label":"K0E (B0,D3)", "x":15, "y":0},
|
||||||
|
{"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"K11 (B1,B6)", "x":1.5, "y":1},
|
||||||
|
{"label":"K12 (B1,B7)", "x":2.5, "y":1},
|
||||||
|
{"label":"K13 (B1,C0)", "x":3.5, "y":1},
|
||||||
|
{"label":"K14 (B1,C1)", "x":4.5, "y":1},
|
||||||
|
{"label":"K15 (B1,C2)", "x":5.5, "y":1},
|
||||||
|
{"label":"K16 (B1,C3)", "x":6.5, "y":1},
|
||||||
|
{"label":"K17 (B1,C4)", "x":7.5, "y":1},
|
||||||
|
{"label":"K18 (B1,C5)", "x":8.5, "y":1},
|
||||||
|
{"label":"K19 (B1,C6)", "x":9.5, "y":1},
|
||||||
|
{"label":"K1A (B1,C7)", "x":10.5, "y":1},
|
||||||
|
{"label":"K1B (B1,D0)", "x":11.5, "y":1},
|
||||||
|
{"label":"K1C (B1,D1)", "x":12.5, "y":1},
|
||||||
|
{"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
|
||||||
|
{"label":"K1E (B1,D3)", "x":15, "y":1},
|
||||||
|
{"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"K21 (B2,B6)", "x":1.75, "y":2},
|
||||||
|
{"label":"K22 (B2,B7)", "x":2.75, "y":2},
|
||||||
|
{"label":"K23 (B2,C0)", "x":3.75, "y":2},
|
||||||
|
{"label":"K24 (B2,C1)", "x":4.75, "y":2},
|
||||||
|
{"label":"K25 (B2,C2)", "x":5.75, "y":2},
|
||||||
|
{"label":"K26 (B2,C3)", "x":6.75, "y":2},
|
||||||
|
{"label":"K27 (B2,C4)", "x":7.75, "y":2},
|
||||||
|
{"label":"K28 (B2,C5)", "x":8.75, "y":2},
|
||||||
|
{"label":"K29 (B2,C6)", "x":9.75, "y":2},
|
||||||
|
{"label":"K2A (B2,C7)", "x":10.75, "y":2},
|
||||||
|
{"label":"K2B (B2,D0)", "x":11.75, "y":2},
|
||||||
|
{"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
|
||||||
|
{"label":"K2E (B2,D3)", "x":15, "y":2},
|
||||||
|
{"label":"K30 (B3,B5)", "x":0, "y":3, "w":1.25},
|
||||||
|
{"label":"K31 (B3,B6)", "x":1.25, "y":3},
|
||||||
|
{"label":"K32 (B3,B7)", "x":2.25, "y":3},
|
||||||
|
{"label":"K33 (B3,C0)", "x":3.25, "y":3},
|
||||||
|
{"label":"K34 (B3,C1)", "x":4.25, "y":3},
|
||||||
|
{"label":"K35 (B3,C2)", "x":5.25, "y":3},
|
||||||
|
{"label":"K36 (B3,C3)", "x":6.25, "y":3},
|
||||||
|
{"label":"K37 (B3,C4)", "x":7.25, "y":3},
|
||||||
|
{"label":"K38 (B3,C5)", "x":8.25, "y":3},
|
||||||
|
{"label":"K39 (B3,C6)", "x":9.25, "y":3},
|
||||||
|
{"label":"K3A (B3,C7)", "x":10.25, "y":3},
|
||||||
|
{"label":"K3B (B3,D0)", "x":11.25, "y":3},
|
||||||
|
{"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
|
||||||
|
{"label":"K3D (B3,D2)", "x":14, "y":3},
|
||||||
|
{"label":"K3E (B3,D3)", "x":15, "y":3},
|
||||||
|
{"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
|
||||||
|
{"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
|
||||||
|
{"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K4C (B4,D1)", "x":13, "y":4},
|
||||||
|
{"label":"K4D (B4,D2)", "x":14, "y":4},
|
||||||
|
{"label":"K4E (B4,D3)", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_ansi_blocker": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (B0,B5)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (B0,B6)", "x":1, "y":0},
|
||||||
|
{"label":"K02 (B0,B7)", "x":2, "y":0},
|
||||||
|
{"label":"K03 (B0,C0)", "x":3, "y":0},
|
||||||
|
{"label":"K04 (B0,C1)", "x":4, "y":0},
|
||||||
|
{"label":"K05 (B0,C2)", "x":5, "y":0},
|
||||||
|
{"label":"K06 (B0,C3)", "x":6, "y":0},
|
||||||
|
{"label":"K07 (B0,C4)", "x":7, "y":0},
|
||||||
|
{"label":"K08 (B0,C5)", "x":8, "y":0},
|
||||||
|
{"label":"K09 (B0,C6)", "x":9, "y":0},
|
||||||
|
{"label":"K0A (B0,C7)", "x":10, "y":0},
|
||||||
|
{"label":"K0B (B0,D0)", "x":11, "y":0},
|
||||||
|
{"label":"K0C (B0,D1)", "x":12, "y":0},
|
||||||
|
{"label":"K0D (B0,D2)", "x":13, "y":0, "w":2},
|
||||||
|
{"label":"K0E (B0,D3)", "x":15, "y":0},
|
||||||
|
{"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"K11 (B1,B6)", "x":1.5, "y":1},
|
||||||
|
{"label":"K12 (B1,B7)", "x":2.5, "y":1},
|
||||||
|
{"label":"K13 (B1,C0)", "x":3.5, "y":1},
|
||||||
|
{"label":"K14 (B1,C1)", "x":4.5, "y":1},
|
||||||
|
{"label":"K15 (B1,C2)", "x":5.5, "y":1},
|
||||||
|
{"label":"K16 (B1,C3)", "x":6.5, "y":1},
|
||||||
|
{"label":"K17 (B1,C4)", "x":7.5, "y":1},
|
||||||
|
{"label":"K18 (B1,C5)", "x":8.5, "y":1},
|
||||||
|
{"label":"K19 (B1,C6)", "x":9.5, "y":1},
|
||||||
|
{"label":"K1A (B1,C7)", "x":10.5, "y":1},
|
||||||
|
{"label":"K1B (B1,D0)", "x":11.5, "y":1},
|
||||||
|
{"label":"K1C (B1,D1)", "x":12.5, "y":1},
|
||||||
|
{"label":"K2C (B2,D1)", "x":13.5, "y":1, "w":1.5},
|
||||||
|
{"label":"K1E (B1,D3)", "x":15, "y":1},
|
||||||
|
{"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"K21 (B2,B6)", "x":1.75, "y":2},
|
||||||
|
{"label":"K22 (B2,B7)", "x":2.75, "y":2},
|
||||||
|
{"label":"K23 (B2,C0)", "x":3.75, "y":2},
|
||||||
|
{"label":"K24 (B2,C1)", "x":4.75, "y":2},
|
||||||
|
{"label":"K25 (B2,C2)", "x":5.75, "y":2},
|
||||||
|
{"label":"K26 (B2,C3)", "x":6.75, "y":2},
|
||||||
|
{"label":"K27 (B2,C4)", "x":7.75, "y":2},
|
||||||
|
{"label":"K28 (B2,C5)", "x":8.75, "y":2},
|
||||||
|
{"label":"K29 (B2,C6)", "x":9.75, "y":2},
|
||||||
|
{"label":"K2A (B2,C7)", "x":10.75, "y":2},
|
||||||
|
{"label":"K2B (B2,D0)", "x":11.75, "y":2},
|
||||||
|
{"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
|
||||||
|
{"label":"K2E (B2,D3)", "x":15, "y":2},
|
||||||
|
{"label":"K30 (B3,B5)", "x":0, "y":3, "w":2.25},
|
||||||
|
{"label":"K32 (B3,B7)", "x":2.25, "y":3},
|
||||||
|
{"label":"K33 (B3,C0)", "x":3.25, "y":3},
|
||||||
|
{"label":"K34 (B3,C1)", "x":4.25, "y":3},
|
||||||
|
{"label":"K35 (B3,C2)", "x":5.25, "y":3},
|
||||||
|
{"label":"K36 (B3,C3)", "x":6.25, "y":3},
|
||||||
|
{"label":"K37 (B3,C4)", "x":7.25, "y":3},
|
||||||
|
{"label":"K38 (B3,C5)", "x":8.25, "y":3},
|
||||||
|
{"label":"K39 (B3,C6)", "x":9.25, "y":3},
|
||||||
|
{"label":"K3A (B3,C7)", "x":10.25, "y":3},
|
||||||
|
{"label":"K3B (B3,D0)", "x":11.25, "y":3},
|
||||||
|
{"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
|
||||||
|
{"label":"K3D (B3,D2)", "x":14, "y":3},
|
||||||
|
{"label":"K3E (B3,D3)", "x":15, "y":3},
|
||||||
|
{"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
|
||||||
|
{"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
|
||||||
|
{"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K4C (B4,D1)", "x":13, "y":4},
|
||||||
|
{"label":"K4D (B4,D2)", "x":14, "y":4},
|
||||||
|
{"label":"K4E (B4,D3)", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_iso_blocker": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"K00 (B0,B5)", "x":0, "y":0},
|
||||||
|
{"label":"K01 (B0,B6)", "x":1, "y":0},
|
||||||
|
{"label":"K02 (B0,B7)", "x":2, "y":0},
|
||||||
|
{"label":"K03 (B0,C0)", "x":3, "y":0},
|
||||||
|
{"label":"K04 (B0,C1)", "x":4, "y":0},
|
||||||
|
{"label":"K05 (B0,C2)", "x":5, "y":0},
|
||||||
|
{"label":"K06 (B0,C3)", "x":6, "y":0},
|
||||||
|
{"label":"K07 (B0,C4)", "x":7, "y":0},
|
||||||
|
{"label":"K08 (B0,C5)", "x":8, "y":0},
|
||||||
|
{"label":"K09 (B0,C6)", "x":9, "y":0},
|
||||||
|
{"label":"K0A (B0,C7)", "x":10, "y":0},
|
||||||
|
{"label":"K0B (B0,D0)", "x":11, "y":0},
|
||||||
|
{"label":"K0C (B0,D1)", "x":12, "y":0},
|
||||||
|
{"label":"K0D (B0,D2)", "x":13, "y":0, "w":2},
|
||||||
|
{"label":"K0E (B0,D3)", "x":15, "y":0},
|
||||||
|
{"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
|
||||||
|
{"label":"K11 (B1,B6)", "x":1.5, "y":1},
|
||||||
|
{"label":"K12 (B1,B7)", "x":2.5, "y":1},
|
||||||
|
{"label":"K13 (B1,C0)", "x":3.5, "y":1},
|
||||||
|
{"label":"K14 (B1,C1)", "x":4.5, "y":1},
|
||||||
|
{"label":"K15 (B1,C2)", "x":5.5, "y":1},
|
||||||
|
{"label":"K16 (B1,C3)", "x":6.5, "y":1},
|
||||||
|
{"label":"K17 (B1,C4)", "x":7.5, "y":1},
|
||||||
|
{"label":"K18 (B1,C5)", "x":8.5, "y":1},
|
||||||
|
{"label":"K19 (B1,C6)", "x":9.5, "y":1},
|
||||||
|
{"label":"K1A (B1,C7)", "x":10.5, "y":1},
|
||||||
|
{"label":"K1B (B1,D0)", "x":11.5, "y":1},
|
||||||
|
{"label":"K1C (B1,D1)", "x":12.5, "y":1},
|
||||||
|
{"label":"K2D (B2,D2)", "x":13.75, "y":1, "w":1.25, "h":2},
|
||||||
|
{"label":"K1E (B1,D3)", "x":15, "y":1},
|
||||||
|
{"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
|
||||||
|
{"label":"K21 (B2,B6)", "x":1.75, "y":2},
|
||||||
|
{"label":"K22 (B2,B7)", "x":2.75, "y":2},
|
||||||
|
{"label":"K23 (B2,C0)", "x":3.75, "y":2},
|
||||||
|
{"label":"K24 (B2,C1)", "x":4.75, "y":2},
|
||||||
|
{"label":"K25 (B2,C2)", "x":5.75, "y":2},
|
||||||
|
{"label":"K26 (B2,C3)", "x":6.75, "y":2},
|
||||||
|
{"label":"K27 (B2,C4)", "x":7.75, "y":2},
|
||||||
|
{"label":"K28 (B2,C5)", "x":8.75, "y":2},
|
||||||
|
{"label":"K29 (B2,C6)", "x":9.75, "y":2},
|
||||||
|
{"label":"K2A (B2,C7)", "x":10.75, "y":2},
|
||||||
|
{"label":"K2B (B2,D0)", "x":11.75, "y":2},
|
||||||
|
{"label":"K2C (B2,D1)", "x":12.75, "y":2},
|
||||||
|
{"label":"K2E (B2,D3)", "x":15, "y":2},
|
||||||
|
{"label":"K30 (B3,B5)", "x":0, "y":3, "w":1.25},
|
||||||
|
{"label":"K31 (B3,B6)", "x":1.25, "y":3},
|
||||||
|
{"label":"K32 (B3,B7)", "x":2.25, "y":3},
|
||||||
|
{"label":"K33 (B3,C0)", "x":3.25, "y":3},
|
||||||
|
{"label":"K34 (B3,C1)", "x":4.25, "y":3},
|
||||||
|
{"label":"K35 (B3,C2)", "x":5.25, "y":3},
|
||||||
|
{"label":"K36 (B3,C3)", "x":6.25, "y":3},
|
||||||
|
{"label":"K37 (B3,C4)", "x":7.25, "y":3},
|
||||||
|
{"label":"K38 (B3,C5)", "x":8.25, "y":3},
|
||||||
|
{"label":"K39 (B3,C6)", "x":9.25, "y":3},
|
||||||
|
{"label":"K3A (B3,C7)", "x":10.25, "y":3},
|
||||||
|
{"label":"K3B (B3,D0)", "x":11.25, "y":3},
|
||||||
|
{"label":"K3C (B3,D1)", "x":12.25, "y":3, "w":1.75},
|
||||||
|
{"label":"K3D (B3,D2)", "x":14, "y":3},
|
||||||
|
{"label":"K3E (B3,D3)", "x":15, "y":3},
|
||||||
|
{"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"label":"K46 (B4,C3)", "x":3.75, "y":4, "w":6.25},
|
||||||
|
{"label":"K4A (B4,C7)", "x":10, "y":4, "w":1.25},
|
||||||
|
{"label":"K4B (B4,D0)", "x":11.25, "y":4, "w":1.25},
|
||||||
|
{"label":"K4C (B4,D1)", "x":13, "y":4},
|
||||||
|
{"label":"K4D (B4,D2)", "x":14, "y":4},
|
||||||
|
{"label":"K4E (B4,D3)", "x":15, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_BSLS, KC_PGUP,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||||
|
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_LSFT, KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for hannah65
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_BSLS, KC_PGUP,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||||
|
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_LSFT, KC_UP, KC_END,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[3] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/* Copyright 2020 Team Mechlovin
|
||||||
|
*
|
||||||
|
* 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"
|
||||||
|
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, K0E, \
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
||||||
|
K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
|
||||||
|
) { \
|
||||||
|
{ 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, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi_blocker( \
|
||||||
|
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, K2C, K1E, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
||||||
|
K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
|
||||||
|
) { \
|
||||||
|
{ 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, KC_NO, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_iso_blocker( \
|
||||||
|
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, K2D, K1E, \
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
||||||
|
K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
|
||||||
|
) { \
|
||||||
|
{ 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, KC_NO, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
|
||||||
|
}
|
||||||
Whitespace-only changes.
@@ -0,0 +1,21 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = STM32F303
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
COMMAND_ENABLE = yes # 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 = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = mechlovin/hannah65/rev1
|
||||||
@@ -110,9 +110,9 @@ extern LED_TYPE fleds[2];
|
|||||||
hs_set fled_hs[2];
|
hs_set fled_hs[2];
|
||||||
|
|
||||||
void copyrgb(LED_TYPE *src, LED_TYPE *dst) {
|
void copyrgb(LED_TYPE *src, LED_TYPE *dst) {
|
||||||
(*dst).r = (*src).r;
|
dst->r = src->r;
|
||||||
(*dst).g = (*src).g;
|
dst->g = src->g;
|
||||||
(*dst).b = (*src).b;
|
dst->b = src->b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
|
||||||
@@ -145,11 +145,11 @@ void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
|||||||
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
|
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
|
||||||
|
|
||||||
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
||||||
(*led1).r = r;
|
led1->r = r;
|
||||||
(*led1).g = g;
|
led1->g = g;
|
||||||
(*led1).b = b;
|
led1->b = b;
|
||||||
#ifdef RGBW
|
#ifdef RGBW
|
||||||
(*led1).w = 0;
|
led1->w = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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 "canoe_gen2.h"
|
||||||
|
|
||||||
|
void keyboard_pre_init_kb(void) {
|
||||||
|
setPinOutput(E6);
|
||||||
|
writePinHigh(E6);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool led_update_kb(led_t led_state) {
|
||||||
|
if(led_update_user(led_state)) {
|
||||||
|
writePin(E6, !led_state.caps_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
void suspend_power_down_kb(void) {
|
||||||
|
rgb_matrix_set_suspend_state(true);
|
||||||
|
suspend_power_down_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void suspend_wakeup_init_kb(void) {
|
||||||
|
rgb_matrix_set_suspend_state(false);
|
||||||
|
suspend_wakeup_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
led_config_t g_led_config = { {
|
||||||
|
// Key Matrix to LED Index
|
||||||
|
// 15, 44, 46, 48,
|
||||||
|
// 74, 75, 76
|
||||||
|
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 },
|
||||||
|
{ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 13, 31 },
|
||||||
|
{ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 30, 45, 47 },
|
||||||
|
{ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 },
|
||||||
|
{ 64, 65, 66, NO_LED, NO_LED, NO_LED, 67, NO_LED, NO_LED, 69, 70, NO_LED, 71, 72, 73 }
|
||||||
|
}, {
|
||||||
|
// LED Index to Physical Position
|
||||||
|
{ 7, 8 }, // Esc
|
||||||
|
{ 22, 8 }, // 1
|
||||||
|
{ 37, 8 }, // 2
|
||||||
|
{ 52, 8 }, // 3
|
||||||
|
{ 67, 8 }, // 4
|
||||||
|
{ 82, 8 }, // 5
|
||||||
|
{ 97, 8 }, // 6
|
||||||
|
{ 112, 8 }, // 7
|
||||||
|
{ 127, 8 }, // 8
|
||||||
|
{ 142, 8 }, // 9
|
||||||
|
{ 157, 8 }, // 0
|
||||||
|
{ 172, 8 }, // -
|
||||||
|
{ 187, 8 }, // =
|
||||||
|
{ 202, 8 }, // split bs
|
||||||
|
{ 209, 8 }, // bs
|
||||||
|
{ 217, 8 }, // split bs
|
||||||
|
{ 231, 8 }, // ins
|
||||||
|
{ 11, 24 }, // tab
|
||||||
|
{ 30, 24 }, // q
|
||||||
|
{ 45, 24 }, // w
|
||||||
|
{ 60, 24 }, // e
|
||||||
|
{ 75, 24 }, // r
|
||||||
|
{ 90, 24 }, // t
|
||||||
|
{ 104, 24 }, // y
|
||||||
|
{ 119, 24 }, // u
|
||||||
|
{ 134, 24 }, // i
|
||||||
|
{ 149, 24 }, // o
|
||||||
|
{ 164, 24 }, // p
|
||||||
|
{ 179, 24 }, // [
|
||||||
|
{ 194, 24 }, // ]
|
||||||
|
{ 212, 24 }, // backslash
|
||||||
|
{ 231, 24 }, // del
|
||||||
|
{ 11, 40 }, // caps
|
||||||
|
{ 34, 40 }, // a
|
||||||
|
{ 49, 40 }, // s
|
||||||
|
{ 64, 40 }, // d
|
||||||
|
{ 79, 40 }, // f
|
||||||
|
{ 94, 40 }, // g
|
||||||
|
{ 108, 40 }, // h
|
||||||
|
{ 123, 40 }, // j
|
||||||
|
{ 138, 40 }, // k
|
||||||
|
{ 153, 40 }, // l
|
||||||
|
{ 168, 40 }, // ;
|
||||||
|
{ 183, 40 }, // '
|
||||||
|
{ 198, 40 }, // iso hash
|
||||||
|
{ 200, 40 }, // ansi enter
|
||||||
|
{ 215, 32 }, // iso enter
|
||||||
|
{ 231, 40 }, // pgup
|
||||||
|
{ 9, 56 }, // iso shift
|
||||||
|
{ 17, 56 }, // ansi shift
|
||||||
|
{ 26, 56 }, // iso nubs
|
||||||
|
{ 41, 56 }, // z
|
||||||
|
{ 56, 56 }, // x
|
||||||
|
{ 71, 56 }, // c
|
||||||
|
{ 86, 56 }, // v
|
||||||
|
{ 101, 56 }, // b
|
||||||
|
{ 116, 56 }, // n
|
||||||
|
{ 131, 56 }, // m
|
||||||
|
{ 146, 56 }, // ,
|
||||||
|
{ 161, 56 }, // .
|
||||||
|
{ 175, 56 }, // ?
|
||||||
|
{ 196, 56 }, // shift
|
||||||
|
{ 217, 56 }, // up
|
||||||
|
{ 231, 56 }, // pgdn
|
||||||
|
{ 10, 72 }, // ctrl
|
||||||
|
{ 29, 72 }, // win
|
||||||
|
{ 48, 72 }, // alt
|
||||||
|
{ 103, 72 }, // space
|
||||||
|
{ 112, 72 }, // space
|
||||||
|
{ 161, 72 }, // alt
|
||||||
|
{ 176, 72 }, // fn
|
||||||
|
{ 202, 72 }, // left
|
||||||
|
{ 217, 72 }, // down
|
||||||
|
{ 231, 72 }, // right
|
||||||
|
{ 7, 40 }, // top 1
|
||||||
|
{ 119, 40 }, // top 2
|
||||||
|
{ 231, 40 } // top 3
|
||||||
|
}, {
|
||||||
|
// LED Index to Flag
|
||||||
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
|
||||||
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
||||||
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
|
||||||
|
1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
|
||||||
|
1, 1, 1, 4, 4, 1, 1, 1, 1, 1,
|
||||||
|
2, 2, 2
|
||||||
|
} };
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
// readability
|
||||||
|
#define ___ KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT_all LAYOUT_65_iso_blocker_split_bs
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi_blocker_split_bs( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k1d, k0d, k0e, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
|
||||||
|
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
|
||||||
|
k40, k41, k42, k46, k49, k4a, k4c, k4d, k4e \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{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, k1e}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
|
||||||
|
{k30, ___, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
|
||||||
|
{k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, ___, k4c, k4d, k4e} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_iso_blocker_split_bs( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k1d, k0d, k0e, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
|
||||||
|
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
|
||||||
|
k40, k41, k42, k46, k49, k4a, k4c, k4d, k4e \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{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, k1e}, \
|
||||||
|
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
|
||||||
|
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
|
||||||
|
{k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, ___, k4c, k4d, k4e} \
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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 0x9C12
|
||||||
|
#define PRODUCT_ID 0x89F0
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Percent Studio
|
||||||
|
#define PRODUCT Canoe Gen2
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
// ROWS: Top to bottom, COLS: Left to right
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS {B1,B3,B2,F5,F4}
|
||||||
|
#define MATRIX_COL_PINS {B0,D0,C6,B6,B5,B4,D7,D6,D4,D5,D3,D2,D1,F6,F7}
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* Uncomment if your encoder doesn't react to every turn or skips */
|
||||||
|
//#define ENCODER_RESOLUTION 2
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* Backlight configuration
|
||||||
|
*/
|
||||||
|
#define RGB_DI_PIN B7
|
||||||
|
#define DRIVER_LED_TOTAL 77
|
||||||
|
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
|
||||||
|
|
||||||
|
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||||
|
#define RGB_MATRIX_STARTUP_HUE 0
|
||||||
|
#define RGB_MATRIX_STARTUP_SAT 255
|
||||||
|
#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
|
||||||
|
#define RGB_MATRIX_STARTUP_SPD 127
|
||||||
|
#define RGB_DISABLE_WHEN_USB_SUSPENDED true
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Canoe Gen2",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "evyd13",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_65_ansi_blocker_split_bs": {
|
||||||
|
"layout": [
|
||||||
|
{"x":0, "y":0},
|
||||||
|
{"x":1, "y":0},
|
||||||
|
{"x":2, "y":0},
|
||||||
|
{"x":3, "y":0},
|
||||||
|
{"x":4, "y":0},
|
||||||
|
{"x":5, "y":0},
|
||||||
|
{"x":6, "y":0},
|
||||||
|
{"x":7, "y":0},
|
||||||
|
{"x":8, "y":0},
|
||||||
|
{"x":9, "y":0},
|
||||||
|
{"x":10, "y":0},
|
||||||
|
{"x":11, "y":0},
|
||||||
|
{"x":12, "y":0},
|
||||||
|
{"x":13, "y":0},
|
||||||
|
{"x":14, "y":0},
|
||||||
|
{"x":15, "y":0},
|
||||||
|
|
||||||
|
{"x":0, "y":1, "w":1.5},
|
||||||
|
{"x":1.5, "y":1},
|
||||||
|
{"x":2.5, "y":1},
|
||||||
|
{"x":3.5, "y":1},
|
||||||
|
{"x":4.5, "y":1},
|
||||||
|
{"x":5.5, "y":1},
|
||||||
|
{"x":6.5, "y":1},
|
||||||
|
{"x":7.5, "y":1},
|
||||||
|
{"x":8.5, "y":1},
|
||||||
|
{"x":9.5, "y":1},
|
||||||
|
{"x":10.5, "y":1},
|
||||||
|
{"x":11.5, "y":1},
|
||||||
|
{"x":12.5, "y":1},
|
||||||
|
{"x":13.5, "y":1, "w":1.5},
|
||||||
|
{"x":15, "y":1},
|
||||||
|
|
||||||
|
{"x":0, "y":2, "w":1.75},
|
||||||
|
{"x":1.75, "y":2},
|
||||||
|
{"x":2.75, "y":2},
|
||||||
|
{"x":3.75, "y":2},
|
||||||
|
{"x":4.75, "y":2},
|
||||||
|
{"x":5.75, "y":2},
|
||||||
|
{"x":6.75, "y":2},
|
||||||
|
{"x":7.75, "y":2},
|
||||||
|
{"x":8.75, "y":2},
|
||||||
|
{"x":9.75, "y":2},
|
||||||
|
{"x":10.75, "y":2},
|
||||||
|
{"x":11.75, "y":2},
|
||||||
|
{"x":12.75, "y":2, "w":2.25},
|
||||||
|
{"x":15, "y":2},
|
||||||
|
|
||||||
|
{"x":0, "y":3, "w":2.25},
|
||||||
|
{"x":2.25, "y":3},
|
||||||
|
{"x":3.25, "y":3},
|
||||||
|
{"x":4.25, "y":3},
|
||||||
|
{"x":5.25, "y":3},
|
||||||
|
{"x":6.25, "y":3},
|
||||||
|
{"x":7.25, "y":3},
|
||||||
|
{"x":8.25, "y":3},
|
||||||
|
{"x":9.25, "y":3},
|
||||||
|
{"x":10.25, "y":3},
|
||||||
|
{"x":11.25, "y":3},
|
||||||
|
{"x":12.25, "y":3, "w":1.75},
|
||||||
|
{"x":14, "y":3},
|
||||||
|
{"x":15, "y":3},
|
||||||
|
|
||||||
|
{"x":0, "y":4, "w":1.25},
|
||||||
|
{"x":1.25, "y":4, "w":1.25},
|
||||||
|
{"x":2.5, "y":4, "w":1.25},
|
||||||
|
{"x":3.75, "y":4, "w":6.25},
|
||||||
|
{"x":10, "y":4, "w":1.25},
|
||||||
|
{"x":11.25, "y":4, "w":1.25},
|
||||||
|
{"x":13, "y":4},
|
||||||
|
{"x":14, "y":4},
|
||||||
|
{"x":15, "y":4}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_iso_blocker_split_bs": {
|
||||||
|
"layout": [
|
||||||
|
{"x":0, "y":0},
|
||||||
|
{"x":1, "y":0},
|
||||||
|
{"x":2, "y":0},
|
||||||
|
{"x":3, "y":0},
|
||||||
|
{"x":4, "y":0},
|
||||||
|
{"x":5, "y":0},
|
||||||
|
{"x":6, "y":0},
|
||||||
|
{"x":7, "y":0},
|
||||||
|
{"x":8, "y":0},
|
||||||
|
{"x":9, "y":0},
|
||||||
|
{"x":10, "y":0},
|
||||||
|
{"x":11, "y":0},
|
||||||
|
{"x":12, "y":0},
|
||||||
|
{"x":13, "y":0},
|
||||||
|
{"x":14, "y":0},
|
||||||
|
{"x":15, "y":0},
|
||||||
|
|
||||||
|
{"x":0, "y":1, "w":1.5},
|
||||||
|
{"x":1.5, "y":1},
|
||||||
|
{"x":2.5, "y":1},
|
||||||
|
{"x":3.5, "y":1},
|
||||||
|
{"x":4.5, "y":1},
|
||||||
|
{"x":5.5, "y":1},
|
||||||
|
{"x":6.5, "y":1},
|
||||||
|
{"x":7.5, "y":1},
|
||||||
|
{"x":8.5, "y":1},
|
||||||
|
{"x":9.5, "y":1},
|
||||||
|
{"x":10.5, "y":1},
|
||||||
|
{"x":11.5, "y":1},
|
||||||
|
{"x":12.5, "y":1},
|
||||||
|
{"x":15, "y":1},
|
||||||
|
|
||||||
|
{"x":0, "y":2, "w":1.75},
|
||||||
|
{"x":1.75, "y":2},
|
||||||
|
{"x":2.75, "y":2},
|
||||||
|
{"x":3.75, "y":2},
|
||||||
|
{"x":4.75, "y":2},
|
||||||
|
{"x":5.75, "y":2},
|
||||||
|
{"x":6.75, "y":2},
|
||||||
|
{"x":7.75, "y":2},
|
||||||
|
{"x":8.75, "y":2},
|
||||||
|
{"x":9.75, "y":2},
|
||||||
|
{"x":10.75, "y":2},
|
||||||
|
{"x":11.75, "y":2},
|
||||||
|
{"x":12.75, "y":2},
|
||||||
|
{"x":13.75, "y":1, "w":1.25, "h":2},
|
||||||
|
{"x":15, "y":2},
|
||||||
|
|
||||||
|
{"x":0, "y":3, "w":1.25},
|
||||||
|
{"x":1.25, "y":3},
|
||||||
|
{"x":2.25, "y":3},
|
||||||
|
{"x":3.25, "y":3},
|
||||||
|
{"x":4.25, "y":3},
|
||||||
|
{"x":5.25, "y":3},
|
||||||
|
{"x":6.25, "y":3},
|
||||||
|
{"x":7.25, "y":3},
|
||||||
|
{"x":8.25, "y":3},
|
||||||
|
{"x":9.25, "y":3},
|
||||||
|
{"x":10.25, "y":3},
|
||||||
|
{"x":11.25, "y":3},
|
||||||
|
{"x":12.25, "y":3, "w":1.75},
|
||||||
|
{"x":14, "y":3},
|
||||||
|
{"x":15, "y":3},
|
||||||
|
|
||||||
|
{"x":0, "y":4, "w":1.25},
|
||||||
|
{"x":1.25, "y":4, "w":1.25},
|
||||||
|
{"x":2.5, "y":4, "w":1.25},
|
||||||
|
{"x":3.75, "y":4, "w":6.25},
|
||||||
|
{"x":10, "y":4, "w":1.25},
|
||||||
|
{"x":11.25, "y":4, "w":1.25},
|
||||||
|
{"x":13, "y":4},
|
||||||
|
{"x":14, "y":4},
|
||||||
|
{"x":15, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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_65_ansi_blocker_split_bs(
|
||||||
|
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_INS,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[1] = LAYOUT_65_ansi_blocker_split_bs(
|
||||||
|
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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_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_INS,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
|
||||||
|
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_BSLS, KC_ENT, KC_PGUP,
|
||||||
|
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_PGDN,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[3] = LAYOUT_all(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Canoe Gen2
|
||||||
|
|
||||||
|
Canoe Gen2 is a 65% from Percent with per key RGB and an adjustable foot angle. The PCB can be put into reset mode by pressing the button on the back.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Evyd13](https://github.com/evyd13)
|
||||||
|
* Hardware Supported: (Black) Canoe Gen2 PCB
|
||||||
|
* Hardware Availability: https://percent.studio/products/canoe-gen2
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make percent/canoe_gen2:default
|
||||||
|
|
||||||
|
Flashing example for this keyboard:
|
||||||
|
|
||||||
|
make percent/canoe_gen2:default:flash
|
||||||
|
|
||||||
|
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,65 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Evy Dekkers
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
RGB_MATRIX_EFFECT(indicator_gradient)
|
||||||
|
RGB_MATRIX_EFFECT(indicator_cycle_all)
|
||||||
|
RGB_MATRIX_EFFECT(indicator_static)
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||||
|
|
||||||
|
static bool indicator_static(effect_params_t* params) {
|
||||||
|
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||||
|
for (uint8_t i = led_min ; i < 74; i++) {
|
||||||
|
rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
|
||||||
|
}
|
||||||
|
for (uint8_t i = 74 ; i < led_max; i++) {
|
||||||
|
rgb_matrix_set_color(i, 0xff, 0xff, 0xff);
|
||||||
|
}
|
||||||
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool effect_runner_indicator(effect_params_t* params, i_f effect_func) {
|
||||||
|
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||||
|
|
||||||
|
uint8_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 16);
|
||||||
|
for (uint8_t i = led_min; i < led_max; i++) {
|
||||||
|
if (i < 74) {
|
||||||
|
rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
|
||||||
|
} else {
|
||||||
|
RGB_MATRIX_TEST_LED_FLAGS();
|
||||||
|
RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, (i - 74), time));
|
||||||
|
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return led_max < DRIVER_LED_TOTAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HSV indicator_gradient_math(HSV hsv, uint8_t i, uint8_t time) {
|
||||||
|
hsv.h = g_led_config.point[i].x - time;
|
||||||
|
return hsv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool indicator_gradient(effect_params_t* params) { return effect_runner_indicator(params, &indicator_gradient_math); }
|
||||||
|
|
||||||
|
static HSV indicator_cycle_all_math(HSV hsv, uint8_t i, uint8_t time) {
|
||||||
|
hsv.h = time;
|
||||||
|
return hsv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool indicator_cycle_all(effect_params_t* params) { return effect_runner_indicator(params, &indicator_cycle_all_math); }
|
||||||
|
|
||||||
|
#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
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 = yes # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
RGB_MATRIX_ENABLE = WS2812
|
||||||
|
|
||||||
|
LAYOUTS = 65_ansi_blocker_split_bs 65_iso_blocker_split_bs
|
||||||
|
RGB_MATRIX_CUSTOM_KB = yes
|
||||||
@@ -150,25 +150,58 @@ def check_udev_rules():
|
|||||||
ok = True
|
ok = True
|
||||||
udev_dir = Path("/etc/udev/rules.d/")
|
udev_dir = Path("/etc/udev/rules.d/")
|
||||||
desired_rules = {
|
desired_rules = {
|
||||||
'dfu': {_udev_rule("03eb", "2ff4"), _udev_rule("03eb", "2ffb"), _udev_rule("03eb", "2ff0")},
|
'atmel-dfu': {
|
||||||
'input_club': {_udev_rule("1c11", "b007")},
|
_udev_rule("03EB", "2FEF"), # ATmega16U2
|
||||||
'stm32': {_udev_rule("1eaf", "0003"), _udev_rule("0483", "df11")},
|
_udev_rule("03EB", "2FF0"), # ATmega32U2
|
||||||
'bootloadhid': {_udev_rule("16c0", "05df")},
|
_udev_rule("03EB", "2FF3"), # ATmega16U4
|
||||||
|
_udev_rule("03EB", "2FF4"), # ATmega32U4
|
||||||
|
_udev_rule("03EB", "2FF9"), # AT90USB64
|
||||||
|
_udev_rule("03EB", "2FFB") # AT90USB128
|
||||||
|
},
|
||||||
|
'kiibohd': {
|
||||||
|
_udev_rule("1C11", "B007")
|
||||||
|
},
|
||||||
|
'stm32': {
|
||||||
|
_udev_rule("1EAF", "0003"), # STM32duino
|
||||||
|
_udev_rule("0483", "DF11") # STM32 DFU
|
||||||
|
},
|
||||||
|
'bootloadhid': {
|
||||||
|
_udev_rule("16C0", "05DF")
|
||||||
|
},
|
||||||
|
'usbasploader': {
|
||||||
|
_udev_rule("16C0", "05DC")
|
||||||
|
},
|
||||||
|
'massdrop': {
|
||||||
|
_udev_rule("03EB", "6124")
|
||||||
|
},
|
||||||
'caterina': {
|
'caterina': {
|
||||||
_udev_rule("2341", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
|
# Spark Fun Electronics
|
||||||
_udev_rule("1b4f", "9205", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
|
_udev_rule("1B4F", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 3V3/8MHz
|
||||||
_udev_rule("1b4f", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
|
_udev_rule("1B4F", "9205", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 5V/16MHz
|
||||||
_udev_rule("2a03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"')
|
_udev_rule("1B4F", "9207", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # LilyPad 3V3/8MHz (and some Pro Micro clones)
|
||||||
|
# Pololu Electronics
|
||||||
|
_udev_rule("1FFB", "0101", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # A-Star 32U4
|
||||||
|
# Arduino SA
|
||||||
|
_udev_rule("2341", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
|
||||||
|
_udev_rule("2341", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Micro
|
||||||
|
# Adafruit Industries LLC
|
||||||
|
_udev_rule("239A", "000C", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Feather 32U4
|
||||||
|
_udev_rule("239A", "000D", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 3V3/8MHz
|
||||||
|
_udev_rule("239A", "000E", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 5V/16MHz
|
||||||
|
# dog hunter AG
|
||||||
|
_udev_rule("2A03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
|
||||||
|
_udev_rule("2A03", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"') # Micro
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# These rules are no longer recommended, only use them to check for their presence.
|
# These rules are no longer recommended, only use them to check for their presence.
|
||||||
deprecated_rules = {
|
deprecated_rules = {
|
||||||
'dfu': {_deprecated_udev_rule("03eb", "2ff4"), _deprecated_udev_rule("03eb", "2ffb"), _deprecated_udev_rule("03eb", "2ff0")},
|
'atmel-dfu': {_deprecated_udev_rule("03eb", "2ff4"), _deprecated_udev_rule("03eb", "2ffb"), _deprecated_udev_rule("03eb", "2ff0")},
|
||||||
'input_club': {_deprecated_udev_rule("1c11")},
|
'kiibohd': {_deprecated_udev_rule("1c11")},
|
||||||
'stm32': {_deprecated_udev_rule("1eaf", "0003"), _deprecated_udev_rule("0483", "df11")},
|
'stm32': {_deprecated_udev_rule("1eaf", "0003"), _deprecated_udev_rule("0483", "df11")},
|
||||||
'bootloadhid': {_deprecated_udev_rule("16c0", "05df")},
|
'bootloadhid': {_deprecated_udev_rule("16c0", "05df")},
|
||||||
'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'}
|
'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'},
|
||||||
|
'tmk': {_deprecated_udev_rule("feed")}
|
||||||
}
|
}
|
||||||
|
|
||||||
if udev_dir.exists():
|
if udev_dir.exists():
|
||||||
@@ -194,7 +227,7 @@ def check_udev_rules():
|
|||||||
if deprecated_rule and deprecated_rule.issubset(current_rules):
|
if deprecated_rule and deprecated_rule.issubset(current_rules):
|
||||||
cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
|
cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
|
||||||
else:
|
else:
|
||||||
cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
|
cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. See https://docs.qmk.fm/#/faq_build?id=linux-udev-rules for more details.", bootloader)
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,6 @@ MAX_KEYBOARD_SUBFOLDERS = 5
|
|||||||
|
|
||||||
# Supported processor types
|
# Supported processor types
|
||||||
ARM_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F411'
|
ARM_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F411'
|
||||||
AVR_PROCESSORS = 'at90usb1286', 'at90usb646', 'atmega16u2', 'atmega328p', 'atmega32a', 'atmega32u2', 'atmega32u4', None
|
AVR_PROCESSORS = 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', 'atmega328p', 'atmega32a', None
|
||||||
ALL_PROCESSORS = ARM_PROCESSORS + AVR_PROCESSORS
|
ALL_PROCESSORS = ARM_PROCESSORS + AVR_PROCESSORS
|
||||||
VUSB_PROCESSORS = 'atmega328p', 'atmega32a', 'atmega328', 'attiny85'
|
VUSB_PROCESSORS = 'atmega328p', 'atmega32a', 'atmega328', 'attiny85'
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
# define PINB_ADDRESS 0x3
|
# define PINB_ADDRESS 0x3
|
||||||
# define PINC_ADDRESS 0x6
|
# define PINC_ADDRESS 0x6
|
||||||
# define PIND_ADDRESS 0x9
|
# define PIND_ADDRESS 0x9
|
||||||
# elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__)
|
# elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
|
||||||
# define ADDRESS_BASE 0x00
|
# define ADDRESS_BASE 0x00
|
||||||
# define PINA_ADDRESS 0x0
|
# define PINA_ADDRESS 0x0
|
||||||
# define PINB_ADDRESS 0x3
|
# define PINB_ADDRESS 0x3
|
||||||
@@ -307,7 +307,7 @@
|
|||||||
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
|
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
|
||||||
sei(); \
|
sei(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
# elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
|
# elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
|
||||||
# define SERIAL_UART_BAUD 115200
|
# define SERIAL_UART_BAUD 115200
|
||||||
# define SERIAL_UART_DATA UDR1
|
# define SERIAL_UART_DATA UDR1
|
||||||
/* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
|
/* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#if defined(PROTOCOL_CHIBIOS)
|
#if defined(PROTOCOL_CHIBIOS)
|
||||||
# define RESET QK_RESET
|
# define RESET QK_RESET
|
||||||
#endif
|
#endif
|
||||||
|
// Gross hack, remove me and change RESET keycode to QK_BOOT
|
||||||
|
#if defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__)
|
||||||
|
# undef RESET
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "quantum_keycodes.h"
|
#include "quantum_keycodes.h"
|
||||||
|
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ ifneq ($(findstring STM32F411, $(MCU)),)
|
|||||||
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
|
DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb1286))
|
ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287))
|
||||||
PROTOCOL = LUFA
|
PROTOCOL = LUFA
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
|||||||
+4
-4
@@ -132,11 +132,11 @@ void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
|
|||||||
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
|
void sethsv(uint8_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); }
|
||||||
|
|
||||||
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
|
||||||
(*led1).r = r;
|
led1->r = r;
|
||||||
(*led1).g = g;
|
led1->g = g;
|
||||||
(*led1).b = b;
|
led1->b = b;
|
||||||
#ifdef RGBW
|
#ifdef RGBW
|
||||||
(*led1).w = 0;
|
led1->w = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user