Merge branch 'develop' of github.com:qmk/qmk_firmware into develop
This commit is contained in:
@@ -105,8 +105,8 @@ ifeq ($(strip $(BOOTLOADER)), halfkay)
|
||||
ifeq ($(strip $(MCU)), at90usb1286)
|
||||
BOOTLOADER_SIZE = 1024
|
||||
endif
|
||||
# Teensy LC, 3.x
|
||||
ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK66FX1M0))
|
||||
# Teensy LC, 3.0, 3.1/2, 3.5, 3.6
|
||||
ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK64FX512 MK66FX1M0))
|
||||
FIRMWARE_FORMAT = hex
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -400,6 +400,12 @@ endif
|
||||
|
||||
OPT_DEFS += -DKEYMAP_C=\"$(KEYMAP_C)\"
|
||||
|
||||
# If a keymap or userspace places their keymap array in another file instead, allow for it to be included
|
||||
# !!NOTE!! -- For this to work, the source file cannot be part of $(SRC), so users should not add it via `SRC += <file>`
|
||||
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
|
||||
OPT_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
|
||||
endif
|
||||
|
||||
# project specific files
|
||||
SRC += \
|
||||
$(KEYBOARD_SRC) \
|
||||
|
||||
@@ -87,6 +87,33 @@ ifneq ($(findstring MK20DX256, $(MCU)),)
|
||||
BOARD ?= PJRC_TEENSY_3_1
|
||||
endif
|
||||
|
||||
ifneq ($(findstring MK64FX512, $(MCU)),)
|
||||
# Cortex version
|
||||
MCU = cortex-m4
|
||||
|
||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||
ARMV = 7
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = K60x
|
||||
|
||||
# Linker script to use
|
||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||
# or <keyboard_dir>/ld/
|
||||
MCU_LDSCRIPT ?= MK64FX512
|
||||
|
||||
# Startup code to use
|
||||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
|
||||
MCU_STARTUP ?= k60x
|
||||
|
||||
# Board: it should exist either in <chibios>/os/hal/boards/,
|
||||
# <keyboard_dir>/boards/, or drivers/boards/
|
||||
BOARD ?= PJRC_TEENSY_3_5
|
||||
endif
|
||||
|
||||
ifneq ($(findstring MK66FX1M0, $(MCU)),)
|
||||
# Cortex version
|
||||
MCU = cortex-m4
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
},
|
||||
"processor": {
|
||||
"type": "string",
|
||||
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "RP2040", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "WB32FQ95", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
|
||||
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK64FX512", "MK66FX1M0", "RP2040", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "WB32FQ95", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
|
||||
},
|
||||
"audio": {
|
||||
"type": "object",
|
||||
|
||||
@@ -62,6 +62,8 @@ You can also use any ARM chip with USB that [ChibiOS](https://www.chibios.org) s
|
||||
* [MK20DX128](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-50-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-based-on-arm-cortex-m4-core:K20_50)
|
||||
* [MK20DX256](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
|
||||
* PJRC Teensy 3.2
|
||||
* [MK64FX512](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k6x-ethernet/kinetis-k64-120-mhz-256-kb-sram-microcontrollers-mcus-based-on-arm-cortex-m4-core:K64_120)
|
||||
* PJRC Teensy 3.5
|
||||
* [MK66FX1M0](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k6x-ethernet/kinetis-k66-180-mhz-dual-high-speed-full-speed-usbs-2mb-flash-microcontrollers-mcus-based-on-arm-cortex-m4-core:K66_180)
|
||||
* PJRC Teensy 3.6
|
||||
|
||||
|
||||
@@ -27,30 +27,24 @@ QMK maintains a Bundle of MSYS2, the CLI and all necessary dependencies. It also
|
||||
|
||||
You will need to install [QMK MSYS](https://msys.qmk.fm/). The latest release is available [here](https://github.com/qmk/qmk_distro_msys/releases/latest).
|
||||
|
||||
Alternatively, if you'd like to manually install MSYS2, the following section will walk you through the process.
|
||||
|
||||
<details>
|
||||
<summary>Manual Install</summary>
|
||||
<summary>Advanced Users</summary>
|
||||
|
||||
?> Ignore the following steps if you use `QMK MSYS`.
|
||||
!> <b style="font-size:150%">This process is not recommended for new users.</b>
|
||||
|
||||
If you'd like to manually install MSYS2, the following sections will walk you through the process.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install MSYS2, Git and Python. Follow the installation instructions on https://www.msys2.org.
|
||||
|
||||
Once MSYS2 is installed, close any open MSYS terminals and open a new MinGW 64-bit terminal.
|
||||
You will need to install [MSYS2](https://www.msys2.org). Once installed, close any open MSYS terminals (purple icon) and open a new MinGW 64-bit terminal (blue icon) from the Start Menu.
|
||||
|
||||
!> **NOTE:** The MinGW 64-bit terminal is *not* the same as the MSYS terminal that opens when installation is completed. Your prompt should say "MINGW64" in purple text, rather than "MSYS". See [this page](https://www.msys2.org/wiki/MSYS2-introduction/#subsystems) for more information on the differences.
|
||||
|
||||
Then run the following command:
|
||||
|
||||
pacman --needed --noconfirm --disable-download-timeout -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python-pillow
|
||||
|
||||
#### Installation
|
||||
|
||||
Install the QMK CLI by running:
|
||||
|
||||
python3 -m pip install qmk
|
||||
pacman --needed --noconfirm --disable-download-timeout -S git mingw-w64-x86_64-python-qmk
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
// Copyright 2022 nirim000
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "i2c_master.h"
|
||||
#include "pca9505.h"
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
#define SLAVE_TO_ADDR(n) (n << 1)
|
||||
#define TIMEOUT 100
|
||||
|
||||
enum {
|
||||
CMD_INPUT_0 = 0,
|
||||
CMD_INPUT_1,
|
||||
CMD_INPUT_2,
|
||||
CMD_INPUT_3,
|
||||
CMD_INPUT_4,
|
||||
CMD_OUTPUT_0 = 8,
|
||||
CMD_OUTPUT_1,
|
||||
CMD_OUTPUT_2,
|
||||
CMD_OUTPUT_3,
|
||||
CMD_OUTPUT_4,
|
||||
CMD_INVERSION_0 = 16,
|
||||
CMD_INVERSION_1,
|
||||
CMD_INVERSION_2,
|
||||
CMD_INVERSION_3,
|
||||
CMD_INVERSION_4,
|
||||
CMD_CONFIG_0 = 24,
|
||||
CMD_CONFIG_1,
|
||||
CMD_CONFIG_2,
|
||||
CMD_CONFIG_3,
|
||||
CMD_CONFIG_4,
|
||||
};
|
||||
|
||||
void pca9505_init(uint8_t slave_addr) {
|
||||
static uint8_t s_init = 0;
|
||||
if (!s_init) {
|
||||
i2c_init();
|
||||
|
||||
s_init = 1;
|
||||
}
|
||||
|
||||
// TODO: could check device connected
|
||||
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
|
||||
// i2c_stop();
|
||||
}
|
||||
|
||||
bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
|
||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
|
||||
uint8_t cmd = 0;
|
||||
switch (port) {
|
||||
case 0:
|
||||
cmd = CMD_CONFIG_0;
|
||||
break;
|
||||
case 1:
|
||||
cmd = CMD_CONFIG_1;
|
||||
break;
|
||||
case 2:
|
||||
cmd = CMD_CONFIG_2;
|
||||
break;
|
||||
case 3:
|
||||
cmd = CMD_CONFIG_3;
|
||||
break;
|
||||
case 4:
|
||||
cmd = CMD_CONFIG_4;
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
|
||||
if (ret != I2C_STATUS_SUCCESS) {
|
||||
print("pca9505_set_config::FAILED\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
|
||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
|
||||
uint8_t cmd = 0;
|
||||
switch (port) {
|
||||
case 0:
|
||||
cmd = CMD_INVERSION_0;
|
||||
break;
|
||||
case 1:
|
||||
cmd = CMD_INVERSION_1;
|
||||
break;
|
||||
case 2:
|
||||
cmd = CMD_INVERSION_2;
|
||||
break;
|
||||
case 3:
|
||||
cmd = CMD_INVERSION_3;
|
||||
break;
|
||||
case 4:
|
||||
cmd = CMD_INVERSION_4;
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
|
||||
if (ret != I2C_STATUS_SUCCESS) {
|
||||
print("pca9505_set_polarity::FAILED\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
|
||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
|
||||
uint8_t cmd = 0;
|
||||
switch (port) {
|
||||
case 0:
|
||||
cmd = CMD_OUTPUT_0;
|
||||
break;
|
||||
case 1:
|
||||
cmd = CMD_OUTPUT_1;
|
||||
break;
|
||||
case 2:
|
||||
cmd = CMD_OUTPUT_2;
|
||||
break;
|
||||
case 3:
|
||||
cmd = CMD_OUTPUT_3;
|
||||
break;
|
||||
case 4:
|
||||
cmd = CMD_OUTPUT_4;
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
|
||||
if (ret != I2C_STATUS_SUCCESS) {
|
||||
print("pca9505_set_output::FAILED\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* out) {
|
||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
|
||||
uint8_t cmd = 0;
|
||||
switch (port) {
|
||||
case 0:
|
||||
cmd = CMD_INPUT_0;
|
||||
break;
|
||||
case 1:
|
||||
cmd = CMD_INPUT_1;
|
||||
break;
|
||||
case 2:
|
||||
cmd = CMD_INPUT_2;
|
||||
break;
|
||||
case 3:
|
||||
cmd = CMD_INPUT_3;
|
||||
break;
|
||||
case 4:
|
||||
cmd = CMD_INPUT_4;
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT);
|
||||
if (ret != I2C_STATUS_SUCCESS) {
|
||||
print("pca9505_readPins::FAILED\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
// Copyright 2022 nirim000
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* Port ID
|
||||
*/
|
||||
typedef enum {
|
||||
PCA9505_PORT0,
|
||||
PCA9505_PORT1,
|
||||
PCA9505_PORT2,
|
||||
PCA9505_PORT3,
|
||||
PCA9505_PORT4,
|
||||
} pca9505_port_t;
|
||||
|
||||
/**
|
||||
* Helpers for set_config
|
||||
*/
|
||||
enum {
|
||||
ALL_NORMAL = 0,
|
||||
ALL_INVERTED = 0xFF,
|
||||
};
|
||||
|
||||
/**
|
||||
* Helpers for set_config
|
||||
*/
|
||||
enum {
|
||||
ALL_OUTPUT = 0,
|
||||
ALL_INPUT = 0xFF,
|
||||
};
|
||||
|
||||
/**
|
||||
* Helpers for set_output
|
||||
*/
|
||||
enum {
|
||||
ALL_LOW = 0,
|
||||
ALL_HIGH = 0xFF,
|
||||
};
|
||||
|
||||
/**
|
||||
* Init expander and any other dependent drivers
|
||||
*/
|
||||
void pca9505_init(uint8_t slave_addr);
|
||||
|
||||
/**
|
||||
* Configure input/output to a given port
|
||||
*/
|
||||
bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
|
||||
|
||||
/**
|
||||
* Configure polarity to a given port
|
||||
*/
|
||||
bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
|
||||
|
||||
/**
|
||||
* Write high/low to a given port
|
||||
*/
|
||||
bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
|
||||
|
||||
/**
|
||||
* Read state of a given port
|
||||
*/
|
||||
bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* ret);
|
||||
@@ -18,10 +18,10 @@
|
||||
|
||||
#undef MATRIX_COL_PINS
|
||||
#define MATRIX_COL_PINS \
|
||||
{ B0, B1, B10, B3, B4, B5 }
|
||||
{ B0, B1, B12, B3, B4, B5 }
|
||||
#undef MATRIX_COL_PINS_RIGHT
|
||||
#define MATRIX_COL_PINS_RIGHT \
|
||||
{ B0, B1, B10, B3, B4, B5 }
|
||||
{ B0, B1, B12, B3, B4, B5 }
|
||||
|
||||
#undef MATRIX_ROW_PINS
|
||||
#define MATRIX_ROW_PINS \
|
||||
@@ -30,8 +30,12 @@
|
||||
#define MATRIX_ROW_PINS_RIGHT \
|
||||
{ B15, A2, B8, A8, B9 }
|
||||
|
||||
#define UNUSED_PINS { B6, C14, C15 }
|
||||
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
#define SPLIT_HAND_PIN A3
|
||||
#undef MASTER_RIGHT
|
||||
// #define USB_VBUS_PIN B10
|
||||
|
||||
#undef RGB_DI_PIN
|
||||
#define RGB_DI_PIN A1
|
||||
@@ -46,6 +50,13 @@
|
||||
|
||||
#define DEBUG_LED_PIN C13
|
||||
|
||||
#define AUDIO_PIN B7
|
||||
#define AUDIO_PWM_DRIVER PWMD4
|
||||
#define AUDIO_PWM_CHANNEL 2
|
||||
#define AUDIO_PWM_PAL_MODE 2
|
||||
#define AUDIO_STATE_TIMER GPTD3
|
||||
#define AUDIO_INIT_DELAY
|
||||
|
||||
#undef SOFT_SERIAL_PIN
|
||||
// #define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
|
||||
#define SERIAL_USART_TX_PIN A9
|
||||
@@ -77,9 +88,12 @@
|
||||
#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 64
|
||||
|
||||
#undef PMW3360_CS_PIN
|
||||
#define PMW3360_CS_PIN B14
|
||||
#define PMW3360_CS_PIN A15 // b14
|
||||
#define PMW3360_CS_MODE 3
|
||||
#define PMW3360_CS_DIVISOR 64
|
||||
#define PMW3360_LIFTOFF_DISTANCE 0b1111
|
||||
#undef ROTATIONAL_TRANSFORM_ANGLE
|
||||
#define ROTATIONAL_TRANSFORM_ANGLE -65
|
||||
|
||||
#define CHARYBDIS_MINIMUM_DEFAULT_DPI 1200
|
||||
#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 400
|
||||
@@ -90,3 +104,5 @@
|
||||
|
||||
#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
|
||||
|
||||
#define CHARYBDIS_CONFIG_SYNC
|
||||
|
||||
@@ -16,11 +16,12 @@
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
#define HAL_USE_PAL TRUE
|
||||
#define HAL_USE_GPT TRUE
|
||||
#define HAL_USE_SERIAL TRUE
|
||||
// #define HAL_USE_I2C TRUE
|
||||
#define HAL_USE_SPI TRUE
|
||||
#define SPI_USE_WAIT TRUE
|
||||
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
|
||||
// #define HAL_USE_GPT TRUE
|
||||
|
||||
#include_next <halconf.h>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, UC_CLUE, \
|
||||
SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \
|
||||
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
|
||||
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
|
||||
KC_GRV, OS_LALT, OS_LGUI, TT(_MOUSE), KC_ENT, \
|
||||
OS_LSFT,CTL_T(K21),ALT_T(K22),GUI_T(K23),K24,K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
|
||||
SFT_T(KC_GRV), UC_IRNY, OS_LGUI, TT(_MOUSE), KC_ENT, \
|
||||
KC_SPC, BK_LWER, DL_RAIS \
|
||||
)
|
||||
|
||||
@@ -58,38 +58,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
||||
),
|
||||
|
||||
|
||||
|
||||
[_MOUSE] = LAYOUT_charybdis_4x6(
|
||||
_______, _______, _______, _______, _______, _______, DRGSCRL, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, SNP_TOG,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
),
|
||||
[_GAMEPAD] = LAYOUT_charybdis_4x6(
|
||||
KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______,
|
||||
KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,
|
||||
KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, _______, _______, _______, _______, _______,
|
||||
KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_H, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
KC_V, _______, _______, _______, TG_GAME,
|
||||
KC_SPC, KC_H, _______
|
||||
),
|
||||
[_DIABLO] = LAYOUT_charybdis_4x6(
|
||||
KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
|
||||
KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, _______, _______, _______, _______, _______, _______,
|
||||
KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, _______, _______, _______, _______, _______, _______,
|
||||
KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
KC_G, _______, _______, TO(_DIABLOII), TG_DBLO,
|
||||
KC_LSFT, KC_LCTL, _______
|
||||
),
|
||||
[_DIABLOII] = LAYOUT_charybdis_4x6(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_GRV, _______, _______, _______, _______, _______, _______,
|
||||
KC_TAB, KC_A, KC_T, KC_Q, KC_I, KC_M, _______, _______, _______, _______, _______, _______,
|
||||
KC_S, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, _______, _______,
|
||||
KC_LCTL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
KC_DIABLO_CLEAR, _______, _______, _______, TG(_DIABLOII),
|
||||
SFT_T(KC_SPACE), ALT_T(KC_Q), _______
|
||||
),
|
||||
[_MOUSE] = LAYOUT_charybdis_4x6(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_U, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, DRGSCRL, _______,
|
||||
_______, SNIPING, SNIPING, _______, _______,
|
||||
_______, _______, _______
|
||||
),
|
||||
|
||||
@@ -112,18 +110,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
|
||||
[_ADJUST] = LAYOUT_charybdis_4x6_wrapper(
|
||||
QK_MAKE, KC_WIDE,KC_AUSSIE,KC_SCRIPT,KC_ZALGO,KC_NOMODE, KC_NOMODE,KC_BLOCKS,KC_REGIONAL,_______,_______, QK_BOOT,
|
||||
QK_MAKE, KC_WIDE,KC_AUSSIE,KC_SCRIPT,KC_ZALGO,KC_SUPER, KC_NOMODE,KC_BLOCKS,KC_REGIONAL,TG_GAME,TG_DBLO, QK_BOOT,
|
||||
VRSN, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, EE_CLR,
|
||||
KEYLOCK, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, TG_MODS,
|
||||
UC_MOD, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
|
||||
QK_RBT, AUTO_CTN, _______, KC_NUKE, _______,
|
||||
QK_RBT, AUTO_CTN, _______, _______, KC_NUKE,
|
||||
_______, _______, _______
|
||||
)
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
||||
void matrix_init_keyemap(void) { setPinInputHigh(A0); }
|
||||
void matrix_init_keymap(void) {
|
||||
setPinInputHigh(A0);
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
g_led_config.flags[53] = g_led_config.flags[54] = g_led_config.flags[55] =
|
||||
g_led_config.flags[0] = g_led_config.flags[1] = g_led_config.flags[2] = g_led_config.flags[3] =
|
||||
g_led_config.flags[29] = g_led_config.flags[30] = g_led_config.flags[31] = g_led_config.flags[32] =
|
||||
LED_FLAG_MODIFIER;
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_keymap(void) {
|
||||
if (!readPin(A0)) {
|
||||
@@ -144,3 +150,25 @@ void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
|
||||
__asm__ volatile("nop" ::: "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Left hand, matrix positions */
|
||||
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
|
||||
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
|
||||
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
|
||||
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
|
||||
{{2, 9}, {4, 9}, {5, 9}, {1, 9}, {0, 9}, {3, 9}},
|
||||
/* Right hand, matrix positions */
|
||||
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
|
||||
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
|
||||
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
|
||||
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
|
||||
{{0, 4}, {3, 4}, {2, 4}, {5, 4}, {4, 4}, {2, 4}},
|
||||
};
|
||||
|
||||
# ifdef ENCODER_MAP_ENABLE
|
||||
const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -17,19 +17,18 @@
|
||||
#pragma once
|
||||
|
||||
#include_next "mcuconf.h"
|
||||
#undef STM32_I2C_USE_I2C1
|
||||
#define STM32_I2C_USE_I2C1 TRUE
|
||||
|
||||
// #undef STM32_I2C_I2C1_RX_DMA_STREAM
|
||||
// #define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
|
||||
#undef STM32_I2C_I2C1_TX_DMA_STREAM
|
||||
#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
|
||||
#undef STM32_PWM_USE_ADVANCED
|
||||
#define STM32_PWM_USE_ADVANCED TRUE
|
||||
|
||||
#undef STM32_PWM_USE_TIM1
|
||||
#define STM32_PWM_USE_TIM1 TRUE
|
||||
|
||||
#undef STM32_PWM_USE_TIM2
|
||||
#define STM32_PWM_USE_TIM2 TRUE
|
||||
|
||||
#undef STM32_PWM_USE_TIM3
|
||||
#define STM32_PWM_USE_TIM3 TRUE
|
||||
#undef STM32_PWM_USE_TIM4
|
||||
#define STM32_PWM_USE_TIM4 TRUE
|
||||
|
||||
#undef STM32_SPI_USE_SPI1
|
||||
#define STM32_SPI_USE_SPI1 TRUE
|
||||
@@ -37,8 +36,8 @@
|
||||
#undef STM32_SERIAL_USE_USART1
|
||||
#define STM32_SERIAL_USE_USART1 TRUE
|
||||
|
||||
#undef STM32_GPT_USE_TIM4
|
||||
#define STM32_GPT_USE_TIM4 TRUE
|
||||
#undef STM32_GPT_USE_TIM3
|
||||
#define STM32_GPT_USE_TIM3 TRUE
|
||||
|
||||
#undef STM32_ST_USE_TIMER
|
||||
#define STM32_ST_USE_TIMER 5
|
||||
|
||||
@@ -1,24 +1,33 @@
|
||||
# MCU name
|
||||
MCU = STM32F411
|
||||
BOARD = BLACKPILL_STM32_F411
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32-dfu
|
||||
# BOOTLOADER := tinyuf2
|
||||
BOOTLOADER := tinyuf2
|
||||
|
||||
LTO_ENABLE := no
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = yes # Audio output
|
||||
AUDIO_SUPPORTED = yes # is set to no in kb, needs to be forcibly enabled
|
||||
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
KEYBOARD_SHARED_EP = yes
|
||||
MOUSE_SHARED_EP = yes
|
||||
KEYBOARD_SHARED_EP = yes
|
||||
MOUSE_SHARED_EP = yes
|
||||
|
||||
EEPROM_DRIVER = spi
|
||||
WS2812_DRIVER = pwm
|
||||
SERIAL_DRIVER = usart
|
||||
|
||||
MOUSEKEY_ENABLE = yes
|
||||
NKRO_ENABLE = yes
|
||||
CONSOLE_ENABLE = yes
|
||||
EEPROM_DRIVER = spi
|
||||
WS2812_DRIVER = pwm
|
||||
SERIAL_DRIVER = usart
|
||||
AUDIO_DRIVER = pwm_hardware
|
||||
BACKLIGHT_DRIVER = pwm
|
||||
|
||||
AUTOCORRECTION_ENABLE = yes
|
||||
|
||||
DEBOUNCE_TYPE = asym_eager_defer_pk
|
||||
CAPS_WORD_ENABLE = yes
|
||||
SWAP_HANDS_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
DEBOUNCE_TYPE = asym_eager_defer_pk
|
||||
WPM_ENABLE = yes
|
||||
LTO_ENABLE = no
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
Copyright 2022 Andrew Kannan <andrew@cannonkeys.com>
|
||||
|
||||
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
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xCA04
|
||||
#define PRODUCT_ID 0x000F
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER CannonKeys
|
||||
#define PRODUCT Gentoo
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
#define MATRIX_COL_PINS { C13, C15, B13, B12, B11, B10, B2, B1, B0, A7, A6, A5, A4, A3, A2 }
|
||||
#define MATRIX_ROW_PINS { C14, A1, B14, B15, A8 }
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define LED_CAPS_LOCK_PIN B3
|
||||
#define LED_PIN_ON_STATE 0
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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 "gentoo.h"
|
||||
@@ -0,0 +1,35 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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 ____ KC_NO
|
||||
|
||||
#define LAYOUT_all( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, K014, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
|
||||
K400, K401, K402, K406, K409, K410, K411, K412, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
|
||||
{ K400, K401, K402, ____, ____, ____, K406, ____, ____, K409, K410, K411, K412, K413, K414 } \
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"keyboard_name": "Gentoo",
|
||||
"url": "https://cannonkeys.com",
|
||||
"maintainer": "awkannan",
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Bkspc", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Del", "x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":15.5, "y":3}, {"label":"Up", "x":14.25, "y":3.25}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}]
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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
|
||||
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BASE] = 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_END,
|
||||
MO(1), 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_BSLS, 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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_FN] = LAYOUT_all(
|
||||
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||
_______, _______, _______, KC_PGUP, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
||||
)
|
||||
|
||||
};
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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
|
||||
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BASE] = 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_END,
|
||||
MO(1), 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_BSLS, 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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_all(
|
||||
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||
_______, _______, _______, KC_PGUP, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
};
|
||||
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# Gentoo
|
||||
|
||||
Gentoo Keyboard
|
||||
|
||||
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
|
||||
* Hardware Supported: STM32F072CBT6
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cannonkeys/gentoo: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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Physical reset button**: Toggle the switch on the back of the pcb to "0" and briefly press the button on the back of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
@@ -0,0 +1,24 @@
|
||||
# MCU name
|
||||
MCU = STM32F072
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32-dfu
|
||||
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
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
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
# Enter lower-power sleep mode when on the ChibiOS idle thread
|
||||
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2015 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xCA04
|
||||
#define PRODUCT_ID 0x0010
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER CannonKeys
|
||||
#define PRODUCT Gentoo HS
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
#define MATRIX_COL_PINS { A8, C13, B9, B8, B7, B6, B5, B4, B3, A7, A5, A4, A3, A2, A1 }
|
||||
#define MATRIX_ROW_PINS { A14, A15, A0, B1, B0 }
|
||||
#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
|
||||
|
||||
#define LED_CAPS_LOCK_PIN B14
|
||||
#define LED_PIN_ON_STATE 0
|
||||
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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 "gentoo_hs.h"
|
||||
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2022 Andrew Kannan
|
||||
*
|
||||
* 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 ____ KC_NO
|
||||
|
||||
#define LAYOUT_default( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
|
||||
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
|
||||
K400, K401, K402, K406, K410, K411, K412, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, ____, K213, K214 }, \
|
||||
{ K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
|
||||
{ K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413, K414 } \
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"keyboard_name": "Gentoo Hotswap",
|
||||
"url": "https://cannonkeys.com",
|
||||
"maintainer": "awkannan",
|
||||
"layouts": {
|
||||
"LAYOUT_default": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Del", "x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":15.5, "y":3}, {"label":"Up", "x":14.25, "y":3.25}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":4, "w":1.5}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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
|
||||
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BASE] = LAYOUT_default(
|
||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_default(
|
||||
KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_TOG,
|
||||
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
|
||||
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
BL_INC, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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
|
||||
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN1,
|
||||
_FN2,
|
||||
_FN3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BASE] = LAYOUT_default(
|
||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[_FN1] = LAYOUT_default(
|
||||
KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_TOG,
|
||||
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD,
|
||||
BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
BL_INC, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[_FN2] = LAYOUT_default(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[_FN3] = LAYOUT_default(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,20 @@
|
||||
# Gentoo65 Hotswap
|
||||
|
||||
Gentoo65 Hotswap Keyboard
|
||||
|
||||
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
|
||||
* Hardware Supported: STM32F072CBT6
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cannonkeys/gentoo_hs: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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Physical reset button**: Toggle the switch on the back of the pcb to "0" and briefly press the button on the back of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
@@ -0,0 +1,24 @@
|
||||
# MCU name
|
||||
MCU = STM32F072
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32-dfu
|
||||
|
||||
# Wildcard to allow APM32 MCU
|
||||
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
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
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
# Enter lower-power sleep mode when on the ChibiOS idle thread
|
||||
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
|
||||
@@ -0,0 +1,98 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 0xD010
|
||||
#define PRODUCT_ID 0x1601
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER DOIO
|
||||
#define PRODUCT KB16-01
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 7
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { D5, D4, D3, D2 }
|
||||
#define MATRIX_COL_PINS { F5, F4, F1, F0, B7, B4, B5 }
|
||||
|
||||
#define BOOTMAGIC_LITE_ROW 0
|
||||
#define BOOTMAGIC_LITE_COLUMN 0
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Forcing to use NKRO instead 6KRO */
|
||||
#define FORCE_NKRO
|
||||
|
||||
/* Larger keys per scan */
|
||||
#define QMK_KEYS_PER_SCAN 12
|
||||
|
||||
/* Use the custom font */
|
||||
#define OLED_FONT_H "lib/glcdfont.c"
|
||||
|
||||
/* Encoder pins */
|
||||
#define ENCODERS_PAD_A { F7, C7, D7 }
|
||||
#define ENCODERS_PAD_B { E6, C6, D6 }
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
/* RGB Matrix config */
|
||||
#define RGB_DI_PIN F6
|
||||
#define DRIVER_LED_TOTAL 16
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
|
||||
#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
|
||||
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_UP_DOWN
|
||||
#define RGB_MATRIX_KEYPRESSES
|
||||
|
||||
/* RGB Matrix effect */
|
||||
#define ENABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
#define ENABLE_RGB_MATRIX_BREATHING
|
||||
#define ENABLE_RGB_MATRIX_BAND_SAT
|
||||
#define ENABLE_RGB_MATRIX_BAND_VAL
|
||||
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_ALL
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||
#define ENABLE_RGB_MATRIX_DUAL_BEACON
|
||||
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
#define ENABLE_RGB_MATRIX_RAINDROPS
|
||||
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
#define ENABLE_RGB_MATRIX_HUE_BREATHING
|
||||
#define ENABLE_RGB_MATRIX_HUE_PENDULUM
|
||||
#define ENABLE_RGB_MATRIX_HUE_WAVE
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_FLOW
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
|
||||
#define ENABLE_RGB_MATRIX_MULTISPLASH
|
||||
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
|
||||
#endif
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"keyboard_name": "KB16-01",
|
||||
"url": "",
|
||||
"maintainer": "HorrorTroll",
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"1!", "x":0, "y":0},
|
||||
{"label":"2@", "x":1, "y":0},
|
||||
{"label":"3#", "x":2, "y":0},
|
||||
{"label":"4$", "x":3, "y":0},
|
||||
{"label":"Encoder 1 CCW", "x":4.25, "y":0, "w":0.5},
|
||||
{"label":"Encoder 1", "x":4.75, "y":0},
|
||||
{"label":"Encoder 1 CW", "x":5.75, "y":0, "w":0.5},
|
||||
{"label":"Encoder 2 CCW", "x":6.25, "y":0, "w":0.5},
|
||||
{"label":"Encoder 2", "x":6.75, "y":0},
|
||||
{"label":"Encoder 2 CW", "x":7.75, "y":0, "w":0.5},
|
||||
|
||||
{"label":"5%", "x":0, "y":1},
|
||||
{"label":"6^", "x":1, "y":1},
|
||||
{"label":"7&", "x":2, "y":1},
|
||||
{"label":"8*", "x":3, "y":1},
|
||||
|
||||
{"label":"9(", "x":0, "y":2},
|
||||
{"label":"0)", "x":1, "y":2},
|
||||
{"label":"\u2191", "x":2, "y":2},
|
||||
{"label":"Enter", "x":3, "y":2},
|
||||
|
||||
{"label":"Encoder 3 CCW", "x":5.25, "y":2.5, "w":0.5},
|
||||
{"label":"Encoder 3", "x":5.75, "y":2.5},
|
||||
{"label":"Encoder 3 CW", "x":6.75, "y":2.5, "w":0.5},
|
||||
|
||||
{"label":"Fn", "x":0, "y":3},
|
||||
{"label":"\u2190", "x":1, "y":3},
|
||||
{"label":"\u2193", "x":2, "y":3},
|
||||
{"label":"\u2192", "x":3, "y":3}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 "kb16.h"
|
||||
|
||||
// OLED animation
|
||||
#include "lib/logo.h"
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
led_config_t g_led_config = { {
|
||||
{ 0, 1, 2, 3, NO_LED, NO_LED, NO_LED },
|
||||
{ 4, 5, 6, 7, NO_LED, NO_LED, NO_LED },
|
||||
{ 8, 9, 10, 11, NO_LED, NO_LED, NO_LED },
|
||||
{ 12, 13, 14, 15, NO_LED, NO_LED, NO_LED }
|
||||
}, {
|
||||
{0 , 0}, {75 , 0}, {149, 0}, {224, 0},
|
||||
{0 , 21}, {75 , 21}, {149, 21}, {224, 21},
|
||||
{0 , 43}, {75 , 43}, {149, 43}, {224, 43},
|
||||
{0 , 64}, {75 , 64}, {149, 64}, {224, 64},
|
||||
}, {
|
||||
1, 1, 1, 1,
|
||||
1, 4, 4, 1,
|
||||
1, 4, 4, 1,
|
||||
1, 1, 1, 1,
|
||||
} };
|
||||
#endif
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
uint16_t startup_timer;
|
||||
|
||||
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
|
||||
startup_timer = timer_read();
|
||||
|
||||
return rotation;
|
||||
}
|
||||
|
||||
bool oled_task_kb(void) {
|
||||
static bool finished_logo = false;
|
||||
|
||||
if ((timer_elapsed(startup_timer) < 5000) && !finished_logo) {
|
||||
render_logo();
|
||||
} else {
|
||||
finished_logo = true;
|
||||
|
||||
if (!oled_task_user()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 XXX KC_NO
|
||||
|
||||
/* 06 ◯ 05 16 ◯ 15
|
||||
* ┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
* │00 │01 │02 │03 │ │04 │ │14 │
|
||||
* ├───┼───┼───┼───┤ └───┘ └───┘
|
||||
* │10 │11 │12 │13 │
|
||||
* ├───┼───┼───┼───┤ 26 ◯ 25
|
||||
* │20 │21 │22 │23 │ ┌───┐
|
||||
* ├───┼───┼───┼───┤ │24 │
|
||||
* │30 │31 │32 │33 │ └───┘
|
||||
* └───┴───┴───┴───┘
|
||||
*/
|
||||
|
||||
#define LAYOUT( \
|
||||
K00, K01, K02, K03, K06, K04, K05, \
|
||||
K10, K11, K12, K13, K16, K14, K15, \
|
||||
K20, K21, K22, K23, K26, K24, K25, \
|
||||
K30, K31, K32, K33 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26 }, \
|
||||
{ K30, K31, K32, K33, XXX, XXX, XXX } \
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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
|
||||
|
||||
/* Additional thing to reduce compiled size */
|
||||
#define NO_ACTION_ONESHOT
|
||||
#define LAYER_STATE_8BIT
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
/* RGB Matrix config */
|
||||
#undef RGB_MATRIX_KEYPRESSES
|
||||
|
||||
/* RGB Matrix effect */
|
||||
#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
#undef ENABLE_RGB_MATRIX_BREATHING
|
||||
#undef ENABLE_RGB_MATRIX_BAND_SAT
|
||||
#undef ENABLE_RGB_MATRIX_BAND_VAL
|
||||
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||
#undef ENABLE_RGB_MATRIX_DUAL_BEACON
|
||||
#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
#undef ENABLE_RGB_MATRIX_RAINDROPS
|
||||
#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
|
||||
#undef ENABLE_RGB_MATRIX_HUE_WAVE
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
#endif
|
||||
@@ -0,0 +1,180 @@
|
||||
/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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
|
||||
|
||||
// OLED animation
|
||||
#include "oled/bongocat.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN,
|
||||
_FN1,
|
||||
_FN2
|
||||
};
|
||||
|
||||
// enum layer_keycodes { };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ 1 │ 2 │ 3 │ 4 │ │Ply│ │TO1│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ 5 │ 6 │ 7 │ 8 │
|
||||
├───┼───┼───┼───┤
|
||||
│ 9 │ 0 │ ↑ │Ent│ ┌───┐
|
||||
├───┼───┼───┼───┤ │Mut│
|
||||
│Fn2│ ← │ ↓ │ → │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ ! │ @ │ # │ $ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ % │ ^ │ & │ * │
|
||||
├───┼───┼───┼───┤
|
||||
│ ( │ ) │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_BASE] = LAYOUT(
|
||||
KC_1, KC_2, KC_3, KC_4, KC_MPRV, KC_MPLY, KC_MNXT,
|
||||
KC_5, KC_6, KC_7, KC_8, KC_PGDN, TO(_FN), KC_PGUP,
|
||||
KC_9, KC_0, KC_UP, KC_ENT, KC_VOLD, KC_MUTE, KC_VOLU,
|
||||
MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN1), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN2), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│Spi│Spd│ │ │ │ │ │TO0│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│Sai│Sad│ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│Tog│Mod│Hui│ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │Vai│Hud│Vad│ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN2] = LAYOUT(
|
||||
RGB_SPI, RGB_SPD, _______, QK_BOOT, _______, _______, _______,
|
||||
RGB_SAI, RGB_SAD, _______, _______, _______, TO(_BASE), _______,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, _______, _______, _______, _______,
|
||||
_______, RGB_VAI, RGB_HUD, RGB_VAD
|
||||
),
|
||||
};
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
bool oled_task_user(void) {
|
||||
led_t led_usb_state = host_keyboard_led_state();
|
||||
|
||||
render_bongocat();
|
||||
oled_set_cursor(14, 0); // sets cursor to (column, row) using charactar spacing (4 rows on 128x32 screen, anything more will overflow back to the top)
|
||||
oled_write_P(PSTR("WPM:"), false);
|
||||
oled_write(get_u8_str(get_current_wpm(), '0'), false); // writes wpm on top right corner of string
|
||||
oled_set_cursor(17, 2);
|
||||
oled_write_P(led_usb_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
|
||||
oled_set_cursor(17, 3);
|
||||
oled_write_P(led_usb_state.scroll_lock ? PSTR("SCRL") : PSTR(" "), false);
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
|
||||
#define ENCODERS 3
|
||||
static uint8_t encoder_state[ENCODERS] = {0};
|
||||
static keypos_t encoder_cw[ENCODERS] = {{ 5, 0 }, { 5, 1 }, { 5, 2 }};
|
||||
static keypos_t encoder_ccw[ENCODERS] = {{ 6, 0 }, { 6, 1 }, { 6, 2 }};
|
||||
|
||||
void encoder_action_unregister(void) {
|
||||
for (int index = 0; index < ENCODERS; ++index) {
|
||||
if (encoder_state[index]) {
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = false,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = 0;
|
||||
action_exec(encoder_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void encoder_action_register(uint8_t index, bool clockwise) {
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = clockwise ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = true,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
|
||||
action_exec(encoder_event);
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
encoder_action_unregister();
|
||||
}
|
||||
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
encoder_action_register(index, clockwise);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,378 @@
|
||||
/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 "quantum.h"
|
||||
|
||||
// WPM-responsive animation stuff here
|
||||
#define IDLE_FRAMES 5
|
||||
#define IDLE_SPEED 10 // below this wpm value your animation will idle
|
||||
// #define PREP_FRAMES 1 // uncomment if >1
|
||||
#define TAP_FRAMES 2
|
||||
#define ANIM_WPM_LOWER 20 // above this wpm value typing animation to trigger
|
||||
#define ANIM_FRAME_DURATION_MAX 450 // longest animation duration in ms
|
||||
#define ANIM_FRAME_DURATION_MIN 100 // shortest animation duration in ms
|
||||
#define IDLE_FRAME_DURATION 300 // how long each frame lasts in ms
|
||||
#define ANIM_FRAME_RATIO 2.5 // how aggressively animation speeds up with wpm
|
||||
// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
|
||||
#define ANIM_SIZE 525 // number of bytes in array, minimize for adequate firmware size, max is 1024
|
||||
#define MAX(x, y) (((x) > (y)) ? (x) : (y)) // Math.max macro
|
||||
|
||||
uint32_t curr_anim_duration = 0; // variable animation duration
|
||||
uint32_t bongo_timer = 0;
|
||||
uint32_t bongo_sleep = 0;
|
||||
uint8_t current_idle_frame = 0;
|
||||
// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1
|
||||
uint8_t current_tap_frame = 0;
|
||||
|
||||
// Code containing pixel art, contains:
|
||||
// 5 idle frames, 1 prep frame, and 2 tap frames
|
||||
|
||||
// To make your own pixel art:
|
||||
// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw )
|
||||
// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display-
|
||||
// replace numbers in brackets with your own
|
||||
// if you start getting errors when compiling make sure you didn't accedentally delete a bracket
|
||||
void render_bongocat(void) {
|
||||
static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
|
||||
{
|
||||
//Idle 1 - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
|
||||
0xf8, 0xfc, 0xfe, 0xff, 0xfe, 0xfc, 0xf8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x80,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0xc0, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Idle 2 - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe0, 0xf0,
|
||||
0xf8, 0xfc, 0xfe, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0xff,
|
||||
0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1e, 0x1e, 0x3f, 0x3d, 0x3d, 0x3e, 0x7f, 0x7f, 0x7f, 0x7f, 0xf9, 0xf9, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xc0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Idle 3 - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe0,
|
||||
0xf0, 0xf8, 0xfc, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0xff,
|
||||
0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1e, 0x1e, 0x3f, 0x3d, 0x3d, 0x3e, 0x7f, 0x7f, 0x7f, 0x7f, 0xf9, 0xf9, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xc0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Idle 4 - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe0,
|
||||
0xf0, 0xf8, 0xfc, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0xc0, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0x3c, 0x1c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Idle 5 - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
|
||||
0xf8, 0xfc, 0xfe, 0xff, 0xfe, 0xfc, 0xf8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x80,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0xc0, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x06, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
}
|
||||
};
|
||||
|
||||
static const char PROGMEM prep[][ANIM_SIZE] = {
|
||||
{
|
||||
//Prepare - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
|
||||
0xf0, 0xf8, 0xfc, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0xf0, 0xf8,
|
||||
0xdc, 0x36, 0x3e, 0xee, 0xfc, 0xe0, 0x9c, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x7e, 0xbe, 0xbc, 0xbc, 0x7c, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x44, 0xc4, 0xc4, 0x68, 0x78,
|
||||
0x59, 0x89, 0x91, 0x91, 0xd3, 0xf3, 0xa3, 0x23, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0x81,
|
||||
0xfa, 0xff, 0xe6, 0xe7, 0xfd, 0xff, 0xfc, 0xf3, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x13, 0x12, 0x3c,
|
||||
0x2c, 0x26, 0x27, 0x45, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x34, 0x3c, 0x2c, 0x44, 0xc8, 0xc8,
|
||||
0xe9, 0xb9, 0x11, 0x11, 0x13, 0x93, 0xe3, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
}
|
||||
};
|
||||
|
||||
static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
|
||||
{
|
||||
//Tap left - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
|
||||
0xf0, 0xf8, 0xfc, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0xf0, 0xf8,
|
||||
0xdc, 0x36, 0x3e, 0xee, 0xfc, 0xe0, 0x9c, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x30, 0x38, 0x2c, 0x44, 0xc4, 0xc4, 0x68, 0x78,
|
||||
0x59, 0x89, 0x91, 0x91, 0xd3, 0xf3, 0xa3, 0x23, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x3f, 0x1f, 0x07, 0x83, 0xc0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x13, 0x12, 0x3c,
|
||||
0x2c, 0x26, 0x27, 0x45, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x24, 0x18, 0x3c, 0x7e, 0x7f, 0x7f,
|
||||
0x7f, 0xbf, 0x3f, 0x1f, 0x1f, 0x8f, 0xe7, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x11, 0x11, 0x21, 0x23, 0x23, 0x21, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Tap right - 128x32
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0x9c, 0xf8, 0xfc, 0xfe, 0x80, 0xe0, 0x20, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
|
||||
0xf0, 0xf8, 0xfc, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x38, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0x31, 0x00, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0xa0, 0xa0, 0x20, 0x20, 0x40, 0x46, 0x4f, 0x5f, 0x9f, 0x9c, 0x90, 0x80,
|
||||
0xc0, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff,
|
||||
0xff, 0xbf, 0x7f, 0x7f, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x7e, 0xbe, 0xbc, 0xbc, 0x7c, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x07, 0x0f, 0x8f, 0xc7, 0xe3, 0x31, 0x38, 0x2c, 0x04, 0x64, 0xf8, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0x8f, 0x27, 0x27, 0x27, 0xc7, 0xc7, 0x4f, 0x4f, 0x8f, 0x8f,
|
||||
0x9f, 0x9f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0xfc, 0xfc, 0xff, 0x81,
|
||||
0xfa, 0xff, 0xe6, 0xe7, 0xfd, 0xff, 0xfc, 0xf3, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x18, 0x08, 0x08, 0x08, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xc0, 0x86, 0x87, 0x85, 0xc4, 0x49, 0x69, 0x3e, 0x0e, 0x13, 0x11, 0x12, 0x12, 0x3d,
|
||||
0x2d, 0x25, 0x26, 0x44, 0x68, 0x78, 0x58, 0x9d, 0x97, 0x93, 0xe3, 0x62, 0x34, 0x3c, 0x2c, 0x26,
|
||||
0xc7, 0xc5, 0x69, 0x39, 0x19, 0x1d, 0x36, 0xa2, 0xe2, 0x62, 0x34, 0x3c, 0x2c, 0x44, 0xc8, 0xc8,
|
||||
0xe9, 0xb9, 0x11, 0x11, 0x13, 0x93, 0xe3, 0x63, 0x27, 0x27, 0x47, 0x47, 0xcf, 0xcf, 0x0f, 0x08,
|
||||
0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
};
|
||||
|
||||
// assumes 1 frame prep stage
|
||||
void animation_phase(void) {
|
||||
if (get_current_wpm() <= IDLE_SPEED) {
|
||||
current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
|
||||
oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
|
||||
}
|
||||
|
||||
if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < ANIM_WPM_LOWER) {
|
||||
// oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1
|
||||
oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1
|
||||
}
|
||||
|
||||
if (get_current_wpm() >= ANIM_WPM_LOWER) {
|
||||
current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
|
||||
oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
// variable animation duration. Don't want this value to get near zero as it'll bug out.
|
||||
curr_anim_duration = MAX(ANIM_FRAME_DURATION_MIN, ANIM_FRAME_DURATION_MAX - ANIM_FRAME_RATIO * get_current_wpm());
|
||||
|
||||
if (get_current_wpm() > ANIM_WPM_LOWER) {
|
||||
oled_on(); // not essential but turns on animation OLED with any alpha keypress
|
||||
|
||||
if (timer_elapsed32(bongo_timer) > curr_anim_duration) {
|
||||
bongo_timer = timer_read32();
|
||||
animation_phase();
|
||||
}
|
||||
|
||||
bongo_sleep = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(bongo_sleep) > OLED_TIMEOUT) {
|
||||
oled_off();
|
||||
} else {
|
||||
if (timer_elapsed32(bongo_timer) > IDLE_FRAME_DURATION) {
|
||||
bongo_timer = timer_read32();
|
||||
animation_phase();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
/* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
void render_bongocat(void);
|
||||
@@ -0,0 +1,9 @@
|
||||
SRC += oled/bongocat.c
|
||||
|
||||
VIA_ENABLE = yes
|
||||
|
||||
# Additional thing to reduce compiled size
|
||||
GRAVE_ESC_ENABLE = no
|
||||
|
||||
# OLED enabled
|
||||
WPM_ENABLE = yes
|
||||
@@ -0,0 +1,140 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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
|
||||
|
||||
// OLED animation
|
||||
#include "lib/layer_status/layer_status.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN,
|
||||
_FN1,
|
||||
_FN2
|
||||
};
|
||||
|
||||
// enum layer_keycodes { };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ 1 │ 2 │ 3 │ 4 │ │Ply│ │TO1│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ 5 │ 6 │ 7 │ 8 │
|
||||
├───┼───┼───┼───┤
|
||||
│ 9 │ 0 │ ↑ │Ent│ ┌───┐
|
||||
├───┼───┼───┼───┤ │Mut│
|
||||
│Fn2│ ← │ ↓ │ → │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ ! │ @ │ # │ $ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ % │ ^ │ & │ * │
|
||||
├───┼───┼───┼───┤
|
||||
│ ( │ ) │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_BASE] = LAYOUT(
|
||||
KC_1, KC_2, KC_3, KC_4, _______, KC_MPLY, _______,
|
||||
KC_5, KC_6, KC_7, KC_8, _______, TO(_FN), _______,
|
||||
KC_9, KC_0, KC_UP, KC_ENT, _______, KC_MUTE, _______,
|
||||
MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN1), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN2), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│Spi│Spd│ │ │ │ │ │TO0│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│Sai│Sad│ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│Tog│Mod│Hui│ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │Vai│Hud│Vad│ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN2] = LAYOUT(
|
||||
RGB_SPI, RGB_SPD, _______, QK_BOOT, _______, _______, _______,
|
||||
RGB_SAI, RGB_SAD, _______, _______, _______, TO(_BASE), _______,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, _______, _______, _______, _______,
|
||||
_______, RGB_VAI, RGB_HUD, RGB_VAD
|
||||
),
|
||||
};
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
bool oled_task_user(void) {
|
||||
render_layer_status();
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_BASE] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_FN] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
[_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
[_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,2 @@
|
||||
# Encoder enabled
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
@@ -0,0 +1,172 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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
|
||||
|
||||
// OLED animation
|
||||
#include "lib/layer_status/layer_status.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FN,
|
||||
_FN1,
|
||||
_FN2
|
||||
};
|
||||
|
||||
// enum layer_keycodes { };
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ 1 │ 2 │ 3 │ 4 │ │Ply│ │TO1│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ 5 │ 6 │ 7 │ 8 │
|
||||
├───┼───┼───┼───┤
|
||||
│ 9 │ 0 │ ↑ │Ent│ ┌───┐
|
||||
├───┼───┼───┼───┤ │Mut│
|
||||
│Fn2│ ← │ ↓ │ → │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ ! │ @ │ # │ $ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ % │ ^ │ & │ * │
|
||||
├───┼───┼───┼───┤
|
||||
│ ( │ ) │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_BASE] = LAYOUT(
|
||||
KC_1, KC_2, KC_3, KC_4, KC_MPRV, KC_MPLY, KC_MNXT,
|
||||
KC_5, KC_6, KC_7, KC_8, KC_PGDN, TO(_FN), KC_PGUP,
|
||||
KC_9, KC_0, KC_UP, KC_ENT, KC_VOLD, KC_MUTE, KC_VOLU,
|
||||
MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN1), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│ │ │ │ │ │ │ │ │
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│ │ │ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│ │ │ │ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │ │ │ │ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, TO(_FN2), _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
|
||||
/*
|
||||
┌───┬───┬───┬───┐ ┌───┐ ┌───┐
|
||||
│Spi│Spd│ │ │ │ │ │TO0│
|
||||
├───┼───┼───┼───┤ └───┘ └───┘
|
||||
│Sai│Sad│ │ │
|
||||
├───┼───┼───┼───┤
|
||||
│Tog│Mod│Hui│ │ ┌───┐
|
||||
├───┼───┼───┼───┤ │ │
|
||||
│ │Vai│Hud│Vad│ └───┘
|
||||
└───┴───┴───┴───┘
|
||||
*/
|
||||
/* Row: 0 1 2 3 4 5 6 */
|
||||
[_FN2] = LAYOUT(
|
||||
RGB_SPI, RGB_SPD, _______, QK_BOOT, _______, _______, _______,
|
||||
RGB_SAI, RGB_SAD, _______, _______, _______, TO(_BASE), _______,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, _______, _______, _______, _______,
|
||||
_______, RGB_VAI, RGB_HUD, RGB_VAD
|
||||
),
|
||||
};
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
bool oled_task_user(void) {
|
||||
render_layer_status();
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
|
||||
#define ENCODERS 3
|
||||
static uint8_t encoder_state[ENCODERS] = {0};
|
||||
static keypos_t encoder_cw[ENCODERS] = {{ 5, 0 }, { 5, 1 }, { 5, 2 }};
|
||||
static keypos_t encoder_ccw[ENCODERS] = {{ 6, 0 }, { 6, 1 }, { 6, 2 }};
|
||||
|
||||
void encoder_action_unregister(void) {
|
||||
for (int index = 0; index < ENCODERS; ++index) {
|
||||
if (encoder_state[index]) {
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = false,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = 0;
|
||||
action_exec(encoder_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void encoder_action_register(uint8_t index, bool clockwise) {
|
||||
keyevent_t encoder_event = (keyevent_t) {
|
||||
.key = clockwise ? encoder_cw[index] : encoder_ccw[index],
|
||||
.pressed = true,
|
||||
.time = (timer_read() | 1)
|
||||
};
|
||||
encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
|
||||
action_exec(encoder_event);
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
encoder_action_unregister();
|
||||
}
|
||||
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
encoder_action_register(index, clockwise);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
||||
@@ -0,0 +1,249 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
|
||||
// See gfxfont.h for newer custom bitmap font info.
|
||||
|
||||
#include "progmem.h"
|
||||
|
||||
// Standard ASCII 5x7 font
|
||||
const unsigned char font[] PROGMEM = {
|
||||
0x07, 0x08, 0x7F, 0x08, 0x07, 0x00,
|
||||
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
|
||||
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
|
||||
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
|
||||
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
|
||||
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
|
||||
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
|
||||
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
|
||||
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
|
||||
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
|
||||
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
|
||||
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
|
||||
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
|
||||
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
|
||||
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
|
||||
0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x00,
|
||||
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
|
||||
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
|
||||
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
|
||||
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
|
||||
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
|
||||
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
|
||||
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
|
||||
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
|
||||
0x08, 0x04, 0x3E, 0x04, 0x08, 0x00,
|
||||
0x08, 0x10, 0x3E, 0x10, 0x08, 0x00,
|
||||
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
|
||||
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
|
||||
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
|
||||
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
|
||||
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
|
||||
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
|
||||
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
|
||||
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
|
||||
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
|
||||
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
|
||||
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
|
||||
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
|
||||
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
|
||||
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
|
||||
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
|
||||
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
|
||||
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
|
||||
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
|
||||
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
|
||||
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
|
||||
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
|
||||
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
|
||||
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
|
||||
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
|
||||
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
|
||||
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
|
||||
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
|
||||
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
|
||||
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
|
||||
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
|
||||
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
|
||||
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
|
||||
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
|
||||
0x41, 0x22, 0x14, 0x08, 0x00, 0x00,
|
||||
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
|
||||
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
|
||||
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
|
||||
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
|
||||
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
|
||||
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
||||
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
|
||||
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
|
||||
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
|
||||
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
|
||||
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
|
||||
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
|
||||
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
|
||||
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
|
||||
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
|
||||
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
|
||||
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
|
||||
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
|
||||
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
|
||||
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
|
||||
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
|
||||
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
|
||||
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
|
||||
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
|
||||
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
|
||||
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
|
||||
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
|
||||
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
|
||||
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
|
||||
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
|
||||
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
|
||||
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
|
||||
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
|
||||
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
|
||||
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
|
||||
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
|
||||
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
|
||||
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
|
||||
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
|
||||
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
|
||||
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
|
||||
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
|
||||
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
|
||||
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
|
||||
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
|
||||
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
|
||||
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
|
||||
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
||||
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
|
||||
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
|
||||
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
|
||||
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
|
||||
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
|
||||
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
|
||||
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
|
||||
0x3C, 0x40, 0x38, 0x40, 0x3C, 0x00,
|
||||
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
|
||||
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
|
||||
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
|
||||
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
|
||||
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
|
||||
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
|
||||
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
|
||||
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
|
||||
0x10, 0x38, 0x10, 0x10, 0x1C, 0x00,
|
||||
0x0C, 0x7A, 0x41, 0x7A, 0x0C, 0x00,
|
||||
0x18, 0x2F, 0x41, 0x2F, 0x18, 0x00,
|
||||
0x22, 0x72, 0x22, 0x27, 0x22, 0x00,
|
||||
0x08, 0x1C, 0x08, 0x08, 0x08, 0x00,
|
||||
0x08, 0x08, 0x38, 0x20, 0x28, 0x28,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x2A, 0x2A, 0x2A, 0x00, 0x00,
|
||||
0x4E, 0x46, 0x4A, 0x50, 0x2F, 0x00,
|
||||
0x3E, 0x45, 0x55, 0x51, 0x3E, 0x00,
|
||||
0x48, 0x50, 0x7E, 0x50, 0x48, 0x00,
|
||||
0x3E, 0x49, 0x71, 0x49, 0x3E, 0x00,
|
||||
0x10, 0x22, 0x4F, 0x20, 0x10, 0x00,
|
||||
0x0E, 0x06, 0x0A, 0x10, 0x20, 0x00,
|
||||
0x20, 0x10, 0x0A, 0x06, 0x0E, 0x00,
|
||||
0x08, 0x08, 0x08, 0x1C, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
|
||||
0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
|
||||
0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
|
||||
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
|
||||
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
|
||||
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
|
||||
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
|
||||
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
|
||||
0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
|
||||
0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
|
||||
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
|
||||
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
|
||||
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
|
||||
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
|
||||
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
@@ -0,0 +1,167 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 "quantum.h"
|
||||
|
||||
#define ANIM_SIZE 525 // number of bytes in array, minimize for adequate firmware size, max is 1024
|
||||
|
||||
void render_layer_status(void) {
|
||||
static const char PROGMEM layer_status[][ANIM_SIZE] = {
|
||||
{
|
||||
//Layer 1
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf1, 0x01, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9e, 0x9e, 0x9e, 0x9e, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0xc6, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0x86, 0xf6, 0xfe, 0xfe, 0xfe, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xfe, 0xfe, 0x3e, 0x02, 0x00,
|
||||
0x00, 0x80, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x6f, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x61, 0x61, 0x61, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x79, 0x7f, 0x7f, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0f, 0x0f, 0x0f, 0x0d, 0x0c, 0x0c, 0x0c,
|
||||
0x4c, 0x7f, 0x7f, 0x7f, 0x7f, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Layer 2
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0e, 0xfe, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x61, 0x61, 0x61, 0x61, 0x79, 0x79, 0x79,
|
||||
0x79, 0x79, 0x39, 0x01, 0x01, 0x01, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0x86, 0xf6, 0xfe, 0xfe, 0xfe, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xfe, 0xfe, 0x3e, 0x02, 0x00,
|
||||
0x00, 0x80, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0x90, 0x9e, 0x9e, 0x9e, 0x9e,
|
||||
0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x79, 0x7f, 0x7f, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0f, 0x0f, 0x0f, 0x0d, 0x0c, 0x0c, 0x0c,
|
||||
0x4c, 0x7f, 0x7f, 0x7f, 0x7f, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Layer 3
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0e, 0xfe, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9e, 0x9e, 0x9e, 0x9e, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0xc6, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
|
||||
0x79, 0x79, 0x79, 0x09, 0x01, 0x01, 0x01, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xfe, 0xfe, 0x3e, 0x02, 0x00,
|
||||
0x00, 0x80, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x6f, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x61, 0x61, 0x61, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
|
||||
0x9e, 0x9e, 0x86, 0x80, 0x80, 0x80, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0f, 0x0f, 0x0f, 0x0d, 0x0c, 0x0c, 0x0c,
|
||||
0x4c, 0x7f, 0x7f, 0x7f, 0x7f, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//Layer 4
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0e, 0xfe, 0xfe, 0xff,
|
||||
0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9e, 0x9e, 0x9e, 0x9e, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0xc6, 0xfe, 0xfe, 0xfe, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
|
||||
0x86, 0x86, 0x86, 0xf6, 0xfe, 0xfe, 0xfe, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x03, 0x01, 0x01, 0xc1, 0xfd, 0xff,
|
||||
0xff, 0x7f, 0x01, 0x01, 0x01, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x6f, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x61, 0x61, 0x61, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x79, 0x7f, 0x7f, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf0, 0xf0, 0xf0, 0xf2, 0xf3, 0xf3, 0xf3,
|
||||
0xb3, 0x80, 0x80, 0x80, 0x80, 0xf3, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
}
|
||||
};
|
||||
|
||||
oled_write_raw_P(layer_status[get_highest_layer(layer_state)], sizeof(layer_status[0]));
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
void render_layer_status(void);
|
||||
@@ -0,0 +1,61 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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 "quantum.h"
|
||||
|
||||
#define ANIM_SIZE 525 // number of bytes in array, minimize for adequate firmware size, max is 1024
|
||||
|
||||
void render_logo(void) {
|
||||
static const char PROGMEM doio[][ANIM_SIZE] = {
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x08,
|
||||
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
|
||||
0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x18, 0x10, 0x30, 0x20, 0x60, 0xc0,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x80, 0xf0, 0xfc, 0x0e, 0x03, 0x01, 0x00, 0xf8, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0xf0,
|
||||
0xf0, 0xe0, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x38, 0x38, 0x38, 0x70, 0xf0, 0xe0, 0xc0, 0x00, 0x18,
|
||||
0xf8, 0xf8, 0xf8, 0x18, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x38, 0x38, 0x38, 0x70, 0xf0, 0xe0, 0xc0,
|
||||
0x01, 0x03, 0x0e, 0xfc, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8,
|
||||
0xf8, 0xf8, 0x80, 0xc0, 0xe0, 0xf0, 0x78, 0x38, 0x18, 0x00, 0xf8, 0xf8, 0xf8, 0xb8, 0xb8, 0xb8,
|
||||
0xf8, 0xf8, 0x70, 0x00, 0x60, 0x60, 0x70, 0x78, 0xf8, 0xf8, 0xf8, 0x00, 0xe0, 0xf0, 0xf0, 0xb8,
|
||||
0xb8, 0xb8, 0xb8, 0xb8, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xe0, 0xf0, 0xf8,
|
||||
0x38, 0x38, 0x38, 0xf8, 0xf0, 0xe0, 0x00, 0x60, 0x60, 0x70, 0x78, 0xf8, 0xf8, 0xf8, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x0f, 0x3f, 0x70, 0xc0, 0x80, 0x00, 0x1f, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x0f,
|
||||
0x0f, 0x07, 0x00, 0x03, 0x07, 0x0f, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0f, 0x07, 0x03, 0x00, 0x18,
|
||||
0x1f, 0x1f, 0x1f, 0x18, 0x00, 0x03, 0x07, 0x0f, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0f, 0x07, 0x03,
|
||||
0x80, 0xc0, 0x70, 0x3f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f,
|
||||
0x1f, 0x1f, 0x01, 0x03, 0x07, 0x0f, 0x1e, 0x1c, 0x18, 0x00, 0x1f, 0x1f, 0x1f, 0x1d, 0x1d, 0x1d,
|
||||
0x1f, 0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x07, 0x0f, 0x0f, 0x1d,
|
||||
0x1d, 0x1d, 0x1f, 0x1f, 0x0f, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x07, 0x0f, 0x1f,
|
||||
0x1c, 0x1c, 0x1c, 0x1f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x04, 0x0c, 0x08, 0x18, 0x10, 0x10,
|
||||
0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40,
|
||||
0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x18, 0x08, 0x0c, 0x04, 0x06, 0x03,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
}
|
||||
};
|
||||
|
||||
oled_write_raw_P(doio[0], ANIM_SIZE);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/* Copyright 2022 DOIO
|
||||
* Copyright 2022 HorrorTroll <https://github.com/HorrorTroll>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
void render_logo(void);
|
||||
@@ -0,0 +1,26 @@
|
||||
# KB16-01
|
||||
|
||||

|
||||
|
||||
A macropad that have 16-key keyboard made by DOIO, which controlled by an Atmega32u4 chipset. The keyboard features per-key RGB, 3 encoder and an OLED screen for displaying useful information.
|
||||
|
||||
* Keyboard Maintainer: [HorrorTroll](https://github.com/HorrorTroll)
|
||||
* Hardware Supported: Atmega32u4
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make doio/kb16/rev1:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make doio/kb16/rev1: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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (1! key) and plug in the keyboard
|
||||
* **Physical reset button**: Short press the button under Spacebar keycap to enter the Bootloader and flash the firmware
|
||||
* **Keycode in layout**: Press the key mapped to RESET if it is available
|
||||
@@ -0,0 +1,36 @@
|
||||
SRC += lib/layer_status/layer_status.c
|
||||
SRC += lib/logo.c
|
||||
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
# Additional thing to reduce compiled size
|
||||
LTO_ENABLE = yes
|
||||
SPACE_CADET_ENABLE = no
|
||||
|
||||
# OLED enabled
|
||||
OLED_ENABLE = yes
|
||||
OLED_DRIVER = SSD1306
|
||||
|
||||
# RGB Matrix enabled
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
RGB_MATRIX_DRIVER = WS2812
|
||||
|
||||
# Encoder enabled
|
||||
ENCODER_ENABLE = yes
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 IFo Hancroft
|
||||
/* Copyright 2022 IFo Hancroft
|
||||
*
|
||||
* 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
|
||||
@@ -17,5 +17,9 @@
|
||||
#pragma once
|
||||
|
||||
// place overrides here
|
||||
#define USB_POLLING_INTERVAL_MS 1
|
||||
#define FORCE_NKRO
|
||||
#ifdef TAPPING_TOGGLE
|
||||
# undef TAPPING_TOGGLE
|
||||
#endif
|
||||
#define TAPPING_TOGGLE 3
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 IFo Hancroft
|
||||
/* Copyright 2022 IFo Hancroft
|
||||
*
|
||||
* 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
|
||||
@@ -24,19 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | ESC | A | S | D | F | G | Del | | | H | J | K | L | ; | ' |
|
||||
* | Esc | A | S | D | F | G | | | | H | J | K | L | ; | ' |
|
||||
* |---------+---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------+---------|
|
||||
* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
|
||||
* |---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------|
|
||||
* | Ctrl | Super | Alt | MO(4) | MO(3) | | MO(3) | Left | Down | Up | Right |
|
||||
* | Ctrl | Super | Alt | | OSL(1) | | TT(1) | | Alt | Super | Ctrl |
|
||||
* *-------------------------------------------------* *-------------------------------------------------*
|
||||
*
|
||||
* *-------------------* *-------------------*
|
||||
* | MO(2) | | | | |
|
||||
* | | | | | |
|
||||
* *---------+---------+---------| |---------+---------+---------*
|
||||
* | | | | | | | |
|
||||
* | Bckspc | Enter |---------| |---------| Enter | Space |
|
||||
* | | | Space | | | | |
|
||||
* | | | SH_OS | | | | |
|
||||
* *---------+---------+---------* *---------+---------+---------*
|
||||
*/
|
||||
|
||||
@@ -44,88 +44,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_DEL, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, MO(4), MO(3), MO(3), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_NO, OSL(1), TT(1), KC_NO, KC_RALT, KC_RGUI, KC_RCTL,
|
||||
|
||||
MO(2), KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO,
|
||||
KC_BSPC, KC_ENT, KC_SPC, KC_NO, KC_ENT, KC_SPC
|
||||
KC_BSPC, KC_ENT, SH_OS, KC_NO, KC_ENT, KC_SPC
|
||||
),
|
||||
|
||||
|
||||
|
||||
/* Gaming Layer
|
||||
* *---------------------------------------------------------------------* *---------------------------------------------------------------------*
|
||||
* | | | | | | | 6 | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | |
|
||||
* *-------------------------------------------------* *-------------------------------------------------*
|
||||
*
|
||||
* *-------------------* *-------------------*
|
||||
* | | | | | |
|
||||
* *---------+---------+---------| |---------+---------+---------*
|
||||
* | | | | | | | |
|
||||
* | Space | |---------| |---------| | |
|
||||
* | | | | | | | |
|
||||
* *---------+---------+---------* *---------+---------+---------*
|
||||
*/
|
||||
|
||||
LAYOUT_ergodox_pretty(
|
||||
_______, _______, _______, _______, _______, _______, KC_6, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
KC_SPC, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
|
||||
|
||||
/* Left Hand Layer
|
||||
* *---------------------------------------------------------------------* *---------------------------------------------------------------------*
|
||||
* | | 6 | 7 | 8 | 9 | 0 | = | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | \ | Y | U | I | O | P | ] | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | ' | H | J | K | L | ; | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | N | M | , | . | / | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | |
|
||||
* *-------------------------------------------------* *-------------------------------------------------*
|
||||
*
|
||||
* *-------------------* *-------------------*
|
||||
* | | | | | |
|
||||
* *---------+---------+---------| |---------+---------+---------*
|
||||
* | | | | | | | |
|
||||
* | | |---------| |---------| | |
|
||||
* | | | | | | | |
|
||||
* *---------+---------+---------* *---------+---------+---------*
|
||||
*/
|
||||
|
||||
LAYOUT_ergodox_pretty(
|
||||
_______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, _______, _______, _______, _______, _______, _______, _______,
|
||||
KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, _______, _______, _______, _______, _______, _______, _______,
|
||||
KC_QUOT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
|
||||
|
||||
/* Function Keys Layer
|
||||
* *---------------------------------------------------------------------* *---------------------------------------------------------------------*
|
||||
* | NumLock | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
|
||||
@@ -134,9 +60,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | - | 4 | 5 | 6 | / | | | | Left | Down | Up | Right | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | 0 | 1 | 2 | 3 | . | | | | | | | |
|
||||
* | | 0 | 1 | 2 | 3 | . | | NK_TOGG | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | |
|
||||
* | | | | | | | | Left | Down | Up | Right |
|
||||
* *-------------------------------------------------* *-------------------------------------------------*
|
||||
*
|
||||
* *-------------------* *-------------------*
|
||||
@@ -152,40 +78,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_NUM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
_______, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PAST, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_PMNS, KC_P4, KC_P5, KC_P6, KC_PSLS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
|
||||
_______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PDOT, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PDOT, _______, _______, NK_TOGG, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, KC_PENT, KC_PGUP, KC_PGDN, _______, _______
|
||||
),
|
||||
|
||||
|
||||
|
||||
/* Layers Layer
|
||||
* *---------------------------------------------------------------------* *---------------------------------------------------------------------*
|
||||
* | | TO(0) | TO(1) | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | | | |
|
||||
* |---------+---------+---------+---------+---------+---------* *---------+---------+---------+---------+---------+---------|
|
||||
* | | | | | | | | | | | |
|
||||
* *-------------------------------------------------* *-------------------------------------------------*
|
||||
*
|
||||
* *-------------------* *-------------------*
|
||||
* | | | | | |
|
||||
* *---------+---------+---------| |---------+---------+---------*
|
||||
* | | | | | | | |
|
||||
* | | |---------| |---------| | |
|
||||
* | | | | | | | |
|
||||
* *---------+---------+---------* *---------+---------+---------*
|
||||
*/
|
||||
|
||||
/* Empty Layer */
|
||||
LAYOUT_ergodox_pretty(
|
||||
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
_______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Empty Layer */
|
||||
LAYOUT_ergodox_pretty(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
@@ -195,5 +111,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
/* Swap Hands
|
||||
* *-------------------------------------------------*
|
||||
* | Del | \ | ' | | |
|
||||
* |---------+---------+---------+---------+---------+---------*
|
||||
* | 6 | Y | H | N | | |
|
||||
* |---------+---------+---------+---------+---------+---------|
|
||||
* | 7 | U | J | M | | |
|
||||
* |---------+---------+---------+---------+---------+---------|
|
||||
* | 8 | I | K | , | | Space |
|
||||
* |---------+---------+---------+---------+---------+---------|
|
||||
* | 9 | O | L | . | | |
|
||||
* |---------+---------+---------+---------+---------+---------|
|
||||
* | 0 | P | ; | / | | |
|
||||
* |---------+---------+---------+---------| |---------|
|
||||
* | = | ] | | | | |
|
||||
* *---------------------------------------* *---------*
|
||||
*/
|
||||
|
||||
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||
{{0, 13}, {1, 13}, {2, 13}, {3, 0}, {4, 0}},
|
||||
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 1}, {5, 1}},
|
||||
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 2}, {5, 2}},
|
||||
{{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 3}, {5, 10}},
|
||||
{{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 4}, {5, 9}},
|
||||
{{0, 12}, {1, 12}, {2, 12}, {3, 12}, {0, 0}, {5, 8}},
|
||||
{{0, 7}, {1, 7}, {0, 0}, {3, 7}, {0, 0}, {5, 7}},
|
||||
|
||||
{{0, 7}, {1, 7}, {0, 0}, {3, 7}, {0, 0}, {5, 7}},
|
||||
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {0, 0}, {5, 8}},
|
||||
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}},
|
||||
{{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}, {5, 10}},
|
||||
{{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}, {5, 11}},
|
||||
{{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}, {5, 12}},
|
||||
{{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}}
|
||||
};
|
||||
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||

|
||||

|
||||
|
||||
# IFo Hancroft's ErgoDox EZ Layout
|
||||
|
||||
- Layer 0: A Standard ANSI QWERTY Layer. It adds some additional keys from the right half in-order to avoid having to lift your right hand of the mouse.
|
||||
- Layer 1: A Gaming Layer. It replaces the Backspace with a Space, and the Dash with a 6, so you can play CS:GO without needing to lift your right hand of the mouse.
|
||||
- Layer 2: A Left Hand Layer. It is basically a left hand version of the right half, so you can have access to a full-sized keyboard without needing to lift your right hand from the the mouse.
|
||||
- Layer 3: A Function Layer. It contains the F1-F12 keys, PgUp, PgDn, Numpad, and arrows on HJKL.
|
||||
- Layer 4: A Layer Switching Layer. The keys in this layer turn on a specific layer while disabling the rest. Basically, you come here to switch between the QWERTY and Gaming layers.
|
||||
|
||||
- Layer 0: A QWERTY Layer.
|
||||
- Layer 1: A Function Layer.
|
||||
- Layer 2: Empty Layer.
|
||||
- Layer 3: Empty Layer.
|
||||
|
||||
This keymap also does the following:
|
||||
|
||||
- Sets the polling rate of the keyboard to 1ms
|
||||
- Forces NKRO on
|
||||
- Enables:
|
||||
- Command
|
||||
- Via
|
||||
- The Swap Hands feature
|
||||
- Disables:
|
||||
- Mouse Key
|
||||
- Extra Key
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
MOUSEKEY_ENABLE = no
|
||||
EXTRAKEY_ENABLE = no
|
||||
COMMAND_ENABLE = yes
|
||||
SWAP_HANDS_ENABLE = yes
|
||||
VIA_ENABLE = yes
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// Copyright 2022 Evelien Dekkers (@evyd13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define LED_PIN_ON_STATE 0
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"manufacturer": "Evelien Dekkers",
|
||||
"keyboard_name": "nt650",
|
||||
"maintainer": "evyd13",
|
||||
"bootloader": "atmel-dfu",
|
||||
"diode_direction": "ROW2COL",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "E6",
|
||||
"scroll_lock": "E2"
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["F4", "F5", "F6", "C7", "C6", "B3", "B1", "B2", "B7", "D7", "B5", "B4", "D0", "B6", "D1"],
|
||||
"rows": ["F7", "D6", "D4", "F1", "D5", "F0", "D3", "D2"]
|
||||
},
|
||||
"processor": "atmega32u4",
|
||||
"url": "",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0xD5DF",
|
||||
"vid": "0x4705"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT_all": "LAYOUT_ansi_split_space"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ansi_split_space": {
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "label":"ESC", "x":0, "y":0},
|
||||
{"matrix": [1, 0], "label":"1", "x":1, "y":0},
|
||||
{"matrix": [1, 1], "label":"2", "x":2, "y":0},
|
||||
{"matrix": [1, 2], "label":"3", "x":3, "y":0},
|
||||
{"matrix": [1, 3], "label":"4", "x":4, "y":0},
|
||||
{"matrix": [2, 3], "label":"5", "x":5, "y":0},
|
||||
{"matrix": [2, 4], "label":"6", "x":6, "y":0},
|
||||
{"matrix": [1, 4], "label":"7", "x":7, "y":0},
|
||||
{"matrix": [1, 5], "label":"8", "x":8, "y":0},
|
||||
{"matrix": [1, 6], "label":"9", "x":9, "y":0},
|
||||
{"matrix": [1, 7], "label":"0", "x":10, "y":0},
|
||||
{"matrix": [2, 7], "label":"MINS", "x":11, "y":0},
|
||||
{"matrix": [2, 5], "label":"EQL", "x":12, "y":0},
|
||||
{"matrix": [3, 8], "label":"BSPC", "x":13, "y":0, "w":2},
|
||||
{"matrix": [3, 0], "label":"TAB", "x":0, "y":1, "w":1.5},
|
||||
{"matrix": [5, 0], "label":"Q", "x":1.5, "y":1},
|
||||
{"matrix": [5, 1], "label":"W", "x":2.5, "y":1},
|
||||
{"matrix": [5, 2], "label":"E", "x":3.5, "y":1},
|
||||
{"matrix": [5, 3], "label":"R", "x":4.5, "y":1},
|
||||
{"matrix": [3, 3], "label":"T", "x":5.5, "y":1},
|
||||
{"matrix": [3, 4], "label":"Y", "x":6.5, "y":1},
|
||||
{"matrix": [5, 4], "label":"U", "x":7.5, "y":1},
|
||||
{"matrix": [5, 5], "label":"I", "x":8.5, "y":1},
|
||||
{"matrix": [5, 6], "label":"O", "x":9.5, "y":1},
|
||||
{"matrix": [5, 7], "label":"P", "x":10.5, "y":1},
|
||||
{"matrix": [3, 7], "label":"LBRC", "x":11.5, "y":1},
|
||||
{"matrix": [3, 5], "label":"RBRC", "x":12.5, "y":1},
|
||||
{"matrix": [4, 8], "label":"BSLS", "x":13.5, "y":1, "w":1.5},
|
||||
{"matrix": [3, 1], "label":"CAPS", "x":0, "y":2, "w":1.75},
|
||||
{"matrix": [4, 0], "label":"A", "x":1.75, "y":2},
|
||||
{"matrix": [4, 1], "label":"S", "x":2.75, "y":2},
|
||||
{"matrix": [4, 2], "label":"D", "x":3.75, "y":2},
|
||||
{"matrix": [4, 3], "label":"F", "x":4.75, "y":2},
|
||||
{"matrix": [0, 3], "label":"G", "x":5.75, "y":2},
|
||||
{"matrix": [0, 4], "label":"H", "x":6.75, "y":2},
|
||||
{"matrix": [4, 4], "label":"J", "x":7.75, "y":2},
|
||||
{"matrix": [4, 5], "label":"K", "x":8.75, "y":2},
|
||||
{"matrix": [4, 6], "label":"L", "x":9.75, "y":2},
|
||||
{"matrix": [4, 7], "label":"SCLN", "x":10.75, "y":2},
|
||||
{"matrix": [0, 7], "label":"QUOT", "x":11.75, "y":2},
|
||||
{"matrix": [6, 8], "label":"ENT", "x":12.75, "y":2, "w":2.25},
|
||||
{"matrix": [3, 10], "label":"LSFT", "x":0, "y":3, "w":2.25},
|
||||
{"matrix": [6, 0], "label":"Z", "x":2.25, "y":3},
|
||||
{"matrix": [6, 1], "label":"X", "x":3.25, "y":3},
|
||||
{"matrix": [6, 2], "label":"C", "x":4.25, "y":3},
|
||||
{"matrix": [6, 3], "label":"V", "x":5.25, "y":3},
|
||||
{"matrix": [7, 3], "label":"B", "x":6.25, "y":3},
|
||||
{"matrix": [7, 4], "label":"N", "x":7.25, "y":3},
|
||||
{"matrix": [6, 4], "label":"M", "x":8.25, "y":3},
|
||||
{"matrix": [6, 5], "label":"COMM", "x":9.25, "y":3},
|
||||
{"matrix": [6, 6], "label":"DOT", "x":10.25, "y":3},
|
||||
{"matrix": [7, 7], "label":"SLSH", "x":11.25, "y":3},
|
||||
{"matrix": [4, 10], "label":"RSFT", "x":12.25, "y":3, "w":1.75},
|
||||
{"matrix": [3, 9], "label":"APP", "x":14, "y":3},
|
||||
{"matrix": [2, 11], "label":"LCTL", "x":0, "y":4, "w":1.25},
|
||||
{"matrix": [3, 11], "label":"LGUI", "x":1.25, "y":4},
|
||||
{"matrix": [0, 9], "label":"LALT", "x":2.25, "y":4, "w":1.25},
|
||||
{"matrix": [0, 13], "label":"SPC", "x":3.5, "y":4, "w":3},
|
||||
{"matrix": [6, 9], "label":"SPC", "x":6.5, "y":4, "w":3},
|
||||
{"matrix": [7, 9], "label":"RALT", "x":9.5, "y":4, "w":1.25},
|
||||
{"matrix": [6, 11], "label":"RCTL", "x":10.75, "y":4},
|
||||
{"matrix": [0, 12], "label":"UP", "x":13, "y":4},
|
||||
{"matrix": [7, 12], "label":"LEFT", "x":12, "y":5},
|
||||
{"matrix": [7, 13], "label":"DOWN", "x":13, "y":5},
|
||||
{"matrix": [7, 14], "label":"RGHT", "x":14, "y":5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// Copyright 2022 Evelien Dekkers (@evyd13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Each layer gets a name for readability.
|
||||
// The underscores don't mean anything - you can
|
||||
// have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same
|
||||
// length, and you can also skip them entirely
|
||||
// and just use numbers.
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_FUNC,
|
||||
_LOCK,
|
||||
_XTRA
|
||||
};
|
||||
|
||||
#define LOCK_LED_PIN B0
|
||||
#define GRV_TG TG(_LOCK)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BASE] = LAYOUT_ansi_split_space(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FUNC),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_UP,
|
||||
KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[_FUNC] = LAYOUT_ansi_split_space(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||
_______, GRV_TG, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_APP, _______,
|
||||
_______, _______, _______
|
||||
),
|
||||
[_LOCK] = LAYOUT_ansi_split_space(
|
||||
KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
),
|
||||
[_XTRA] = LAYOUT_ansi_split_space(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
setPinOutput(LOCK_LED_PIN);
|
||||
switch (get_highest_layer(state)) {
|
||||
case _LOCK:
|
||||
writePin(LOCK_LED_PIN, 0);
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
writePin(LOCK_LED_PIN, 1);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// Copyright 2022 Evelien Dekkers (@evyd13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
|
||||
@@ -0,0 +1,32 @@
|
||||
// Copyright 2022 Evelien Dekkers (@evyd13)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT_ansi_split_space(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_UP,
|
||||
KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_ansi_split_space(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_APP, _______,
|
||||
_______, _______, _______
|
||||
),
|
||||
[2] = LAYOUT_ansi_split_space(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
||||
@@ -0,0 +1,27 @@
|
||||
# nt650
|
||||
|
||||

|
||||
|
||||
A replacement controller PCB for the Leopold FC650M.
|
||||
|
||||
* Keyboard Maintainer: [Evelien Dekkers](https://github.com/evyd13)
|
||||
* Hardware Supported: nt-650 PCB
|
||||
* Hardware Availability: [Open source on GitHub](https://github.com/evyd13/nt-series/tree/main/nt-650)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make evyd13/nt650:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make evyd13/nt650: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).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
|
||||
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
@@ -0,0 +1 @@
|
||||
# This file intentionally left blank
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
Copyright 2022 Alexander Bruun <alex@bruun.xyz>
|
||||
|
||||
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
|
||||
// Set the mouse settings to a comfortable speed/accuracy trade-off,
|
||||
// assuming a screen refresh rate of 60 Htz or higher
|
||||
// The default is 50. This makes the mouse ~3 times faster and more accurate
|
||||
#define MOUSEKEY_INTERVAL 16
|
||||
// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
|
||||
// give it more time to accelerate to max speed to retain precise control over short distances.
|
||||
#define MOUSEKEY_TIME_TO_MAX 40
|
||||
// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
|
||||
#define MOUSEKEY_DELAY 100
|
||||
// It makes sense to use the same delay for the mouseweel
|
||||
#define MOUSEKEY_WHEEL_DELAY 100
|
||||
// The default is 100
|
||||
#define MOUSEKEY_WHEEL_INTERVAL 50
|
||||
// The default is 40
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
|
||||
|
||||
// Pick good defaults for enabling homerow modifiers
|
||||
#define TAPPING_TERM 200
|
||||
#define PERMISSIVE_HOLD
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
#define TAPPING_FORCE_HOLD
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"version": 1,
|
||||
"notes": "Personal keymap",
|
||||
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
|
||||
"keyboard": "ferris/sweep",
|
||||
"keymap": "bruun-baer",
|
||||
"layout": "LAYOUT_split_3x5_2",
|
||||
"layers": [
|
||||
["KC_Q" , "KC_D" , "KC_R" , "KC_W" , "KC_B",
|
||||
"KC_J" , "KC_F" , "KC_U" , "KC_P" , "KC_QUOT",
|
||||
|
||||
"LGUI_T(KC_A)", "LALT_T(KC_S)", "LSFT_T(KC_H)", "LCTL_T(KC_T)" , "KC_G",
|
||||
"KC_Y" , "LCTL_T(KC_N)", "LSFT_T(KC_E)", "LALT_T(KC_O)" , "LGUI_T(KC_I)",
|
||||
|
||||
"KC_Z" , "RALT_T(KC_X)", "KC_M" , "KC_C" , "KC_V",
|
||||
"KC_K" , "KC_L" , "KC_COMM" , "RALT_T(KC_DOT)", "KC_SLSH",
|
||||
|
||||
"LT(3,KC_SPC)", "LT(4,KC_TAB)",
|
||||
"LT(2,KC_ENT)", "LT(1,KC_BSPC)"
|
||||
],
|
||||
["KC_LBRC" , "KC_7" , "KC_8" , "KC_9" , "KC_RBRC",
|
||||
"KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
|
||||
|
||||
"KC_SCLN" , "KC_4" , "KC_5" , "KC_6" , "KC_EQL",
|
||||
"KC_NO" , "KC_LCTL" , "KC_LSFT" , "KC_LALT" , "KC_LGUI",
|
||||
|
||||
"KC_GRV" , "KC_1" , "KC_2" , "KC_3" , "KC_BSLS",
|
||||
"KC_NO" , "KC_NO" , "KC_NO" , "KC_RALT" , "KC_NO",
|
||||
|
||||
"KC_0" , "KC_MINS",
|
||||
"KC_NO" , "KC_NO"
|
||||
],
|
||||
["KC_LCBR" , "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RCBR",
|
||||
"KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
|
||||
|
||||
"KC_COLN" , "KC_DLR" , "KC_PERC" , "KC_CIRC" , "KC_PLUS",
|
||||
"KC_NO" , "KC_LCTL" , "KC_LSFT" , "KC_LALT" , "KC_LGUI",
|
||||
|
||||
"KC_TILD" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_PIPE",
|
||||
"KC_NO" , "KC_NO" , "KC_NO" , "KC_RALT" , "KC_NO",
|
||||
|
||||
"KC_RPRN" , "KC_UNDS",
|
||||
"KC_NO" , "KC_NO"
|
||||
],
|
||||
["KC_F12" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_PSCR",
|
||||
"KC_AGIN" , "KC_PSTE" , "KC_COPY" , "KC_CUT" , "KC_UNDO",
|
||||
|
||||
"KC_F11" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_SCRL",
|
||||
"KC_CAPS" , "KC_LEFT" , "KC_DOWN" , "KC_UP" , "KC_RGHT",
|
||||
|
||||
"KC_F10" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_PAUS",
|
||||
"KC_INS" , "KC_HOME" , "KC_PGDN" , "KC_PGUP" , "KC_END",
|
||||
|
||||
"KC_NO" , "KC_NO",
|
||||
"KC_ESC" , "KC_DEL"
|
||||
],
|
||||
["KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO",
|
||||
"KC_MPLY" , "KC_MPRV" , "KC_VOLD" , "KC_VOLU" , "KC_MNXT",
|
||||
|
||||
"KC_LGUI" , "KC_LALT" , "KC_LSFT" , "KC_LCTL" , "KC_NO",
|
||||
"KC_MUTE" , "KC_MS_L" , "KC_MS_D" , "KC_MS_U" , "KC_MS_R",
|
||||
|
||||
"KC_NO" , "KC_RALT" , "KC_NO" , "KC_NO" , "KC_NO",
|
||||
"KC_BTN3" , "KC_WH_L" , "KC_WH_D" , "KC_WH_U" , "KC_WH_R",
|
||||
|
||||
"KC_NO" , "KC_NO",
|
||||
"KC_BTN1" , "KC_BTN2"
|
||||
]
|
||||
],
|
||||
"author": "@bruun-baer"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Personal Ferris Sweep Keymap
|
||||
===============================================
|
||||
@@ -1,150 +0,0 @@
|
||||
// Copyright 2021-2022 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
// For full documentation, see
|
||||
// https://getreuer.info/posts/keyboards/caps-word
|
||||
|
||||
#include "caps_word.h"
|
||||
|
||||
static bool caps_word_active = false;
|
||||
|
||||
#if CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
#if CAPS_WORD_IDLE_TIMEOUT < 100 || CAPS_WORD_IDLE_TIMEOUT > 30000
|
||||
// Constrain timeout to a sensible range. With the 16-bit timer, the longest
|
||||
// representable timeout is 32768 ms, rounded here to 30000 ms = half a minute.
|
||||
#error "caps_word: CAPS_WORD_IDLE_TIMEOUT must be between 100 and 30000 ms"
|
||||
#endif
|
||||
|
||||
static uint16_t idle_timer = 0;
|
||||
|
||||
void caps_word_task(void) {
|
||||
if (caps_word_active && timer_expired(timer_read(), idle_timer)) {
|
||||
caps_word_set(false);
|
||||
}
|
||||
}
|
||||
#endif // CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
|
||||
bool process_caps_word(uint16_t keycode, keyrecord_t* record) {
|
||||
#ifndef NO_ACTION_ONESHOT
|
||||
const uint8_t mods = get_mods() | get_oneshot_mods();
|
||||
#else
|
||||
const uint8_t mods = get_mods();
|
||||
#endif // NO_ACTION_ONESHOT
|
||||
|
||||
if (!caps_word_active) {
|
||||
// Pressing both shift keys at the same time enables caps word.
|
||||
if ((mods & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) {
|
||||
caps_word_set(true); // Activate Caps Word.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
#if CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
idle_timer = record->event.time + CAPS_WORD_IDLE_TIMEOUT;
|
||||
#endif // CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
}
|
||||
|
||||
if (!record->event.pressed) { return true; }
|
||||
|
||||
if (!(mods & ~MOD_MASK_SHIFT)) {
|
||||
switch (keycode) {
|
||||
// Ignore MO, TO, TG, TT, and OSL layer switch keys.
|
||||
case QK_MOMENTARY ... QK_MOMENTARY_MAX:
|
||||
case QK_TO ... QK_TO_MAX:
|
||||
case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX:
|
||||
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
|
||||
case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:
|
||||
return true;
|
||||
|
||||
#ifndef NO_ACTION_TAPPING
|
||||
case QK_MOD_TAP ... QK_MOD_TAP_MAX:
|
||||
if (record->tap.count == 0) {
|
||||
// Deactivate if a mod becomes active through holding a mod-tap key.
|
||||
caps_word_set(false);
|
||||
return true;
|
||||
}
|
||||
keycode &= 0xff;
|
||||
break;
|
||||
|
||||
#ifndef NO_ACTION_LAYER
|
||||
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
|
||||
#endif // NO_ACTION_LAYER
|
||||
if (record->tap.count == 0) { return true; }
|
||||
keycode &= 0xff;
|
||||
break;
|
||||
#endif // NO_ACTION_TAPPING
|
||||
|
||||
#ifdef SWAP_HANDS_ENABLE
|
||||
case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX:
|
||||
if (keycode > 0x56F0 || record->tap.count == 0) { return true; }
|
||||
keycode &= 0xff;
|
||||
break;
|
||||
#endif // SWAP_HANDS_ENABLE
|
||||
}
|
||||
|
||||
if (caps_word_press_user(keycode)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
caps_word_set(false); // Deactivate Caps Word.
|
||||
return true;
|
||||
}
|
||||
|
||||
void caps_word_set(bool active) {
|
||||
if (active != caps_word_active) {
|
||||
if (active) {
|
||||
clear_mods();
|
||||
#ifndef NO_ACTION_ONESHOT
|
||||
clear_oneshot_mods();
|
||||
#endif // NO_ACTION_ONESHOT
|
||||
#if CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
idle_timer = timer_read() + CAPS_WORD_IDLE_TIMEOUT;
|
||||
#endif // CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
} else if ((get_weak_mods() & MOD_BIT(KC_LSFT)) != 0) {
|
||||
// If the weak shift mod is still on, turn it off and send an update to
|
||||
// the host computer.
|
||||
del_weak_mods(MOD_BIT(KC_LSFT));
|
||||
send_keyboard_report();
|
||||
}
|
||||
|
||||
caps_word_active = active;
|
||||
caps_word_set_user(active);
|
||||
}
|
||||
}
|
||||
|
||||
bool caps_word_get(void) { return caps_word_active; }
|
||||
|
||||
__attribute__((weak)) void caps_word_set_user(bool active) {}
|
||||
|
||||
__attribute__((weak)) bool caps_word_press_user(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
// Keycodes that continue Caps Word, with shift applied.
|
||||
case KC_A ... KC_Z:
|
||||
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key.
|
||||
return true;
|
||||
|
||||
// Keycodes that continue Caps Word, without shifting.
|
||||
case KC_1 ... KC_0:
|
||||
case KC_BSPC:
|
||||
case KC_MINS:
|
||||
case KC_UNDS:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false; // Deactivate Caps Word.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
// Copyright 2021-2022 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//
|
||||
// Caps Word, activated by pressing both shift keys at the same time.
|
||||
//
|
||||
// This library implements "Caps Word", which is like conventional Caps Lock,
|
||||
// but automatically disables itself at the end of the word. This is useful for
|
||||
// typing all-caps identifiers like `MOD_MASK_ALT`.
|
||||
//
|
||||
// Caps Word is activated by pressing the left and right shift keys at the same
|
||||
// time. This way you don't need a dedicated key for using Caps Word. I've
|
||||
// tested that this works as expected with one-shot mods and Space Cadet Shift.
|
||||
// If your shift keys are mod-taps, activate Caps Word by holding both shift
|
||||
// mod-tap keys until the tapping term, release them, then begin typing.
|
||||
//
|
||||
// Optionally, Caps Word may be configured to deactivate if the keyboard is idle
|
||||
// for some time. This is useful to mitigate unintended shifting when you get
|
||||
// interrupted or switch to the mouse while Caps Word is active. In your
|
||||
// config.h, define `CAPS_WORD_IDLE_TIMEOUT` with a time in milliseconds:
|
||||
//
|
||||
// #define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds.
|
||||
//
|
||||
// and in your keymap.c, define (or add to) `matrix_scan_user()` as
|
||||
//
|
||||
// void matrix_scan_user(void) {
|
||||
// caps_word_task();
|
||||
// // Other tasks...
|
||||
// }
|
||||
//
|
||||
// For full documentation, see
|
||||
// https://getreuer.info/posts/keyboards/caps-word
|
||||
|
||||
#pragma once
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Call this function from `process_record_user()` to implement Caps Word.
|
||||
bool process_caps_word(uint16_t keycode, keyrecord_t* record);
|
||||
|
||||
// If CAPS_WORD_IDLE_TIMEOUT is set, call `caps_word_task()` from
|
||||
// `matrix_scan_user()` as described above.
|
||||
//
|
||||
// If CAPS_WORD_IDLE_TIMEOUT isn't set, calling this function has no effect (but
|
||||
// will still compile).
|
||||
#if CAPS_WORD_IDLE_TIMEOUT > 0
|
||||
void caps_word_task(void);
|
||||
#else
|
||||
static inline void caps_word_task(void) {}
|
||||
#endif
|
||||
|
||||
// Activates or deactivates Caps Word. For instance activate Caps Word with a
|
||||
// combo by defining a `COMBO_ACTION` that calls `caps_word_set(true)`:
|
||||
//
|
||||
// void process_combo_event(uint16_t combo_index, bool pressed) {
|
||||
// switch(combo_index) {
|
||||
// case CAPS_COMBO:
|
||||
// if (pressed) {
|
||||
// caps_word_set(true); // Activate Caps Word.
|
||||
// }
|
||||
// break;
|
||||
//
|
||||
// // Other combos...
|
||||
// }
|
||||
// }
|
||||
void caps_word_set(bool active);
|
||||
|
||||
// Returns whether Caps Word is currently active.
|
||||
bool caps_word_get(void);
|
||||
|
||||
// An optional callback that gets called when Caps Word turns on or off. This is
|
||||
// useful to represent the current Caps Word state, e.g. by setting an LED or
|
||||
// playing a sound. In your keymap, define
|
||||
//
|
||||
// void caps_word_set_user(bool active) {
|
||||
// if (active) {
|
||||
// // Do something when Caps Word activates.
|
||||
// } else {
|
||||
// // Do something when Caps Word deactivates.
|
||||
// }
|
||||
// }
|
||||
void caps_word_set_user(bool active);
|
||||
|
||||
// An optional callback which is called on every key press while Caps Word is
|
||||
// active. When the key should be shifted (that is, a letter key), the callback
|
||||
// should call `add_weak_mods(MOD_BIT(KC_LSFT))` to shift the key. The callback
|
||||
// also determines whether the key should continue Caps Word. Returning true
|
||||
// continues the current "word", while returning false is "word breaking" and
|
||||
// deactivates Caps Word. The default callback is
|
||||
//
|
||||
// bool caps_word_press_user(uint16_t keycode) {
|
||||
// switch (keycode) {
|
||||
// // Keycodes that continue Caps Word, with shift applied.
|
||||
// case KC_A ... KC_Z:
|
||||
// add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key.
|
||||
// return true;
|
||||
//
|
||||
// // Keycodes that continue Caps Word, without shifting.
|
||||
// case KC_1 ... KC_0:
|
||||
// case KC_BSPC:
|
||||
// case KC_MINS:
|
||||
// case KC_UNDS:
|
||||
// return true;
|
||||
//
|
||||
// default:
|
||||
// return false; // Deactivate Caps Word.
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// To customize, copy the above function into your keymap and add/remove
|
||||
// keycodes to the above cases.
|
||||
//
|
||||
// NOTE: Outside of this callback, you can use `caps_word_set(false)` to
|
||||
// deactivate Caps Word.
|
||||
bool caps_word_press_user(uint16_t keycode);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 gourdo1 <jcblake@outlook.com>
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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
|
||||
@@ -17,10 +17,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TOGGLE 2
|
||||
// TT set to two taps
|
||||
// Force n-key rollover
|
||||
#define FORCE_NKRO
|
||||
|
||||
/* Handle GRAVESC combo keys */
|
||||
// Set TT to two taps
|
||||
#define TAPPING_TOGGLE 2
|
||||
|
||||
#ifdef COMMAND_ENABLE
|
||||
#define IS_COMMAND() (get_mods() == MOD_MASK_CTRL) //debug commands accessed by holding down both CTRLs: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_command.md
|
||||
#endif
|
||||
|
||||
// Caps Word configuration
|
||||
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
|
||||
#define CAPS_WORD_IDLE_TIMEOUT 10000 // Automatically turn off after x milliseconds of idle. 0 to never timeout.
|
||||
|
||||
// Handle GRAVESC combo keys
|
||||
#define GRAVE_ESC_ALT_OVERRIDE
|
||||
// Always send Escape if Alt is pressed
|
||||
#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
@@ -31,19 +42,79 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define TAPPING_TERM_PER_KEY
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
|
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
#endif
|
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
#define RGB_MATRIX_KEYPRESSES // Enables REACTIVE & SPLASH modes
|
||||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enables Heatmap, Rain
|
||||
|
||||
// RGB step values
|
||||
#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10)
|
||||
#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17)
|
||||
#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17)
|
||||
// RGB step values
|
||||
#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10)
|
||||
#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17)
|
||||
#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17)
|
||||
|
||||
// add fifth layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable
|
||||
// Startup values, when none have been set
|
||||
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_REACTIVE // Sets the default effect mode, if none has been set (was RGB_MATRIX_SOLID_COLOR)
|
||||
#define RGB_MATRIX_STARTUP_HUE 24 // Sets the default hue value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_SAT 255 // Sets the default saturation value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_VAL 127 // Sets the default brightness value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
|
||||
|
||||
// Uncomment any #undef line below to turn OFF any default enabled RGB background effect (enabled in keyboards/gmmk/pro/config.h).
|
||||
#undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Solid color (seems redundant; seems same as RGB_MATRIX_SOLID_COLOR?)
|
||||
//#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static, horizontal rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static, vertical Rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_BREATHING // Breathing animation using selected HSV color
|
||||
#undef ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black)
|
||||
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness (with black)
|
||||
#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades brightness (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient moving left to right
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
|
||||
#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient chevron scrolling left to right (too similar to cycle left right)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center.
|
||||
#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points. (seems mostly redundant with above)
|
||||
#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Built-in cycling pinwheel (seems redundant with below)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
|
||||
#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON // Spinning rainbow (more distracting transitions)
|
||||
//#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Spinning rainbow (smoother)
|
||||
#undef ENABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboard (distracting, busy)
|
||||
#undef ENABLE_RGB_MATRIX_RAINDROPS // Sustained raindrops of blue, green, yellow (confusing to use with RGB layers)
|
||||
//#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Sustained raindrops of blue, purple, pink, green (confusing to use with RGB layers, but slightly better than above)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back (very subtle)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left (very subtle)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right (very subtle)
|
||||
//#undef ENABLE_RGB_MATRIX_PIXEL_RAIN // Non-sustained raindrops of pastel colors
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FLOW // More active version of pixel rain with quick cycling (unusable, very distracting)
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Same as Pixel Flow but with current HSV only (somewhat distracting)
|
||||
//Only enabled if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
|
||||
//#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP // Fading heatmap that follows keystrokes (has buggy side LEDs that glow red)
|
||||
//#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix (has buggy side LEDs that glow red)
|
||||
//Only enabled if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Keyboard lights up in chosen hue, key hits shown in complementary hue (try this as default?)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but more intense (Multi-key)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single current color fade (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-key)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades
|
||||
//#undef ENABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black.
|
||||
#undef ENABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black. (distracting on multiple keystroke hits)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (distracting on multiple key hits)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black.
|
||||
#endif //RGB_MATRIX_ENABLE
|
||||
|
||||
// Add a layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable
|
||||
#if defined COLEMAK_LAYER_ENABLE
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
|
||||
#define _COLEMAK 4
|
||||
#ifdef GAME_ENABLE
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
|
||||
#define _COLEMAK 5
|
||||
#else
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
|
||||
#define _COLEMAK 4
|
||||
#endif //GAME_ENABLE
|
||||
#endif // COLEMAK_LAYER_ENABLE
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
|
||||
Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 gourdo1 <jcblake@outlook.com>
|
||||
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c
|
||||
// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in /users/gourdo1/gourdo1.c
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
@@ -24,6 +24,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "gourdo1.h"
|
||||
|
||||
#include "paddlegame.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Base Layout
|
||||
@@ -44,39 +48,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
*/
|
||||
|
||||
[_BASE] = LAYOUT(
|
||||
KC_ESCLYR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LEFTOFENC, ENCFUNC,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, BELOWENC,
|
||||
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,
|
||||
TT(_NUMPADMOUSE), 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_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
CAPSNUM, 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,
|
||||
LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* FN1 Layout
|
||||
*
|
||||
* ,-------------------------------------------------------------------------------------------------------------.
|
||||
* | Esc ||MyCmp |WbHom | Calc |MdSel ||MdPrv |MdNxt |MdPly |MdStp ||VolDn |VolUp |PrScr |ScrLk ||Pause || ____ |
|
||||
* | Esc ||MyCmp |WbHom | Calc |MdSel ||MdPrv |MdNxt |MdPly |MdStp ||VolDn |VolUp |PrScr |ScrLk ||Pause ||Sleep |
|
||||
* |=============================================================================================================|
|
||||
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |RGBTOD|RGBTOI| ________ ||RGBTOG|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------|
|
||||
* | ______ |RGBSAD|RGBVAI|RGBSAI| NKRO | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | Reset || Home |
|
||||
* | ______ |RGBSAD|RGBVAI|RGBSAI| NKRO | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ |QK_BOOT|| Home |
|
||||
* |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------|
|
||||
* | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | __________ || End |
|
||||
* |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------|
|
||||
* | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| ____ | ______ ||RGBMOD|| ____ |
|
||||
* | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| CAD | ______ ||RGBMOD|| ____ |
|
||||
* |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======|
|
||||
* | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI|
|
||||
* `------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
[_FN1] = LAYOUT(
|
||||
EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, RESET, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END,
|
||||
_______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, TG(_GAME),SWAP_L, SWAP_R, QK_BOOT, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, KC_END,
|
||||
_______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
|
||||
[_GAME] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
#else
|
||||
[_FN1] = LAYOUT(
|
||||
EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, QK_BOOT, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, KC_END,
|
||||
_______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
/* _NUMPADMOUSE Layout
|
||||
* Note: A symbol preceded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad.
|
||||
@@ -101,7 +126,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, KC_PGUP, KC_UP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_WH_U,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, KC_WH_D,
|
||||
_______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
_______, _______, _______, KC_PENT, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
),
|
||||
|
||||
[_MOUSEKEY] = LAYOUT(
|
||||
@@ -115,19 +140,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
#ifdef COLEMAK_LAYER_ENABLE
|
||||
[_COLEMAK] = LAYOUT(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, _______,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
|
||||
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
_______, _______, _______, KC_SPC, KC_RALT, _______,KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
_______, _______, _______, KC_SPC, KC_RALT, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
#endif // COLEMAK_LAYER_ENABLE
|
||||
};
|
||||
|
||||
#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults
|
||||
void encoder_action_rgbhue(bool clockwise) {
|
||||
if (clockwise)
|
||||
if (clockwise)
|
||||
rgblight_increase_hue_noeeprom();
|
||||
else
|
||||
rgblight_decrease_hue_noeeprom();
|
||||
@@ -154,6 +179,18 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
timeout_update_threshold(clockwise);
|
||||
#endif
|
||||
break;
|
||||
#ifdef GAME_ENABLE
|
||||
case _GAME:
|
||||
// Game: Paddle movement
|
||||
if (damage_count == 0) {
|
||||
if (clockwise) {
|
||||
if (paddle_pos_full < 15) ++paddle_pos_full;
|
||||
} else {
|
||||
if (paddle_pos_full > 0) --paddle_pos_full;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif //GAME_ENABLE
|
||||
default:
|
||||
encoder_action_volume(clockwise); // Otherwise it just changes volume
|
||||
break;
|
||||
@@ -165,6 +202,45 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// Game logic
|
||||
#ifdef GAME_ENABLE
|
||||
void init_ball(uint8_t i) {
|
||||
i &= 1;
|
||||
ball[i].on = true;
|
||||
ball[i].up = false;
|
||||
ball[i].y = 0;
|
||||
ball[i].x = rand() % 16;
|
||||
|
||||
// Set initial ball state
|
||||
if (ball[i].x < 8) {
|
||||
ball[i].left = false;
|
||||
} else {
|
||||
ball[i].x -= 4;
|
||||
ball[i].left = true;
|
||||
}
|
||||
|
||||
// 1/4 chance of being an enemy ball after level 6
|
||||
if (level_number > 3) {
|
||||
ball[i].enemy = ((rand() % 4) == 0);
|
||||
} else {
|
||||
ball[i].enemy = false;
|
||||
}
|
||||
}
|
||||
|
||||
void hurt_paddle(void) {
|
||||
if (paddle_lives > 0) {
|
||||
--paddle_lives;
|
||||
}
|
||||
damage_timer = timer_read();
|
||||
damage_count = 10;
|
||||
|
||||
// Reset board
|
||||
init_ball(0);
|
||||
ball[1].on = false;
|
||||
}
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
// Capslock, Scroll lock and Numlock indicator on Left side lights.
|
||||
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF);
|
||||
@@ -174,6 +250,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_L3, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L4, RGB_RED);
|
||||
rgb_matrix_set_color(LED_TAB, RGB_RED);
|
||||
rgb_matrix_set_color(LED_F12, RGB_RED);
|
||||
}
|
||||
|
||||
// System NumLock warning indicator RGB setup
|
||||
@@ -197,12 +274,19 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
|
||||
// CapsLock RGB setup
|
||||
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE);
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE);
|
||||
}
|
||||
else {
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE);
|
||||
}
|
||||
|
||||
// Winkey disabled (gaming) mode RGB setup
|
||||
@@ -239,9 +323,9 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_LALT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_SPC, RGB_RED);
|
||||
rgb_matrix_set_color(LED_LWIN, RGB_RED);
|
||||
rgb_matrix_set_color(LED_RALT, RGB_RED);
|
||||
//rgb_matrix_set_color(LED_RALT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_FN, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_RCTL, RGB_RED);
|
||||
//rgb_matrix_set_color(LED_RCTL, RGB_RED);
|
||||
rgb_matrix_set_color(LED_BSLS, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L1, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L2, RGB_RED);
|
||||
@@ -264,37 +348,90 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_R8, RGB_RED);
|
||||
rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE);
|
||||
#ifdef GAME_ENABLE
|
||||
rgb_matrix_set_color(LED_P, RGB_CHARTREUSE);
|
||||
#else
|
||||
rgb_matrix_set_color(LED_P, RGB_RED);
|
||||
#endif // GAME_ENABLE
|
||||
|
||||
//Add RGB statuses for user.config toggles
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
rgb_matrix_set_color(LED_1, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_1, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
rgb_matrix_set_color(LED_2, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_2, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.esc_double_tap_to_baselyr) {
|
||||
rgb_matrix_set_color(LED_3, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_3, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.del_right_home_top) {
|
||||
rgb_matrix_set_color(LED_4, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_4, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.double_tap_shift_for_capslock) {
|
||||
rgb_matrix_set_color(LED_5, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_5, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.encoder_press_mute_or_media) {
|
||||
rgb_matrix_set_color(LED_6, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_6, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.ins_on_shft_bkspc_or_del) {
|
||||
rgb_matrix_set_color(LED_7, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_7, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.disable_space_mods) {
|
||||
rgb_matrix_set_color(LED_8, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_8, RGB_PURPLE);
|
||||
}
|
||||
|
||||
// Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code
|
||||
uint16_t timeout_threshold = get_timeout_threshold();
|
||||
if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN);
|
||||
if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_BLUE);
|
||||
else if (timeout_threshold < 140) {
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold % 10)], RGB_BLUE);
|
||||
} else { // >= 140 minutes, just show these 3 lights
|
||||
rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[10], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[11], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[12], RGB_CYAN);
|
||||
}
|
||||
break;
|
||||
|
||||
// Numpad & Mouse Keys overlay RGB
|
||||
case _NUMPADMOUSE:
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE);
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L5, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_L6, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RCTL, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RSFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_END, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGUP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGDN, RGB_CHARTREUSE);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_L5, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_L6, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L5, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_L6, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RCTL, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RSFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_END, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGUP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGDN, RGB_CHARTREUSE);
|
||||
break;
|
||||
|
||||
// MOUSEKEYS mode RGB
|
||||
@@ -308,19 +445,229 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_END, RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_PGUP, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_PGDN, RGB_OFFBLUE);
|
||||
|
||||
break;
|
||||
|
||||
// Colemak layer RGB
|
||||
#ifdef COLEMAK_LAYER_ENABLE
|
||||
// Colemak layer RGB
|
||||
#ifdef COLEMAK_LAYER_ENABLE
|
||||
case _COLEMAK:
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) {
|
||||
rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA);
|
||||
rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Paddle game logic
|
||||
#ifdef GAME_ENABLE
|
||||
case _GAME:
|
||||
if (!game_start) {
|
||||
srand((unsigned int) timer_read());
|
||||
|
||||
// Store user light settings
|
||||
last_hsv = rgb_matrix_get_hsv();
|
||||
rgb_matrix_sethsv_noeeprom(0, 0, 0);
|
||||
|
||||
paddle_pos_full = 8;
|
||||
paddle_lives = 4;
|
||||
bounce_count = 0;
|
||||
level_number = 0;
|
||||
damage_count = 0;
|
||||
|
||||
init_ball(0);
|
||||
ball[1].on = false;
|
||||
ball_timer = timer_read();
|
||||
|
||||
game_start = true;
|
||||
}
|
||||
|
||||
// Set level indicator
|
||||
if (level_number < 12) {
|
||||
rgb_matrix_set_color(GAME_R0[level_number], RGB_BLUE);
|
||||
}
|
||||
|
||||
// Set life bar
|
||||
for (uint8_t i = 0; i < paddle_lives; i++) {
|
||||
rgb_matrix_set_color(GAME_LIVES[i], RGB_GREEN);
|
||||
}
|
||||
|
||||
uint8_t paddle_pos = paddle_pos_full >> 1;
|
||||
|
||||
if (damage_count > 0) {
|
||||
// Flash paddle when receiving damage
|
||||
if (timer_elapsed(damage_timer) > 500) {
|
||||
--damage_count;
|
||||
damage_timer = timer_read();
|
||||
}
|
||||
if ((damage_count & 1) == 0) {
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_RED);
|
||||
}
|
||||
}
|
||||
if (damage_count == 0) {
|
||||
ball_timer = timer_read();
|
||||
}
|
||||
|
||||
} else if (paddle_lives == 0) {
|
||||
// Game over
|
||||
for (uint8_t i = 0; i < sizeof(LED_GAME_OVER) / sizeof(LED_GAME_OVER[0]); i++) {
|
||||
rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
|
||||
}
|
||||
|
||||
} else if (level_number >= 12) {
|
||||
// You win
|
||||
if (rgb_value.r == 0xff && rgb_value.g < 0xff) {
|
||||
if (rgb_value.b > 0) {
|
||||
--rgb_value.b;
|
||||
} else {
|
||||
++rgb_value.g;
|
||||
}
|
||||
} else if (rgb_value.g == 0xff && rgb_value.b < 0xff) {
|
||||
if (rgb_value.r > 0) {
|
||||
--rgb_value.r;
|
||||
} else {
|
||||
++rgb_value.b;
|
||||
}
|
||||
} else if (rgb_value.b == 0xff && rgb_value.r < 0xff) {
|
||||
if (rgb_value.g > 0) {
|
||||
--rgb_value.g;
|
||||
} else {
|
||||
++rgb_value.r;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
}
|
||||
rgb_matrix_set_color(GAME_SMILE1[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE1[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE2[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE2[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
|
||||
} else {
|
||||
// normal game loop
|
||||
|
||||
// Set paddle position
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_GREEN);
|
||||
}
|
||||
|
||||
// Ball movement logic happens at intervals
|
||||
if (timer_elapsed(ball_timer) > GAME_TIMER[level_number]) {
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (ball[i].on) {
|
||||
// Ball movement
|
||||
if (ball[i].up) {
|
||||
if (ball[i].y > 0) {
|
||||
--ball[i].y;
|
||||
if (!ball[i].left) ++ball[i].x;
|
||||
} else {
|
||||
// Count reflections. If > 10, increase level
|
||||
++bounce_count;
|
||||
if (bounce_count >= 10) {
|
||||
bounce_count = 0;
|
||||
++level_number;
|
||||
}
|
||||
ball[i].on = false;
|
||||
}
|
||||
} else {
|
||||
++ball[i].y;
|
||||
if (ball[i].left) --ball[i].x;
|
||||
if (ball[i].y > 4) {
|
||||
// Remove a life if ball isn't returned and isn't enemy
|
||||
if (!ball[i].enemy) {
|
||||
hurt_paddle();
|
||||
i = 2;
|
||||
} else {
|
||||
ball[i].on = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ball[0].y == 4 && !ball[1].on) {
|
||||
init_ball(1);
|
||||
}
|
||||
if (ball[1].y == 4 && !ball[0].on) {
|
||||
init_ball(0);
|
||||
}
|
||||
if (!ball[0].on && !ball[1].on) {
|
||||
init_ball(0);
|
||||
}
|
||||
ball_timer = timer_read();
|
||||
}
|
||||
|
||||
// Other ball stuff
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (ball[i].on) {
|
||||
// Ball deflection logic
|
||||
if (!ball[i].up && ball[i].y == 4 && (ball[i].x == paddle_pos || ball[i].x == paddle_pos - 1 || ball[i].x == paddle_pos + 1)) {
|
||||
if (!ball[i].enemy) {
|
||||
--ball[i].y;
|
||||
if (!ball[i].left) {
|
||||
++ball[i].x;
|
||||
}
|
||||
ball[i].up = true;
|
||||
} else {
|
||||
hurt_paddle();
|
||||
i = 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Ball display
|
||||
switch (ball[i].y) {
|
||||
case 0:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif //GAME_ENABLE
|
||||
default:
|
||||
#ifdef GAME_ENABLE
|
||||
if (game_start) {
|
||||
// Reset lighting settings
|
||||
game_start = false;
|
||||
rgb_matrix_sethsv_noeeprom(last_hsv.h, last_hsv.s, last_hsv.v);
|
||||
}
|
||||
#endif //GAME_ENABLE
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -329,8 +676,6 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
void keyboard_post_init_keymap(void) {
|
||||
// keyboard_post_init_user() moved to userspace
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
|
||||
rgb_matrix_sethsv_noeeprom(20, 255, 127); // Default startup color (Hue:amber Saturation:full Value(brightness):mid)
|
||||
activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
|
||||
Copyright 2021 Tomas Guinan
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
const uint16_t GAME_TIMER[] = {
|
||||
400, 350, 300, 250, 400, 350, 300, 250, 225, 200, 175, 150
|
||||
};
|
||||
|
||||
bool game_start = false;
|
||||
HSV last_hsv;
|
||||
static uint8_t paddle_pos_full;
|
||||
static uint8_t paddle_lives;
|
||||
static uint8_t level_number;
|
||||
static uint8_t bounce_count;
|
||||
static uint8_t damage_count;
|
||||
static uint16_t damage_timer;
|
||||
static uint16_t ball_timer;
|
||||
|
||||
struct BallStruct
|
||||
{
|
||||
uint8_t x;
|
||||
uint8_t y;
|
||||
bool on;
|
||||
bool up;
|
||||
bool left;
|
||||
bool enemy;
|
||||
};
|
||||
|
||||
struct BallStruct ball[2];
|
||||
|
||||
void init_ball(uint8_t i);
|
||||
void hurt_paddle(void);
|
||||
|
||||
#endif //GAME_ENABLE
|
||||
@@ -1,6 +1,6 @@
|
||||
# gourdo1's GMMK Pro ANSI layout
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro ANSI layout
|
||||
|
||||
This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin) GMMK Pro layout with several additions, modifications, a tweaked keymap, updated layers and expanded RGB controls.
|
||||
This Windows-centric ANSI layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin) GMMK Pro layout with many additions, fixes, a revamped keymap, persistent user customizations, updated layers, [Tomas Guinan's paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB effects and controls.
|
||||
|
||||

|
||||
|
||||
@@ -8,26 +8,51 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f
|
||||
|
||||
### Core Functionality
|
||||
|
||||
* Quick & Easy Customization: Open a text editor and hit [FN]` (tilde key) to view toggle-able features. (added Jun 29, 2022)
|
||||
* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022)
|
||||
* Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled
|
||||
* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with FN+R
|
||||
* Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys
|
||||
* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022)
|
||||
* Multi-monitor app moving shortcuts: FN + [,] (square brackets) to move current app window to next monitor (added Apr 11, 2022)
|
||||
* Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com". (added Apr 7, 2022)
|
||||
* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with [FN]R
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you? Use cursor keys to move the mouse
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry
|
||||
* Gaming mode ([FN]Win-key) locks out Win-key and double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming keys
|
||||
* Caps Word enabled: To capitalize the next word only, press and release left and right shift at the same time. (added Feb 25, 2022)
|
||||
* Multi-monitor app moving shortcuts: [FN] ],[ (square brackets) to move current app window to next monitor (added Apr 11, 2022)
|
||||
* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted)
|
||||
* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md)
|
||||
* Paddle game accessible via [FN]P. Hit [FN]P again or double tap [ESC] to exit (added May 5, 2022)
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: [FN]/ (added May 14, 2022)
|
||||
* Single-handed shortcut for WinKey-L (lock Windows): [FN]L (added May 17, 2022)
|
||||
* Domain shortcuts: [FN]. for .com, [FN]O for outlook.com, [FN]Y for yahoo.com, [FN]H for hotmail.com, [FN]G for gmail.com. (added Apr 7, 2022)
|
||||
* FN-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md)
|
||||
* Home key on F13, Del key right of Backspace
|
||||
* Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer)
|
||||
* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+F13
|
||||
* [Colemak](https://colemak.com/) key layout support (Layer accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple)
|
||||
* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: [FN]F11, [FN]F12, [FN]F13
|
||||
* [Colemak](https://colemak.com/) key layout support (Accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple)
|
||||
* Double tap ESC any time to revert to base layer (added Feb 26, 2022)
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes (updated May 24, 2022)
|
||||
* RGB backlight now remembers last color & effect settings after power down (updated May 24, 2022)
|
||||
|
||||
### Quick & Easy Customization
|
||||
* Below features can be toggled by holding [FN] and pressing the number corresponding to that feature. Changes are saved to EEPROM for persistence.
|
||||
* Print current settings by opening a text editor and pressing [FN]~ (CAUTION: verbose!)
|
||||
* Quick view current settings by holding [FN] and viewing RGB under number keys (green means ON, violet means OFF)
|
||||
|
||||
#### Toggle-able Settings:
|
||||
1. CapsLock RGB - highlight under alpha keys
|
||||
2. Numpad RGB - highlight under numpad layer keys
|
||||
3. ESC key - Double tap ESC key to go to base layer
|
||||
4. Swap DEL and HOME - Default is DEL to the right of BKSPC & HOME is above BKSPC
|
||||
5. Capslock function - Toggle between double tap LShift for CapsLock with Numpad on CapsLock key (default) and standard CapsLock
|
||||
6. Encoder button - default mutes volume; alternate plays/pauses media
|
||||
7. Insert function - Toggle between SHIFT-BKSPC and SHIFT-DEL
|
||||
8. Modded-Space override - Use standard Space in place of modded-Space functions
|
||||
|
||||
### Numpad + Mouse Keys (Capslock key)
|
||||
|
||||
* Overlay numpad + [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting
|
||||
* Numpad uses Space-bar as Enter for rapid number entry (added May 17, 2022)
|
||||
* This layer disables much of the keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys, surrounding keys become mouse buttons and all number keys become numpad versions (so Alt char codes work regardless of which set you use)
|
||||
* Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle)
|
||||
* FN and N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output ([FN]N to toggle)
|
||||
* Double zero on comma key.
|
||||
* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. (added Mar 15, 2022)
|
||||
* Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel
|
||||
@@ -37,40 +62,54 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f
|
||||
|
||||
* Default knob turn changes volume; button press toggles mute
|
||||
* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease (added Feb 17, 2022)
|
||||
* FN knob turn changes RGB idle timeout
|
||||
* FN + knob turn changes RGB idle timeout
|
||||
* FN + knob push puts PC to Sleep (Added May 14, 2022)
|
||||
* holding Left Shift changes layers
|
||||
* holding Right Shift navigates page up/down
|
||||
* holding Left Ctrl navigates prev/next word
|
||||
* holding Right Ctrl changes RGB hue/color
|
||||
* holding Left Alt changes media prev/next track
|
||||
|
||||
### Paddle Game
|
||||
|
||||
* Based on [Tomas Guinan's excellent GMMK Pro paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame)
|
||||
* Paddle Game playable by pressing [FN]P (P lights up green in FN layer if game is enabled in firmware, otherwise it lights up red)
|
||||
* Use rotary encoder to control paddle
|
||||
* Contains 12 levels, indicated by blue LED on F-key row
|
||||
* Player has 4 lives, indicated by nav cluster
|
||||
* Deflect white balls while avoiding red ones
|
||||
* Use [FN]P, double tap ESC or otherwise change layer to quit game
|
||||
|
||||
### Global RGB Controls
|
||||
|
||||
* RGB backlight lighting effect: FN + up/down
|
||||
* RGB backlight effect speed: FN + left/right
|
||||
* RGB backlight hue cycle: FN + A/D
|
||||
* RGB backlight brightness: FN + W/S
|
||||
* RGB backlight saturation: FN + Q/E (added Feb 4, 2022)
|
||||
* RGB backlight night mode toggle: FN + Z (indicators still work)
|
||||
* RGB backlight timeout: FN + Encoder or "-" and "=" (default 15 minutes) (updated Apr 7, 2022)
|
||||
* indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes
|
||||
* RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange)
|
||||
* FN + Z to turn off RGB backlighting; press again to toggle
|
||||
* RGB backlight lighting effect: [FN]up/down
|
||||
* RGB backlight effect speed: [FN]left/right
|
||||
* RGB backlight hue cycle: [FN]A/D
|
||||
* RGB backlight brightness: [FN]W/S
|
||||
* RGB backlight saturation: [FN]Q/E (added Feb 4, 2022)
|
||||
* RGB backlight night mode toggle: [FN]Z (indicators still work)
|
||||
* RGB backlight timeout: [FN]Encoder or "-" and "=" (default 15 minutes) (updated June 28, 2022)
|
||||
* F-key row indicator lights (cyan and blue) in FN layer display the current backlight timeout in minutes
|
||||
* [FN]Z to turn off RGB backlighting (indicator lights still work); press again to toggle
|
||||
* Left side RGB indicators in order from top: System NumLock off (orange), Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
|
||||
### Advanced Controls
|
||||
|
||||
* FN + \ to get to bootloader mode
|
||||
* FN + [ESC] to clear EEPROM (then unplug and re-plug) (added Apr 11, 2022)
|
||||
* FN + R to toggle N-key Rollover (added Apr 11, 2022)
|
||||
* [FN]\ to get to bootloader mode
|
||||
* [FN][ESC] to clear EEPROM (added Apr 11, 2022)
|
||||
* [FN]R to toggle N-key Rollover (added Apr 11, 2022)
|
||||
* [FN]/ is single-handed shortcut to Ctrl-Alt-Delete (added May 14, 2022)
|
||||
* [FN]L is single-handed shortcut to Win-L (lock Windows) (added May 17, 2022)
|
||||
* [FN][Encoder press] to sleep Windows PC (added May 14, 2022)
|
||||
|
||||
Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin
|
||||
Link to latest firmware binary: https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin
|
||||
|
||||
Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf
|
||||
Link to cheatsheet: https://github.com/gourdo1/gmmkpro-media/raw/main/GMMK_Pro_Cheatsheet.pdf
|
||||
|
||||
|
||||
## rules.mk Options
|
||||
|
||||
STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default
|
||||
STARTUP_NUMLOCK_ON = yes - Turns on NUMLOCK by default
|
||||
|
||||
ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions
|
||||
|
||||
@@ -78,20 +117,21 @@ TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift
|
||||
|
||||
IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically
|
||||
|
||||
INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active.
|
||||
INVERT_NUMLOCK_INDICATOR - Inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with overlay numpad, so should be off when numpad layer is active unless you have an external numpad.
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes - Enable optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer.
|
||||
COLEMAK_LAYER_ENABLE = yes - Enables optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer.
|
||||
|
||||
GAME_ENABLE ?= yes - Enables Paddle Game
|
||||
|
||||
## Layer Diagrams
|
||||
### Base layer
|
||||

|
||||

|
||||
|
||||
### Fn Layer
|
||||

|
||||
### FN Layer
|
||||

|
||||
|
||||
### Layer 2 (Numpad)
|
||||

|
||||

|
||||
|
||||
### COLEMAK layer
|
||||

|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 gourdo1 <jcblake@outlook.com>
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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
|
||||
@@ -16,6 +16,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
//Define variables for Game
|
||||
bool fn_active = false;
|
||||
RGB rgb_value;
|
||||
|
||||
// Custom GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h)
|
||||
#define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps
|
||||
#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors
|
||||
@@ -194,7 +199,7 @@ const uint8_t LED_LIST_NUMROW[] = {
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_LETTERS[] = {
|
||||
LED_1,
|
||||
/* LED_1,
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
@@ -203,7 +208,7 @@ const uint8_t LED_LIST_LETTERS[] = {
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_0, */
|
||||
LED_Q,
|
||||
LED_W,
|
||||
LED_E,
|
||||
@@ -284,4 +289,122 @@ const uint8_t LED_SIDE_RIGHT[] = {
|
||||
LED_R8
|
||||
};
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
// Game LED rules
|
||||
const uint8_t GAME_LIVES[] = {
|
||||
LED_DEL,
|
||||
LED_PGUP,
|
||||
LED_PGDN,
|
||||
LED_END
|
||||
};
|
||||
const uint8_t GAME_PADDLE[] = {
|
||||
LED_Z,
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_N,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_DOT,
|
||||
LED_SLSH
|
||||
};
|
||||
const uint8_t GAME_SMILE1[] = {
|
||||
LED_A,
|
||||
LED_S,
|
||||
LED_D,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_SCLN,
|
||||
LED_QUOT
|
||||
};
|
||||
const uint8_t GAME_SMILE2[] = {
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL
|
||||
};
|
||||
const uint8_t GAME_R4[] = {
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_N,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_DOT
|
||||
};
|
||||
const uint8_t GAME_R3[] = {
|
||||
LED_S,
|
||||
LED_D,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_SCLN
|
||||
};
|
||||
const uint8_t GAME_R2[] = {
|
||||
LED_W,
|
||||
LED_E,
|
||||
LED_R,
|
||||
LED_T,
|
||||
LED_Y,
|
||||
LED_U,
|
||||
LED_I,
|
||||
LED_O,
|
||||
LED_P,
|
||||
LED_LBRC
|
||||
};
|
||||
const uint8_t GAME_R1[] = {
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL
|
||||
};
|
||||
const uint8_t GAME_R0[] = {
|
||||
LED_F1,
|
||||
LED_F2,
|
||||
LED_F3,
|
||||
LED_F4,
|
||||
LED_F5,
|
||||
LED_F6,
|
||||
LED_F7,
|
||||
LED_F8,
|
||||
LED_F9,
|
||||
LED_F10,
|
||||
LED_F11,
|
||||
LED_F12
|
||||
};
|
||||
const uint8_t LED_GAME_OVER[] = {
|
||||
LED_5,
|
||||
LED_8,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_C,
|
||||
LED_M
|
||||
};
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
#endif
|
||||
@@ -1,18 +1,18 @@
|
||||
SRC += caps_word.c
|
||||
|
||||
LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size
|
||||
CONSOLE_ENABLE = no
|
||||
COMMAND_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
||||
|
||||
VIA_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
VIA_ENABLE = yes
|
||||
|
||||
TD_LSFT_CAPSLOCK_ENABLE = yes
|
||||
MOUSEKEY_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
CAPS_WORD_ENABLE = yes # Enable built-in Caps Word functionality
|
||||
IDLE_TIMEOUT_ENABLE = yes
|
||||
STARTUP_NUMLOCK_ON = yes
|
||||
ENCODER_DEFAULTACTIONS_ENABLE = no
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes # Enable Colemak layer / set to no to disable
|
||||
INVERT_NUMLOCK_INDICATOR = yes
|
||||
GAME_ENABLE ?= yes # Enable Paddle Game / set to no to disable
|
||||
ifeq ($(strip $(GAME_ENABLE)), yes)
|
||||
OPT_DEFS += -DGAME_ENABLE
|
||||
endif
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
/* Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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
|
||||
|
||||
// Force n-key rollover
|
||||
#define FORCE_NKRO
|
||||
|
||||
// Set TT to two taps
|
||||
#define TAPPING_TOGGLE 2
|
||||
|
||||
#ifdef COMMAND_ENABLE
|
||||
#define IS_COMMAND() (get_mods() == MOD_MASK_CTRL) //debug commands accessed by holding down both CTRLs: https://github.com/qmk/qmk_firmware/blob/master/docs/feature_command.md
|
||||
#endif
|
||||
|
||||
// Caps Word configuration
|
||||
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
|
||||
#define CAPS_WORD_IDLE_TIMEOUT 10000 // Automatically turn off after x milliseconds of idle. 0 to never timeout.
|
||||
|
||||
// Handle GRAVESC combo keys
|
||||
#define GRAVE_ESC_ALT_OVERRIDE
|
||||
// Always send Escape if Alt is pressed
|
||||
#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
// Always send Escape if Control is pressed
|
||||
|
||||
// #define TAPPING_TERM 180
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM_PER_KEY
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
#define RGB_MATRIX_KEYPRESSES // Enables REACTIVE & SPLASH modes
|
||||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enables Heatmap, Rain
|
||||
|
||||
// RGB step values
|
||||
#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10)
|
||||
#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17)
|
||||
#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17)
|
||||
|
||||
// Startup values, when none have been set
|
||||
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_REACTIVE // Sets the default effect mode, if none has been set (was RGB_MATRIX_SOLID_COLOR)
|
||||
#define RGB_MATRIX_STARTUP_HUE 24 // Sets the default hue value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_SAT 255 // Sets the default saturation value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_VAL 127 // Sets the default brightness value, if none has been set
|
||||
#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
|
||||
|
||||
// Uncomment any #undef line below to turn OFF any default enabled RGB background effect (enabled in keyboards/gmmk/pro/config.h).
|
||||
#undef ENABLE_RGB_MATRIX_ALPHAS_MODS // Solid color (seems redundant; seems same as RGB_MATRIX_SOLID_COLOR?)
|
||||
//#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static, horizontal rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static, vertical Rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_BREATHING // Breathing animation using selected HSV color
|
||||
#undef ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right (with black)
|
||||
#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades sat (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness (with black)
|
||||
#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades brightness (with white)
|
||||
//#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness (with black)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard cycling through rainbow
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient moving left to right
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
|
||||
#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient chevron scrolling left to right (too similar to cycle left right)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Rainbow circles coming to center.
|
||||
#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Two Rainbow circles coming to 1/3 and 2/3 points. (seems mostly redundant with above)
|
||||
#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Built-in cycling pinwheel (seems redundant with below)
|
||||
//#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
|
||||
#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON // Spinning rainbow (more distracting transitions)
|
||||
//#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Spinning rainbow (smoother)
|
||||
#undef ENABLE_RGB_MATRIX_DUAL_BEACON // Two rainbows spinning around keyboard (distracting, busy)
|
||||
#undef ENABLE_RGB_MATRIX_RAINDROPS // Sustained raindrops of blue, green, yellow (confusing to use with RGB layers)
|
||||
//#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Sustained raindrops of blue, purple, pink, green (confusing to use with RGB layers, but slightly better than above)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back (very subtle)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left (very subtle)
|
||||
#undef ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right (very subtle)
|
||||
//#undef ENABLE_RGB_MATRIX_PIXEL_RAIN // Non-sustained raindrops of pastel colors
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FLOW // More active version of pixel rain with quick cycling (unusable, very distracting)
|
||||
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Same as Pixel Flow but with current HSV only (somewhat distracting)
|
||||
//Only enabled if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
|
||||
//#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP // Fading heatmap that follows keystrokes (has buggy side LEDs that glow red)
|
||||
//#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN // The Matrix (has buggy side LEDs that glow red)
|
||||
//Only enabled if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Key hits shown in current hue - all other keys black
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE // Keyboard lights up in chosen hue, key hits shown in complementary hue (try this as default?)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse around a single key hit then fades value out (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // same as above but more intense (Multi-key)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Column and Row single current color fade (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Column and Row single color fade. (Multi-key)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of key hit then fades (Single key)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multi-key hit then fades
|
||||
//#undef ENABLE_RGB_MATRIX_SPLASH // Full rainbow pulses from key hit. All else black.
|
||||
#undef ENABLE_RGB_MATRIX_MULTISPLASH // Full rainbow pulses from multi-keys. All else black. (distracting on multiple keystroke hits)
|
||||
#undef ENABLE_RGB_MATRIX_SOLID_SPLASH // Single color pulses from key hit. All else black. (distracting on multiple key hits)
|
||||
//#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Single color pulses from muli-keys. All else black.
|
||||
#endif //RGB_MATRIX_ENABLE
|
||||
|
||||
// Add a layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable
|
||||
#if defined COLEMAK_LAYER_ENABLE
|
||||
#ifdef GAME_ENABLE
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
|
||||
#define _COLEMAK 5
|
||||
#else
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
|
||||
#define _COLEMAK 4
|
||||
#endif //GAME_ENABLE
|
||||
#endif // COLEMAK_LAYER_ENABLE
|
||||
|
||||
/*
|
||||
// Mouse Keys Accelerated Mode Definitions
|
||||
#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10)
|
||||
#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement.
|
||||
#define MOUSEKEY_MOVE_DELTA 8 // Step size (default: 8)
|
||||
#define MOUSEKEY_MAX_SPEED 9 // Maximum cursor speed at which acceleration stops (default: 10)
|
||||
#define MOUSEKEY_TIME_TO_MAX 150 // Time until maximum cursor speed is reached (default: 30)
|
||||
#define MOUSEKEY_WHEEL_DELAY 0 // Delay between pressing a wheel key and wheel movement (default: 10)
|
||||
#define MOUSEKEY_WHEEL_INTERVAL 80 // Time between wheel movements (default: 80)
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 8 // Maximum number of scroll steps per scroll action (default: 8)
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 // Time until maximum scroll speed is reached (default: 40)
|
||||
*/
|
||||
|
||||
// Mouse Keys Kinetic Mode Definitions
|
||||
#define MK_KINETIC_SPEED // Enable Kinetic mode: Uses a quadratic curve on cursor speed to allow precise movements at the beginning and increases speed thereafter.
|
||||
#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10)
|
||||
#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement.
|
||||
#define MOUSEKEY_MOVE_DELTA 5 // Step size for accelerating from initial to base speed (default: 8)
|
||||
#define MOUSEKEY_MOVE_MAX 50 // use instead of BASE SPEED to limit speed in Kinetic mode
|
||||
#define MOUSEKEY_INITIAL_SPEED 100 // Initial speed of the cursor in pixels per second (default: 100)
|
||||
//#define MOUSEKEY_BASE_SPEED 800 // (broken in QMK 0.16.0) Maximum cursor speed at which acceleration stops (default: 1000)
|
||||
#define MOUSEKEY_DECELERATED_SPEED 400 // Decelerated cursor speed (default: 400)
|
||||
#define MOUSEKEY_ACCELERATED_SPEED 2000 // Accelerated cursor speed (default: 3000)
|
||||
#define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 16 // Initial number of movements of the mouse wheel (default: 16)
|
||||
#define MOUSEKEY_WHEEL_BASE_MOVEMENTS 32 // Maximum number of movements at which acceleration stops (default: 32)
|
||||
#define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 // Accelerated wheel movements (default: 48)
|
||||
#define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 // Decelerated wheel movements (default: 8)
|
||||
@@ -0,0 +1,682 @@
|
||||
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
|
||||
Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 RustyBrakes (ISO conversion)
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in /users/gourdo1/gourdo1.c
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#include "rgb_matrix_map.h"
|
||||
|
||||
#include "gourdo1.h"
|
||||
|
||||
#include "paddlegame.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Base Layout
|
||||
*
|
||||
* ,-------------------------------------------------------------------------------------------------------------.
|
||||
* | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute |
|
||||
* |=============================================================================================================|
|
||||
* | ISO | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------|
|
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | || PgUp |
|
||||
* |---------+------+------+------+------+------+------+------+------+------+------+------+------+ ++------|
|
||||
* | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | ISO| Enter || PgDn |
|
||||
* |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------|
|
||||
* | LShift | ISO | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End |
|
||||
* |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======|
|
||||
* | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght |
|
||||
* `------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_BASE] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, LEFTOFENC, ENCFUNC,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, BELOWENC,
|
||||
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_PGUP,
|
||||
CAPSNUM, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
|
||||
LSFTCAPSWIN,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_END,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* FN1 Layout
|
||||
*
|
||||
* ,-------------------------------------------------------------------------------------------------------------.
|
||||
* | Esc ||MyCmp |WbHom | Calc |MdSel ||MdPrv |MdNxt |MdPly |MdStp ||VolDn |VolUp |PrScr |ScrLk ||Pause ||Sleep |
|
||||
* |=============================================================================================================|
|
||||
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |RGBTOD|RGBTOI| ________ ||RGBTOG|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------|
|
||||
* | ______ |RGBSAD|RGBVAI|RGBSAI| NKRO | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | || Home |
|
||||
* |---------+------+------+------+------+------+------+------+------+------+------+------+------+ ++------|
|
||||
* | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | ___ | ____ || End |
|
||||
* |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------|
|
||||
* | ____ |RESET |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| CAD | ______ ||RGBMOD|| ____ |
|
||||
* |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======|
|
||||
* | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI|
|
||||
* `------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
[_FN1] = LAYOUT(
|
||||
EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, TG(_GAME),SWAP_L, SWAP_R, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, _______, KC_END,
|
||||
_______, RESET, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
|
||||
[_GAME] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
#else
|
||||
[_FN1] = LAYOUT(
|
||||
EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, _______, KC_END,
|
||||
_______, RESET, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
/* _NUMPADMOUSE Layout
|
||||
* Note: A symbol preceded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad.
|
||||
* ,-------------------------------------------------------------------------------------------------------------.
|
||||
* | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ |
|
||||
* |=============================================================================================================|
|
||||
* | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------|
|
||||
* | ______ | PGUP | Up | PGDN | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | || WhUp |
|
||||
* |---------+------+------+------+------+------+------+------+------+------+------+------+------+ ++------|
|
||||
* | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ___ | ___ |P-Enter|| WhDn |
|
||||
* |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------|
|
||||
* | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | MBt1 ||MS_UP || MBt2 |
|
||||
* |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======|
|
||||
* | ____ | ____ | ____ | _____ | ____ | ____ | MBt3 ||MS_LT |MS_DN |MS_RT |
|
||||
* `------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_NUMPADMOUSE] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______,
|
||||
_______, KC_PGUP, KC_UP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, KC_WH_U,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, _______, KC_PENT, KC_WH_D,
|
||||
_______, _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||
_______, _______, _______, KC_PENT, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
),
|
||||
|
||||
[_MOUSEKEY] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_D,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
),
|
||||
|
||||
#ifdef COLEMAK_LAYER_ENABLE
|
||||
[_COLEMAK] = LAYOUT(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, _______,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_PGUP,
|
||||
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
|
||||
_______, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
|
||||
_______, _______, _______, KC_SPC, KC_RALT, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
#endif // COLEMAK_LAYER_ENABLE
|
||||
};
|
||||
|
||||
#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults
|
||||
void encoder_action_rgbhue(bool clockwise) {
|
||||
if (clockwise)
|
||||
rgblight_increase_hue_noeeprom();
|
||||
else
|
||||
rgblight_decrease_hue_noeeprom();
|
||||
}
|
||||
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
uint8_t mods_state = get_mods();
|
||||
if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers
|
||||
encoder_action_layerchange(clockwise);
|
||||
} else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn
|
||||
unregister_mods(MOD_BIT(KC_RSFT));
|
||||
encoder_action_navpage(clockwise);
|
||||
register_mods(MOD_BIT(KC_RSFT));
|
||||
} else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word
|
||||
encoder_action_navword(clockwise);
|
||||
} else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour
|
||||
encoder_action_rgbhue(clockwise);
|
||||
} else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track
|
||||
encoder_action_mediatrack(clockwise);
|
||||
} else {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _FN1:
|
||||
#ifdef IDLE_TIMEOUT_ENABLE
|
||||
timeout_update_threshold(clockwise);
|
||||
#endif
|
||||
break;
|
||||
#ifdef GAME_ENABLE
|
||||
case _GAME:
|
||||
// Game: Paddle movement
|
||||
if (damage_count == 0) {
|
||||
if (clockwise) {
|
||||
if (paddle_pos_full < 15) ++paddle_pos_full;
|
||||
} else {
|
||||
if (paddle_pos_full > 0) --paddle_pos_full;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif //GAME_ENABLE
|
||||
default:
|
||||
encoder_action_volume(clockwise); // Otherwise it just changes volume
|
||||
break;
|
||||
}
|
||||
}
|
||||
//return true; //set to return false to counteract enabled encoder in pro.c
|
||||
return false;
|
||||
}
|
||||
#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
// Game logic
|
||||
#ifdef GAME_ENABLE
|
||||
void init_ball(uint8_t i) {
|
||||
i &= 1;
|
||||
ball[i].on = true;
|
||||
ball[i].up = false;
|
||||
ball[i].y = 0;
|
||||
ball[i].x = rand() % 16;
|
||||
|
||||
// Set initial ball state
|
||||
if (ball[i].x < 8) {
|
||||
ball[i].left = false;
|
||||
} else {
|
||||
ball[i].x -= 4;
|
||||
ball[i].left = true;
|
||||
}
|
||||
|
||||
// 1/4 chance of being an enemy ball after level 6
|
||||
if (level_number > 3) {
|
||||
ball[i].enemy = ((rand() % 4) == 0);
|
||||
} else {
|
||||
ball[i].enemy = false;
|
||||
}
|
||||
}
|
||||
|
||||
void hurt_paddle(void) {
|
||||
if (paddle_lives > 0) {
|
||||
--paddle_lives;
|
||||
}
|
||||
damage_timer = timer_read();
|
||||
damage_count = 10;
|
||||
|
||||
// Reset board
|
||||
init_ball(0);
|
||||
ball[1].on = false;
|
||||
}
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
// Capslock, Scroll lock and Numlock indicator on Left side lights.
|
||||
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF);
|
||||
|
||||
// Scroll Lock RGB setup
|
||||
if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) {
|
||||
rgb_matrix_set_color(LED_L3, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L4, RGB_RED);
|
||||
rgb_matrix_set_color(LED_TAB, RGB_RED);
|
||||
rgb_matrix_set_color(LED_F12, RGB_RED);
|
||||
}
|
||||
|
||||
// System NumLock warning indicator RGB setup
|
||||
#ifdef INVERT_NUMLOCK_INDICATOR
|
||||
if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled
|
||||
rgb_matrix_set_color(LED_GRV, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_L1, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_L2, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_FN, RGB_ORANGE2);
|
||||
}
|
||||
#else
|
||||
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
|
||||
rgb_matrix_set_color(LED_GRV, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_L1, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_L2, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_FN, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
|
||||
// CapsLock RGB setup
|
||||
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE);
|
||||
}
|
||||
else {
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE);
|
||||
}
|
||||
}
|
||||
|
||||
// Winkey disabled (gaming) mode RGB setup
|
||||
if (keymap_config.no_gui) {
|
||||
rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Winkey red when disabled
|
||||
rgb_matrix_set_color(LED_W, RGB_CHARTREUSE); //light up gaming keys with WSAD higlighted
|
||||
rgb_matrix_set_color(LED_S, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_A, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_D, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_Q, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_E, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_R, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_TAB, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_F, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_Z, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_X, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_C, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_V, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_SPC, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_LCTL, RGB_ORANGE2);
|
||||
rgb_matrix_set_color(LED_LSFT, RGB_ORANGE2);
|
||||
}
|
||||
|
||||
// Fn selector mode RGB setup
|
||||
switch (get_highest_layer(layer_state)) { // special handling per layer
|
||||
case _FN1: // on Fn layer select what the encoder does when pressed
|
||||
rgb_matrix_set_color(LED_FN, RGB_RED); //FN key
|
||||
|
||||
//NEW RGB LIGHTING TO RING KEYBOARD ON FN LAYER ACTIVATION:
|
||||
for (uint8_t j = 0; j < ARRAYSIZE(LED_LIST_FUNCROW); j++) {
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[j], RGB_RED);
|
||||
}
|
||||
rgb_matrix_set_color(LED_LCTL, RGB_RED);
|
||||
rgb_matrix_set_color(LED_LALT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_SPC, RGB_RED);
|
||||
rgb_matrix_set_color(LED_LWIN, RGB_RED);
|
||||
//rgb_matrix_set_color(LED_RALT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_FN, RGB_OFFBLUE);
|
||||
//rgb_matrix_set_color(LED_RCTL, RGB_RED);
|
||||
rgb_matrix_set_color(LED_BSLS, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L1, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L2, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L3, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L4, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L5, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L6, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L7, RGB_RED);
|
||||
rgb_matrix_set_color(LED_L8, RGB_RED);
|
||||
rgb_matrix_set_color(LED_DOWN, RGB_RED);
|
||||
rgb_matrix_set_color(LED_LEFT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_RIGHT, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R1, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R2, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R3, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R4, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R5, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R6, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R7, RGB_RED);
|
||||
rgb_matrix_set_color(LED_R8, RGB_RED);
|
||||
rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE);
|
||||
#ifdef GAME_ENABLE
|
||||
rgb_matrix_set_color(LED_P, RGB_CHARTREUSE);
|
||||
#else
|
||||
rgb_matrix_set_color(LED_P, RGB_RED);
|
||||
#endif // GAME_ENABLE
|
||||
|
||||
//Add RGB statuses for user.config toggles
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
rgb_matrix_set_color(LED_1, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_1, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
rgb_matrix_set_color(LED_2, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_2, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.esc_double_tap_to_baselyr) {
|
||||
rgb_matrix_set_color(LED_3, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_3, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.del_right_home_top) {
|
||||
rgb_matrix_set_color(LED_4, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_4, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.double_tap_shift_for_capslock) {
|
||||
rgb_matrix_set_color(LED_5, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_5, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.encoder_press_mute_or_media) {
|
||||
rgb_matrix_set_color(LED_6, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_6, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.ins_on_shft_bkspc_or_del) {
|
||||
rgb_matrix_set_color(LED_7, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_7, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.disable_space_mods) {
|
||||
rgb_matrix_set_color(LED_8, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_8, RGB_PURPLE);
|
||||
}
|
||||
|
||||
// Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code
|
||||
uint16_t timeout_threshold = get_timeout_threshold();
|
||||
if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_BLUE);
|
||||
else if (timeout_threshold < 140) {
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold % 10)], RGB_BLUE);
|
||||
} else { // >= 140 minutes, just show these 3 lights
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[10], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[11], RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_LIST_FUNCROW[12], RGB_CYAN);
|
||||
}
|
||||
break;
|
||||
|
||||
// Numpad & Mouse Keys overlay RGB
|
||||
case _NUMPADMOUSE:
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE);
|
||||
}
|
||||
rgb_matrix_set_color(LED_L5, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_L6, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RCTL, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RSFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_END, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGUP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_PGDN, RGB_CHARTREUSE);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_L5, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_L6, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE);
|
||||
}
|
||||
break;
|
||||
|
||||
// MOUSEKEYS mode RGB
|
||||
case _MOUSEKEY:
|
||||
rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_RCTL, RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_RSFT, RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_END, RGB_CYAN);
|
||||
rgb_matrix_set_color(LED_PGUP, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_PGDN, RGB_OFFBLUE);
|
||||
break;
|
||||
|
||||
// Colemak layer RGB
|
||||
#ifdef COLEMAK_LAYER_ENABLE
|
||||
case _COLEMAK:
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) {
|
||||
rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA);
|
||||
rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
// Paddle game logic
|
||||
#ifdef GAME_ENABLE
|
||||
case _GAME:
|
||||
if (!game_start) {
|
||||
srand((unsigned int) timer_read());
|
||||
|
||||
// Store user light settings
|
||||
last_hsv = rgb_matrix_get_hsv();
|
||||
rgb_matrix_sethsv_noeeprom(0, 0, 0);
|
||||
|
||||
paddle_pos_full = 8;
|
||||
paddle_lives = 4;
|
||||
bounce_count = 0;
|
||||
level_number = 0;
|
||||
damage_count = 0;
|
||||
|
||||
init_ball(0);
|
||||
ball[1].on = false;
|
||||
ball_timer = timer_read();
|
||||
|
||||
game_start = true;
|
||||
}
|
||||
|
||||
// Set level indicator
|
||||
if (level_number < 12) {
|
||||
rgb_matrix_set_color(GAME_R0[level_number], RGB_BLUE);
|
||||
}
|
||||
|
||||
// Set life bar
|
||||
for (uint8_t i = 0; i < paddle_lives; i++) {
|
||||
rgb_matrix_set_color(GAME_LIVES[i], RGB_GREEN);
|
||||
}
|
||||
|
||||
uint8_t paddle_pos = paddle_pos_full >> 1;
|
||||
|
||||
if (damage_count > 0) {
|
||||
// Flash paddle when receiving damage
|
||||
if (timer_elapsed(damage_timer) > 500) {
|
||||
--damage_count;
|
||||
damage_timer = timer_read();
|
||||
}
|
||||
if ((damage_count & 1) == 0) {
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_RED);
|
||||
}
|
||||
}
|
||||
if (damage_count == 0) {
|
||||
ball_timer = timer_read();
|
||||
}
|
||||
|
||||
} else if (paddle_lives == 0) {
|
||||
// Game over
|
||||
for (uint8_t i = 0; i < sizeof(LED_GAME_OVER) / sizeof(LED_GAME_OVER[0]); i++) {
|
||||
rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
|
||||
}
|
||||
|
||||
} else if (level_number >= 12) {
|
||||
// You win
|
||||
if (rgb_value.r == 0xff && rgb_value.g < 0xff) {
|
||||
if (rgb_value.b > 0) {
|
||||
--rgb_value.b;
|
||||
} else {
|
||||
++rgb_value.g;
|
||||
}
|
||||
} else if (rgb_value.g == 0xff && rgb_value.b < 0xff) {
|
||||
if (rgb_value.r > 0) {
|
||||
--rgb_value.r;
|
||||
} else {
|
||||
++rgb_value.b;
|
||||
}
|
||||
} else if (rgb_value.b == 0xff && rgb_value.r < 0xff) {
|
||||
if (rgb_value.g > 0) {
|
||||
--rgb_value.g;
|
||||
} else {
|
||||
++rgb_value.r;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
}
|
||||
rgb_matrix_set_color(GAME_SMILE1[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE1[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE2[paddle_pos], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
rgb_matrix_set_color(GAME_SMILE2[paddle_pos + 3], rgb_value.r, rgb_value.g, rgb_value.b);
|
||||
|
||||
} else {
|
||||
// normal game loop
|
||||
|
||||
// Set paddle position
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
rgb_matrix_set_color(GAME_PADDLE[paddle_pos + i], RGB_GREEN);
|
||||
}
|
||||
|
||||
// Ball movement logic happens at intervals
|
||||
if (timer_elapsed(ball_timer) > GAME_TIMER[level_number]) {
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (ball[i].on) {
|
||||
// Ball movement
|
||||
if (ball[i].up) {
|
||||
if (ball[i].y > 0) {
|
||||
--ball[i].y;
|
||||
if (!ball[i].left) ++ball[i].x;
|
||||
} else {
|
||||
// Count reflections. If > 10, increase level
|
||||
++bounce_count;
|
||||
if (bounce_count >= 10) {
|
||||
bounce_count = 0;
|
||||
++level_number;
|
||||
}
|
||||
ball[i].on = false;
|
||||
}
|
||||
} else {
|
||||
++ball[i].y;
|
||||
if (ball[i].left) --ball[i].x;
|
||||
if (ball[i].y > 4) {
|
||||
// Remove a life if ball isn't returned and isn't enemy
|
||||
if (!ball[i].enemy) {
|
||||
hurt_paddle();
|
||||
i = 2;
|
||||
} else {
|
||||
ball[i].on = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ball[0].y == 4 && !ball[1].on) {
|
||||
init_ball(1);
|
||||
}
|
||||
if (ball[1].y == 4 && !ball[0].on) {
|
||||
init_ball(0);
|
||||
}
|
||||
if (!ball[0].on && !ball[1].on) {
|
||||
init_ball(0);
|
||||
}
|
||||
ball_timer = timer_read();
|
||||
}
|
||||
|
||||
// Other ball stuff
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (ball[i].on) {
|
||||
// Ball deflection logic
|
||||
if (!ball[i].up && ball[i].y == 4 && (ball[i].x == paddle_pos || ball[i].x == paddle_pos - 1 || ball[i].x == paddle_pos + 1)) {
|
||||
if (!ball[i].enemy) {
|
||||
--ball[i].y;
|
||||
if (!ball[i].left) {
|
||||
++ball[i].x;
|
||||
}
|
||||
ball[i].up = true;
|
||||
} else {
|
||||
hurt_paddle();
|
||||
i = 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Ball display
|
||||
switch (ball[i].y) {
|
||||
case 0:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R0[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R1[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R2[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R3[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (ball[i].enemy) {
|
||||
rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_RED);
|
||||
} else {
|
||||
rgb_matrix_set_color(GAME_R4[ball[i].x], RGB_WHITE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif //GAME_ENABLE
|
||||
default:
|
||||
#ifdef GAME_ENABLE
|
||||
if (game_start) {
|
||||
// Reset lighting settings
|
||||
game_start = false;
|
||||
rgb_matrix_sethsv_noeeprom(last_hsv.h, last_hsv.s, last_hsv.v);
|
||||
}
|
||||
#endif //GAME_ENABLE
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void keyboard_post_init_keymap(void) {
|
||||
// keyboard_post_init_user() moved to userspace
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
|
||||
Copyright 2021 Tomas Guinan
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
const uint16_t GAME_TIMER[] = {
|
||||
400, 350, 300, 250, 400, 350, 300, 250, 225, 200, 175, 150
|
||||
};
|
||||
|
||||
bool game_start = false;
|
||||
HSV last_hsv;
|
||||
static uint8_t paddle_pos_full;
|
||||
static uint8_t paddle_lives;
|
||||
static uint8_t level_number;
|
||||
static uint8_t bounce_count;
|
||||
static uint8_t damage_count;
|
||||
static uint16_t damage_timer;
|
||||
static uint16_t ball_timer;
|
||||
|
||||
struct BallStruct
|
||||
{
|
||||
uint8_t x;
|
||||
uint8_t y;
|
||||
bool on;
|
||||
bool up;
|
||||
bool left;
|
||||
bool enemy;
|
||||
};
|
||||
|
||||
struct BallStruct ball[2];
|
||||
|
||||
void init_ball(uint8_t i);
|
||||
void hurt_paddle(void);
|
||||
|
||||
#endif //GAME_ENABLE
|
||||
@@ -0,0 +1,122 @@
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro ISO layout
|
||||
|
||||
This Windows-centric ISO layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin) GMMK Pro layout with several additions, fixes, a tweaked keymap, updated layers, [Tomas Guinan's paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB controls.
|
||||
|
||||

|
||||
|
||||
## Features:
|
||||
|
||||
### Core Functionality
|
||||
|
||||
* ISO layout (added July xx, 2022)
|
||||
* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022)
|
||||
* Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled
|
||||
* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with Fn+R
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you on the road? Use cursor keys to move the mouse.
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry
|
||||
* Gaming mode (Fn+Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys
|
||||
* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022)
|
||||
* Multi-monitor app moving shortcuts: Fn+[,] (square brackets) to move current app window to next monitor (added Apr 11, 2022)
|
||||
* Capslock toggled by double tap of Left Shift key or Fn + Capslock (RGB green highlighted)
|
||||
* Paddle game accessible via Fn+P; Hit Fn+P again or double tap ESC to exit (added May 5, 2022)
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: Fn+/ (added May 14, 2022)
|
||||
* Single-handed shortcut for Win-L (lock Windows): Fn+L (added May 17, 2022)
|
||||
* Domain shortcuts: Fn+.=".com", Fn+O="outlook.com", Fn+Y="yahoo.com", Fn+H="hotmail.com", Fn+G="gmail.com". (added Apr 7, 2022)
|
||||
* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md)
|
||||
* Home key on F13, Del key right of Backspace
|
||||
* Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer)
|
||||
* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+F13
|
||||
* [Colemak](https://colemak.com/) key layout support (Layer accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple)
|
||||
* Double tap ESC any time to revert to base layer (added Feb 26, 2022)
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes (updated May 24, 2022)
|
||||
* RGB backlight now remembers last color & effect settings after power down (updated May 24, 2022)
|
||||
|
||||
### Numpad + Mouse Keys (Capslock key)
|
||||
|
||||
* Overlay numpad + [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting
|
||||
* Numpad uses Space-bar as Enter for rapid number entry (added May 17, 2022)
|
||||
* This layer disables much of the keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys, surrounding keys become mouse buttons and all number keys become numpad versions (so Alt char codes work regardless of which set you use)
|
||||
* Fn and N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (Fn+N to toggle)
|
||||
* Double zero on comma key.
|
||||
* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. (added Mar 15, 2022)
|
||||
* Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel
|
||||
* Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green
|
||||
|
||||
### Encoder Functionality
|
||||
|
||||
* Default knob turn changes volume; button press toggles mute
|
||||
* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease (added Feb 17, 2022)
|
||||
* Fn + knob turn changes RGB idle timeout
|
||||
* Fn + knob push puts PC to Sleep (Added May 14, 2022)
|
||||
* holding Left Shift changes layers
|
||||
* holding Right Shift navigates page up/down
|
||||
* holding Left Ctrl navigates prev/next word
|
||||
* holding Right Ctrl changes RGB hue/color
|
||||
* holding Left Alt changes media prev/next track
|
||||
|
||||
### Paddle Game
|
||||
|
||||
* Based on [Tomas Guinan's excellent GMMK Pro paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame)
|
||||
* Paddle Game playable by pressing Fn+P (P lights up green in Fn layer if game is enabled in firmware, otherwise it lights up red)
|
||||
* Use rotary encoder to control paddle
|
||||
* Contains 12 levels, indicated by blue LED on F-key row
|
||||
* Player has 4 lives, indicated by nav cluster
|
||||
* Deflect white balls while avoiding red ones
|
||||
* Use Fn+P, double tap ESC or otherwise change layer to quit game
|
||||
|
||||
### Global RGB Controls
|
||||
|
||||
* RGB backlight lighting effect: Fn+up/down
|
||||
* RGB backlight effect speed: Fn+left/right
|
||||
* RGB backlight hue cycle: Fn+A/D
|
||||
* RGB backlight brightness: Fn+W/S
|
||||
* RGB backlight saturation: Fn+Q/E (added Feb 4, 2022)
|
||||
* RGB backlight night mode toggle: Fn+Z (indicators still work)
|
||||
* RGB backlight timeout: Fn+Encoder or "-" and "=" (default 15 minutes) (updated Apr 7, 2022)
|
||||
* indicators in Fn layer using RGB in F-key and number rows to show the current timeout in minutes
|
||||
* Fn+Z to turn off RGB backlighting (indicator lights still work); press again to toggle
|
||||
* RGB indicators on left side LEDs in order from top: System NumLock off (orange), Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
|
||||
### Advanced Controls
|
||||
|
||||
* Fn+\ to get to bootloader mode
|
||||
* Fn+[ESC] to clear EEPROM (then unplug and re-plug) (added Apr 11, 2022)
|
||||
* Fn+R to toggle N-key Rollover (added Apr 11, 2022)
|
||||
* Fn+/ is single-handed shortcut to Ctrl-Alt-Delete (added May 14, 2022)
|
||||
* Fn+L is single-handed shortcut to Win-L (lock Windows) (added May 17, 2022)
|
||||
* Fn+[Encoder press] to sleep Windows PC (added May 14, 2022)
|
||||
|
||||
Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin
|
||||
|
||||
Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf
|
||||
|
||||
|
||||
## rules.mk Options
|
||||
|
||||
STARTUP_NUMLOCK_ON = yes - Turns on NUMLOCK by default
|
||||
|
||||
ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions
|
||||
|
||||
TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS
|
||||
|
||||
IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically
|
||||
|
||||
INVERT_NUMLOCK_INDICATOR - Inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with overlay numpad, so should be off when numpad layer is active unless you have an external numpad.
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes - Enables optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer.
|
||||
|
||||
GAME_ENABLE ?= yes - Enables Paddle Game
|
||||
|
||||
## Layer Diagrams
|
||||
### Base layer
|
||||

|
||||
|
||||
### Fn Layer
|
||||

|
||||
|
||||
### Layer 2 (Numpad)
|
||||

|
||||
|
||||
### COLEMAK layer
|
||||

|
||||
@@ -0,0 +1,411 @@
|
||||
/* Copyright 2021 Jonavin Eng @Jonavin
|
||||
Copyright 2022 gourdo1 <gourdo1@outlook.com>
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
|
||||
//Define variables for Game
|
||||
bool fn_active = false;
|
||||
RGB rgb_value;
|
||||
|
||||
// Custom GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h)
|
||||
#define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps
|
||||
#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors
|
||||
#define RGB_OFFBLUE 0x00, 0x80, 0xFF // new color: blue with a hint of green
|
||||
#define RGB_DKRED 0x28, 0x00, 0x00 // new color: dark red
|
||||
#define RGB_ORANGE2 0xFF, 0x28, 0x00 // fix: reduced green from 80 to 28
|
||||
#define RGB_PURPLE2 0x80, 0x00, 0xFF // fix: increased red from 7A to 80
|
||||
#define RGB_SPRINGGREEN2 0x00, 0xFF, 0x10 // fix: blue was 80, now 10
|
||||
#define RGB_YELLOW2 0xFF, 0xB0, 0x00 // fix: green was FF, now B0
|
||||
#define RGB_OFF RGB_BLACK
|
||||
|
||||
// Added by gourdo1 for RGB testing
|
||||
// Red Green Blue Expected GMMK Pro result
|
||||
#define RGB_TEST1 0xFF, 0x00, 0x00 // Q - red good!
|
||||
#define RGB_TEST2 0x0F, 0xFF, 0x00 // W - green good!
|
||||
#define RGB_TEST3 0x00, 0x00, 0xFF // E - blue good!
|
||||
#define RGB_TEST4 0xFF, 0xB0, 0x00 // R - yellow slightly green heavy - reduced green LED by quite a bit
|
||||
#define RGB_TEST5 0x00, 0xFF, 0xFF // T - cyan good!
|
||||
#define RGB_TEST6 0xFF, 0x00, 0xFF // Y - magenta very slightly blue heavy?
|
||||
#define RGB_TEST7 0xFF, 0x28, 0x00 // U - orange very green heavy at default
|
||||
#define RGB_TEST8 0xFF, 0x00, 0x80 // I - pink good!
|
||||
#define RGB_TEST9 0x80, 0xFF, 0x00 // O - chartreus good!
|
||||
#define RGB_TEST10 0x00, 0xFF, 0x10 // P - springgrn fixed: was too blue because green LED has blue in it already
|
||||
#define RGB_TEST11 0x00, 0x80, 0xFF // A - grn blue good!
|
||||
#define RGB_TEST12 0x80, 0x00, 0xFF // S - purple good!
|
||||
|
||||
// RGB LED locations
|
||||
enum led_location_map {
|
||||
LED_ESC, // 0, ESC, k13
|
||||
LED_GRV, // 1, `, k16
|
||||
LED_TAB, // 2, Tab, k11
|
||||
LED_CAPS, // 3, Caps, k21
|
||||
LED_LSFT, // 4, Sh_L, k00
|
||||
LED_LCTL, // 5, Ct_L, k06
|
||||
LED_F1, // 6, F1, k26
|
||||
LED_1, // 7, 1, k17
|
||||
LED_Q, // 8, Q, k10
|
||||
LED_A, // 9, A, k12
|
||||
LED_Z, // 10, Z, k14
|
||||
LED_LWIN, // 11, Win_L, k90
|
||||
LED_F2, // 12, F2, k36
|
||||
LED_2, // 13, 2, k27
|
||||
LED_W, // 14, W, k20
|
||||
LED_S, // 15, S, k22
|
||||
LED_X, // 16, X, k24
|
||||
LED_LALT, // 17, Alt_L, k93
|
||||
LED_F3, // 18, F3, k31
|
||||
LED_3, // 19, 3, k37
|
||||
LED_E, // 20, E, k30
|
||||
LED_D, // 21, D, k32
|
||||
LED_C, // 22, C, k34
|
||||
LED_F4, // 23, F4, k33
|
||||
LED_4, // 24, 4, k47
|
||||
LED_R, // 25, R, k40
|
||||
LED_F, // 26, F, k42
|
||||
LED_V, // 27, V, k44
|
||||
LED_F5, // 28, F5, k07
|
||||
LED_5, // 29, 5, k46
|
||||
LED_T, // 30, T, k41
|
||||
LED_G, // 31, G, k43
|
||||
LED_B, // 32, B, k45
|
||||
LED_SPC, // 33, SPACE, k94
|
||||
LED_F6, // 34, F6, k63
|
||||
LED_6, // 35, 6, k56
|
||||
LED_Y, // 36, Y, k51
|
||||
LED_H, // 37, H, k53
|
||||
LED_N, // 38, N, k55
|
||||
LED_F7, // 39, F7, k71
|
||||
LED_7, // 40, 7, k57
|
||||
LED_U, // 41, U, k50
|
||||
LED_J, // 42, J, k52
|
||||
LED_M, // 43, M, k54
|
||||
LED_F8, // 44, F8, k76
|
||||
LED_8, // 45, 8, k67
|
||||
LED_I, // 46, I, k60
|
||||
LED_K, // 47, K, k62
|
||||
LED_COMM, // 48, ,, k64
|
||||
LED_RALT, // 49, Alt_R, k95
|
||||
LED_F9, // 50, F9, ka6
|
||||
LED_9, // 51, 9, k77
|
||||
LED_O, // 52, O, k70
|
||||
LED_L, // 53, L, k72
|
||||
LED_DOT, // 54, ., k74
|
||||
LED_FN, // 55, FN, k92
|
||||
LED_F10, // 56, F10, ka7
|
||||
LED_0, // 57, 0, k87
|
||||
LED_P, // 58, P, k80
|
||||
LED_SCLN, // 59, ;, k82
|
||||
LED_SLSH, // 60, ?, k85
|
||||
LED_F11, // 61, F11, ka3
|
||||
LED_MINS, // 62, -, k86
|
||||
LED_LBRC, // 63, [, k81
|
||||
LED_QUOT, // 64, ", k83
|
||||
LED_RCTL, // 65, Ct_R, k04
|
||||
LED_F12, // 66, F12, ka5
|
||||
LED_BSLS, // 67, \, k23
|
||||
LED_L1, // 68, LED, l01
|
||||
LED_R1, // 69, LED, l11
|
||||
LED_PRT, // 70, Prt, k97
|
||||
LED_L2, // 71, LED, l02
|
||||
LED_R2, // 72, LED, l12
|
||||
LED_DEL, // 73, Del, k65
|
||||
LED_L3, // 74, LED, l03
|
||||
LED_R3, // 75, LED, l13
|
||||
LED_PGUP, // 76, PgUp, k15
|
||||
LED_L4, // 77, LED, l04
|
||||
LED_R4, // 78, LED, l14
|
||||
LED_EQL, // 79, =, k66
|
||||
LED_RIGHT, // 80, Right, k05
|
||||
LED_L5, // 81, LED, l05
|
||||
LED_R5, // 82, LED, l15
|
||||
LED_END, // 83, End, k75
|
||||
LED_L6, // 84, LED, l06
|
||||
LED_R6, // 85, LED, l16
|
||||
LED_BSPC, // 86, BSpc, ka1
|
||||
LED_PGDN, // 87, PgDn, k25
|
||||
LED_L7, // 88, LED, l07
|
||||
LED_R7, // 89, LED, l17
|
||||
LED_RBRC, // 90, ], k61
|
||||
LED_RSFT, // 91, Sh_R, k91
|
||||
LED_L8, // 92, LED, l08
|
||||
LED_R8, // 93, LED, l18
|
||||
LED_UP, // 94, Up, k35
|
||||
LED_HASH, // 95, #, k84
|
||||
LED_LEFT, // 96, Left, k03
|
||||
LED_ENT, // 97, Enter, ka4
|
||||
LED_DOWN // 98, Down, k73
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_WASD[] = {
|
||||
LED_W,
|
||||
LED_A,
|
||||
LED_S,
|
||||
LED_D
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_ARROWS[] = {
|
||||
LED_LEFT,
|
||||
LED_RIGHT,
|
||||
LED_UP,
|
||||
LED_DOWN
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_FUNCROW[] = {
|
||||
LED_ESC,
|
||||
LED_F1,
|
||||
LED_F2,
|
||||
LED_F3,
|
||||
LED_F4,
|
||||
LED_F5,
|
||||
LED_F6,
|
||||
LED_F7,
|
||||
LED_F8,
|
||||
LED_F9,
|
||||
LED_F10,
|
||||
LED_F11,
|
||||
LED_F12,
|
||||
LED_PRT
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_NUMROW[] = {
|
||||
LED_GRV,
|
||||
LED_1,
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL,
|
||||
LED_BSPC,
|
||||
LED_DEL
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_LETTERS[] = {
|
||||
/* LED_1,
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0, */
|
||||
LED_Q,
|
||||
LED_W,
|
||||
LED_E,
|
||||
LED_R,
|
||||
LED_T,
|
||||
LED_Y,
|
||||
LED_U,
|
||||
LED_I,
|
||||
LED_O,
|
||||
LED_P,
|
||||
LED_A,
|
||||
LED_S,
|
||||
LED_D,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_Z,
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_N,
|
||||
LED_M
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_NUMPAD[] = {
|
||||
LED_1,
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL,
|
||||
LED_U,
|
||||
LED_I,
|
||||
LED_O,
|
||||
LED_P,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_SCLN,
|
||||
LED_ENT,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_DOT,
|
||||
LED_SLSH,
|
||||
LED_END,
|
||||
LED_RIGHT
|
||||
};
|
||||
|
||||
const uint8_t LED_SIDE_LEFT[] = {
|
||||
LED_L1,
|
||||
LED_L2,
|
||||
LED_L3,
|
||||
LED_L4,
|
||||
LED_L5,
|
||||
LED_L6,
|
||||
LED_L7,
|
||||
LED_L8
|
||||
};
|
||||
|
||||
const uint8_t LED_SIDE_RIGHT[] = {
|
||||
LED_R1,
|
||||
LED_R2,
|
||||
LED_R3,
|
||||
LED_R4,
|
||||
LED_R5,
|
||||
LED_R6,
|
||||
LED_R7,
|
||||
LED_R8
|
||||
};
|
||||
|
||||
#ifdef GAME_ENABLE
|
||||
// Game LED rules
|
||||
const uint8_t GAME_LIVES[] = {
|
||||
LED_DEL,
|
||||
LED_PGUP,
|
||||
LED_PGDN,
|
||||
LED_END
|
||||
};
|
||||
const uint8_t GAME_PADDLE[] = {
|
||||
LED_Z,
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_N,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_DOT,
|
||||
LED_SLSH
|
||||
};
|
||||
const uint8_t GAME_SMILE1[] = {
|
||||
LED_A,
|
||||
LED_S,
|
||||
LED_D,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_SCLN,
|
||||
LED_QUOT
|
||||
};
|
||||
const uint8_t GAME_SMILE2[] = {
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL
|
||||
};
|
||||
const uint8_t GAME_R4[] = {
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_N,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_DOT
|
||||
};
|
||||
const uint8_t GAME_R3[] = {
|
||||
LED_S,
|
||||
LED_D,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_K,
|
||||
LED_L,
|
||||
LED_SCLN
|
||||
};
|
||||
const uint8_t GAME_R2[] = {
|
||||
LED_W,
|
||||
LED_E,
|
||||
LED_R,
|
||||
LED_T,
|
||||
LED_Y,
|
||||
LED_U,
|
||||
LED_I,
|
||||
LED_O,
|
||||
LED_P,
|
||||
LED_LBRC
|
||||
};
|
||||
const uint8_t GAME_R1[] = {
|
||||
LED_2,
|
||||
LED_3,
|
||||
LED_4,
|
||||
LED_5,
|
||||
LED_6,
|
||||
LED_7,
|
||||
LED_8,
|
||||
LED_9,
|
||||
LED_0,
|
||||
LED_MINS,
|
||||
LED_EQL
|
||||
};
|
||||
const uint8_t GAME_R0[] = {
|
||||
LED_F1,
|
||||
LED_F2,
|
||||
LED_F3,
|
||||
LED_F4,
|
||||
LED_F5,
|
||||
LED_F6,
|
||||
LED_F7,
|
||||
LED_F8,
|
||||
LED_F9,
|
||||
LED_F10,
|
||||
LED_F11,
|
||||
LED_F12
|
||||
};
|
||||
const uint8_t LED_GAME_OVER[] = {
|
||||
LED_5,
|
||||
LED_8,
|
||||
LED_F,
|
||||
LED_G,
|
||||
LED_H,
|
||||
LED_J,
|
||||
LED_C,
|
||||
LED_M
|
||||
};
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size
|
||||
CONSOLE_ENABLE = no
|
||||
COMMAND_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
||||
|
||||
VIA_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
CAPS_WORD_ENABLE = yes # Enable built-in Caps Word functionality
|
||||
|
||||
TD_LSFT_CAPSLOCK_ENABLE = yes
|
||||
IDLE_TIMEOUT_ENABLE = yes
|
||||
STARTUP_NUMLOCK_ON = yes
|
||||
ENCODER_DEFAULTACTIONS_ENABLE = no
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes # Enable Colemak layer / set to no to disable
|
||||
INVERT_NUMLOCK_INDICATOR = yes
|
||||
|
||||
GAME_ENABLE ?= yes # Enable Paddle Game / set to no to disable
|
||||
ifeq ($(strip $(GAME_ENABLE)), yes)
|
||||
OPT_DEFS += -DGAME_ENABLE
|
||||
endif
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/teensy_35/chconf.h -r platforms/chibios/common/configs/chconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CH_CFG_ST_TIMEDELTA 0
|
||||
|
||||
#define CH_CFG_TIME_QUANTUM 20
|
||||
|
||||
#include_next <chconf.h>
|
||||
@@ -0,0 +1,32 @@
|
||||
/* Copyright 2019
|
||||
*
|
||||
* 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
|
||||
|
||||
// TODO: including this causes "error: expected identifier before '(' token" errors
|
||||
//#include "config_common.h"
|
||||
|
||||
#define PRODUCT Onekey Teensy 3.5
|
||||
|
||||
#define MATRIX_COL_PINS { D5 } // 20/A6
|
||||
#define MATRIX_ROW_PINS { B2 } // 19/A5
|
||||
#define UNUSED_PINS
|
||||
|
||||
// i2c_master defines
|
||||
#define I2C1_SCL_PIN B0 // 16/A2 on pinout
|
||||
#define I2C1_SDA_PIN B1 // 17/A3 on pinout
|
||||
#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
|
||||
#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/teensy_35/halconf.h -r platforms/chibios/common/configs/halconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_SERIAL TRUE
|
||||
|
||||
#define SERIAL_USB_BUFFERS_SIZE 256
|
||||
|
||||
#include_next <halconf.h>
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _MCUCONF_H_
|
||||
#define _MCUCONF_H_
|
||||
|
||||
#define K60x_MCUCONF
|
||||
|
||||
/*
|
||||
* HAL driver system settings.
|
||||
*/
|
||||
|
||||
/* Select the MCU clocking mode below by enabling the appropriate block. */
|
||||
|
||||
/* PEE mode - 120MHz system clock driven by external crystal. */
|
||||
#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
|
||||
#define KINETIS_PLLCLK_FREQUENCY 120000000UL // 120 MHz (RUN)
|
||||
#define KINETIS_SYSCLK_FREQUENCY KINETIS_PLLCLK_FREQUENCY
|
||||
#define KINETIS_BUSCLK_FREQUENCY 60000000UL
|
||||
#define KINETIS_FLASHCLK_FREQUENCY 24000000UL // 24 MHz (RUN)
|
||||
|
||||
#define KINETIS_CLKDIV1_OUTDIV1 1 // -> 0
|
||||
#define KINETIS_CLKDIV1_OUTDIV2 2 // -> 1
|
||||
#define KINETIS_CLKDIV1_OUTDIV4 5 // -> 4
|
||||
|
||||
/*
|
||||
* SERIAL driver system settings.
|
||||
*/
|
||||
#define KINETIS_SERIAL_USE_UART0 TRUE
|
||||
|
||||
/*
|
||||
* USB driver settings
|
||||
*/
|
||||
#define KINETIS_USB_USE_USB0 TRUE
|
||||
#define KINETIS_USB_USB0_IRQ_PRIORITY 5
|
||||
|
||||
#endif /* _MCUCONF_H_ */
|
||||
@@ -0,0 +1,8 @@
|
||||
# MCU name
|
||||
MCU = MK64FX512
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = halfkay
|
||||
|
||||
# Enter lower-power sleep mode when on the ChibiOS idle thread
|
||||
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
|
||||
@@ -28,8 +28,3 @@
|
||||
#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 200
|
||||
|
||||
#define ENCODER_DEFAULT_POS 0x3
|
||||
|
||||
#define SECURE_UNLOCK_SEQUENCE \
|
||||
{ \
|
||||
{ 2, 1 }, { 2, 2 }, { 2, 3 }, { 2, 4 } \
|
||||
}
|
||||
|
||||
@@ -59,16 +59,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
||||
),
|
||||
|
||||
[_MOUSE] = LAYOUT_5x6_right(
|
||||
_______, _______, _______, _______, _______, _______, DRGSCRL, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, SNP_TOG,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, KC_BTN3,
|
||||
_______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
[_GAMEPAD] = LAYOUT_5x6_right(
|
||||
KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______,
|
||||
KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,
|
||||
@@ -99,6 +89,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LSFT, _______, _______,
|
||||
KC_LCTL, KC_V, _______, _______
|
||||
),
|
||||
[_MOUSE] = LAYOUT_5x6_right(
|
||||
_______, _______, _______, _______, _______, _______, DRGSCRL, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD, SNP_TOG,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, SNIPING,
|
||||
_______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
|
||||
_______, _______, _______, _______,
|
||||
_______, _______, KC_BTN3,
|
||||
_______, _______, _______,
|
||||
_______, _______, _______, _______
|
||||
),
|
||||
[_LOWER] = LAYOUT_5x6_right_wrapper(
|
||||
KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
|
||||
_______, _________________LOWER_L1__________________, _________________LOWER_R1__________________, _______,
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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 0x4B42
|
||||
#define PRODUCT_ID 0x7001
|
||||
#define DEVICE_VER 0x0003
|
||||
#define MANUFACTURER KBDFANS
|
||||
#define PRODUCT BOUNCE75_HOTSWAP
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 15
|
||||
#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, B6 }
|
||||
#define MATRIX_COL_PINS { F7, F6, F5, F4, F1, D0, D1, D2, D3, D5, D4, D6, D7, B4, B5}
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
#define LED_CAPS_LOCK_PIN C6
|
||||
#define LED_PIN_ON_STATE 0
|
||||
|
||||
#define RGB_DI_PIN F0
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_EFFECT_BREATHING
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
#define RGBLIGHT_EFFECT_SNAKE
|
||||
#define RGBLIGHT_EFFECT_KNIGHT
|
||||
#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
#define RGBLIGHT_EFFECT_RGB_TEST
|
||||
#define RGBLIGHT_EFFECT_ALTERNATING
|
||||
#define RGBLIGHT_EFFECT_TWINKLE
|
||||
#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_EFFECT_RAINBOW_MOOD +8 )
|
||||
#define RGBLIGHT_DEFAULT_SPD 15
|
||||
#define RGBLED_NUM 4
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 10
|
||||
#define RGBLIGHT_VAL_STEP 10
|
||||
#define RGBLIGHT_SLEEP
|
||||
#endif
|
||||
#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
|
||||
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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 "hotswap.h"
|
||||
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, \
|
||||
K500, K501, K502, K505, K508, K510, K511, K513, K514 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, KC_NO}, \
|
||||
{ K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, K508, KC_NO, K510, K511, KC_NO, K513, K514 } \
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"keyboard_name": "bonce75hotswap",
|
||||
"maintainer": "moyi4681",
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"PrtSc", "x":14, "y":0}, {"label":"Pause", "x":15.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Home", "x":15.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Page Up", "x":15.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Page Down", "x":15.25, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"\u2191", "x":14.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":13.25, "y":5.5}, {"label":"\u2193", "x":14.25, "y":5.5}, {"label":"\u2192", "x":15.25, "y":5.5}]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END,
|
||||
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_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END,
|
||||
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_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
# BONCE75 HOTSWAP
|
||||
|
||||
A customizable 75% HOTSWAP keyboard.
|
||||
|
||||
* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
|
||||
* Hardware Supported: KBDFANS
|
||||
* Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make kbdfans/bounce/75/hotswap:default
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix
|
||||
* **Physical reset button**: Briefly press the button on the back of the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
|
||||
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,18 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Enable N-Key Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
@@ -0,0 +1,64 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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 0x4B42
|
||||
#define PRODUCT_ID 0x7000
|
||||
#define DEVICE_VER 0x0003
|
||||
#define MANUFACTURER KBDFANS
|
||||
#define PRODUCT BOUNCE75_SOLDERED
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 15
|
||||
#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, B6 }
|
||||
#define MATRIX_COL_PINS { F7, F6, F5, F4, F1, D0, D1, D2, D3, D5, D4, D6, D7, B4, B5}
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
#define LED_CAPS_LOCK_PIN C6
|
||||
#define LED_PIN_ON_STATE 0
|
||||
|
||||
#define RGB_DI_PIN B7
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_EFFECT_BREATHING
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
#define RGBLIGHT_EFFECT_SNAKE
|
||||
#define RGBLIGHT_EFFECT_KNIGHT
|
||||
#define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
#define RGBLIGHT_EFFECT_RGB_TEST
|
||||
#define RGBLIGHT_EFFECT_ALTERNATING
|
||||
#define RGBLIGHT_EFFECT_TWINKLE
|
||||
#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_EFFECT_RAINBOW_MOOD +8 )
|
||||
#define RGBLIGHT_DEFAULT_SPD 15
|
||||
#define RGBLED_NUM 4
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 10
|
||||
#define RGBLIGHT_VAL_STEP 10
|
||||
#define RGBLIGHT_SLEEP
|
||||
#endif
|
||||
#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"keyboard_name": "bonce75soldered",
|
||||
"url": "",
|
||||
"maintainer": "moyi4681",
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"PrtSc", "x":14, "y":0}, {"label":"Pause", "x":15.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"x":13, "y":1.25}, {"label":"Backspace", "x":14, "y":1.25}, {"label":"Home", "x":15.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Page Up", "x":15.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Page Down", "x":15.25, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":1.25}, {"x":1.25, "y":4.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"\u2191", "x":14.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":13.25, "y":5.5}, {"label":"\u2193", "x":14.25, "y":5.5}, {"label":"\u2192", "x":15.25, "y":5.5}]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_END,
|
||||
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_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright 2022 DZTECH <moyi4681@Live.cn>
|
||||
*
|
||||
* 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_END,
|
||||
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_RSFT, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user