forked from mirrors/qmk_firmware
Compare commits
42 Commits
0.6.211
...
clockworkp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50fa02ad58 | ||
|
|
e76bf17d36 | ||
|
|
6cb2d7ba6d | ||
|
|
526bc4c7cc | ||
|
|
484c85bd0d | ||
|
|
a7b1b146d1 | ||
|
|
7b5fa4b13e | ||
|
|
c71c078dff | ||
|
|
134a69f4ad | ||
|
|
40383089d0 | ||
|
|
7f0def77a2 | ||
|
|
b7688590b8 | ||
|
|
0c0e208a36 | ||
|
|
3ddec14eb8 | ||
|
|
46b4b4407f | ||
|
|
c2390bf321 | ||
|
|
c043edd138 | ||
|
|
cc7bf108a9 | ||
|
|
bb1b441325 | ||
|
|
e2f60eba2f | ||
|
|
8443481aea | ||
|
|
d9abb833e5 | ||
|
|
2c6c483096 | ||
|
|
6b46c06018 | ||
|
|
c0859ac096 | ||
|
|
93b004c943 | ||
|
|
fbcbf44926 | ||
|
|
3744a2b641 | ||
|
|
cfba216541 | ||
|
|
0c1256e60a | ||
|
|
b7d2a9f980 | ||
|
|
ee1be3e5b5 | ||
|
|
8e0444618f | ||
|
|
de78d9e1ff | ||
|
|
08e9fc142c | ||
|
|
41dee98ec4 | ||
|
|
72d4e4bfd7 | ||
|
|
2149f3b588 | ||
|
|
33483b440c | ||
|
|
fc921a9c54 | ||
|
|
7e56c4bcb1 | ||
|
|
2c3706611f |
@@ -19,6 +19,7 @@ install:
|
||||
before_script:
|
||||
- avr-gcc --version
|
||||
script:
|
||||
- git rev-parse --short HEAD
|
||||
- make test:all AUTOGEN=false
|
||||
- bash util/travis_build.sh
|
||||
- bash util/travis_docs.sh
|
||||
@@ -33,7 +34,7 @@ addons:
|
||||
- diffutils
|
||||
- dos2unix
|
||||
- doxygen
|
||||
after_success:
|
||||
after_success:
|
||||
bash util/travis_compiled_push.sh
|
||||
notifications:
|
||||
webhooks:
|
||||
|
||||
@@ -21,5 +21,4 @@ COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/api
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/split_common
|
||||
COMMON_VPATH += $(DRIVER_PATH)
|
||||
|
||||
@@ -263,14 +263,10 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
|
||||
SERIAL_BACKWARD_COMPAT := $(wildcard $(QUANTUM_DIR)/split_common/serial_backward_compatibility.h)
|
||||
ifneq ($(SERIAL_BACKWARD_COMPAT),)
|
||||
CONFIG_H += $(SERIAL_BACKWARD_COMPAT)
|
||||
# $(info CONFIG_H=$(CONFIG_H))
|
||||
endif
|
||||
OPT_DEFS += -DSPLIT_KEYBOARD
|
||||
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
|
||||
$(QUANTUM_DIR)/split_common/split_util.c
|
||||
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c
|
||||
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/split_common
|
||||
endif
|
||||
|
||||
@@ -197,8 +197,27 @@ If you define these options you will enable the associated feature, which may in
|
||||
|
||||
Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk
|
||||
|
||||
* `#define SPLIT_HAND_PIN B7`
|
||||
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace 'B7' with the pin you are using. This is optional and you can still use the EEHANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
|
||||
### Setting Handedness
|
||||
|
||||
One thing to remember, the side that the USB port is plugged into is always the master half. The side not plugged into USB is the slave.
|
||||
|
||||
There are a few different ways to set handedness for split keyboards (listed in order of precedence):
|
||||
|
||||
1. Set `SPLIT_HAND_PIN`: Reads a pin to determine handedness. If pin is high, it's the left side, if low, the half is determined to be the right side
|
||||
2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
|
||||
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
|
||||
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
|
||||
|
||||
* `#define SPLIT_HAND_PIN B7`
|
||||
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
|
||||
|
||||
* `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` is not defined)
|
||||
* Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves.
|
||||
|
||||
* `#define MASTER_RIGHT`
|
||||
* Master half is defined to be the right half.
|
||||
|
||||
### Other Options
|
||||
|
||||
* `#define USE_I2C`
|
||||
* For using I2C instead of Serial (defaults to serial)
|
||||
@@ -206,6 +225,20 @@ Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in yo
|
||||
* `#define SOFT_SERIAL_PIN D0`
|
||||
* When using serial, define this. `D0` or `D1`,`D2`,`D3`,`E6`.
|
||||
|
||||
* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
|
||||
* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
|
||||
* If you want to specify a different pinout for the right half than the left half, you can define `MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT`. Currently, the size of `MATRIX_ROW_PINS` must be the same as `MATRIX_ROW_PINS_RIGHT` and likewise for the definition of columns.
|
||||
|
||||
* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (default speed is 1)
|
||||
* Sets the protocol speed when using serial communication
|
||||
* Speeds:
|
||||
* 0: about 189kbps (Experimental only)
|
||||
* 1: about 137kbps (default)
|
||||
* 2: about 75kbps
|
||||
* 3: about 39kbps
|
||||
* 4: about 26kbps
|
||||
* 5: about 20kbps
|
||||
|
||||
# The `rules.mk` File
|
||||
|
||||
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
|
||||
|
||||
@@ -21,7 +21,7 @@ Additionally, if at least one right-handed modifier is specified in a Mod Tap or
|
||||
|
||||
# Switching and Toggling Layers
|
||||
|
||||
These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers)
|
||||
These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers) When using momentary layer switching with MO(), LM(), TT(), or LT(), make sure to leave the key on the above layers transparent or it may not work as intended.
|
||||
|
||||
* `DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).)
|
||||
* `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated.
|
||||
|
||||
111
keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c
Normal file
111
keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
ChibiOS - Copyright (C) 2006..2016 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file has been automatically generated using ChibiStudio board
|
||||
* generator plugin. Do not edit manually.
|
||||
*/
|
||||
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief PAL setup.
|
||||
* @details Digital I/O ports static configuration as defined in @p board.h.
|
||||
* This variable is used by the HAL when initializing the PAL driver.
|
||||
*/
|
||||
const PALConfig pal_default_config = {
|
||||
#if STM32_HAS_GPIOA
|
||||
{VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
|
||||
VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOB
|
||||
{VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
|
||||
VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOC
|
||||
{VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
|
||||
VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOD
|
||||
{VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
|
||||
VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOE
|
||||
{VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
|
||||
VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOF
|
||||
{VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
|
||||
VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOG
|
||||
{VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
|
||||
VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOH
|
||||
{VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
|
||||
VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
|
||||
#endif
|
||||
#if STM32_HAS_GPIOI
|
||||
{VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
|
||||
VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
void enter_bootloader_mode_if_requested(void);
|
||||
|
||||
/**
|
||||
* @brief Early initialization code.
|
||||
* @details This initialization must be performed just after stack setup
|
||||
* and before any other initialization.
|
||||
*/
|
||||
void __early_init(void) {
|
||||
enter_bootloader_mode_if_requested();
|
||||
stm32_clock_init();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief MMC_SPI card detection.
|
||||
*/
|
||||
bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
|
||||
|
||||
(void)mmcp;
|
||||
/* TODO: Fill the implementation.*/
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief MMC_SPI card write protection detection.
|
||||
*/
|
||||
bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
|
||||
|
||||
(void)mmcp;
|
||||
/* TODO: Fill the implementation.*/
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Board-specific initialization code.
|
||||
* @todo Add your board-specific code, if any.
|
||||
*/
|
||||
void boardInit(void) {
|
||||
}
|
||||
923
keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h
Normal file
923
keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h
Normal file
@@ -0,0 +1,923 @@
|
||||
/*
|
||||
ChibiOS - Copyright (C) 2006..2016 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file has been automatically generated using ChibiStudio board
|
||||
* generator plugin. Do not edit manually.
|
||||
*/
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
/*
|
||||
* Setup for ST STM32F072B-Discovery board.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Board identifier.
|
||||
*/
|
||||
#define BOARD_ST_STM32F072B_DISCOVERY
|
||||
#define BOARD_NAME "ST STM32F072B-Discovery"
|
||||
|
||||
/*
|
||||
* Board oscillators-related settings.
|
||||
* NOTE: LSE not fitted.
|
||||
* NOTE: HSE not fitted.
|
||||
*/
|
||||
#if !defined(STM32_LSECLK)
|
||||
#define STM32_LSECLK 0U
|
||||
#endif
|
||||
|
||||
#define STM32_LSEDRV (3U << 3U)
|
||||
|
||||
#if !defined(STM32_HSECLK)
|
||||
#define STM32_HSECLK 0U
|
||||
#endif
|
||||
|
||||
#define STM32_HSE_BYPASS
|
||||
|
||||
/*
|
||||
* MCU type as defined in the ST header.
|
||||
*/
|
||||
#define STM32F072xB
|
||||
|
||||
/*
|
||||
* IO pins assignments.
|
||||
*/
|
||||
#define GPIOA_BUTTON 0U
|
||||
#define GPIOA_PIN1 1U
|
||||
#define GPIOA_PIN2 2U
|
||||
#define GPIOA_PIN3 3U
|
||||
#define GPIOA_PIN4 4U
|
||||
#define GPIOA_PIN5 5U
|
||||
#define GPIOA_PIN6 6U
|
||||
#define GPIOA_PIN7 7U
|
||||
#define GPIOA_PIN8 8U
|
||||
#define GPIOA_PIN9 9U
|
||||
#define GPIOA_PIN10 10U
|
||||
#define GPIOA_USB_DM 11U
|
||||
#define GPIOA_USB_DP 12U
|
||||
#define GPIOA_SWDIO 13U
|
||||
#define GPIOA_SWCLK 14U
|
||||
#define GPIOA_PIN15 15U
|
||||
|
||||
#define GPIOB_PIN0 0U
|
||||
#define GPIOB_PIN1 1U
|
||||
#define GPIOB_PIN2 2U
|
||||
#define GPIOB_PIN3 3U
|
||||
#define GPIOB_PIN4 4U
|
||||
#define GPIOB_PIN5 5U
|
||||
#define GPIOB_PIN6 6U
|
||||
#define GPIOB_PIN7 7U
|
||||
#define GPIOB_PIN8 8U
|
||||
#define GPIOB_PIN9 9U
|
||||
#define GPIOB_PIN10 10U
|
||||
#define GPIOB_PIN11 11U
|
||||
#define GPIOB_PIN12 12U
|
||||
#define GPIOB_SPI2_SCK 13U
|
||||
#define GPIOB_SPI2_MISO 14U
|
||||
#define GPIOB_SPI2_MOSI 15U
|
||||
|
||||
#define GPIOC_MEMS_CS 0U
|
||||
#define GPIOC_PIN1 1U
|
||||
#define GPIOC_PIN2 2U
|
||||
#define GPIOC_PIN3 3U
|
||||
#define GPIOC_PIN4 4U
|
||||
#define GPIOC_PIN5 5U
|
||||
#define GPIOC_LED_RED 6U
|
||||
#define GPIOC_LED_BLUE 7U
|
||||
#define GPIOC_LED_ORANGE 8U
|
||||
#define GPIOC_LED_GREEN 9U
|
||||
#define GPIOC_PIN10 10U
|
||||
#define GPIOC_PIN11 11U
|
||||
#define GPIOC_PIN12 12U
|
||||
#define GPIOC_PIN13 13U
|
||||
#define GPIOC_OSC32_IN 14U
|
||||
#define GPIOC_OSC32_OUT 15U
|
||||
|
||||
#define GPIOD_PIN0 0U
|
||||
#define GPIOD_PIN1 1U
|
||||
#define GPIOD_PIN2 2U
|
||||
#define GPIOD_PIN3 3U
|
||||
#define GPIOD_PIN4 4U
|
||||
#define GPIOD_PIN5 5U
|
||||
#define GPIOD_PIN6 6U
|
||||
#define GPIOD_PIN7 7U
|
||||
#define GPIOD_PIN8 8U
|
||||
#define GPIOD_PIN9 9U
|
||||
#define GPIOD_PIN10 10U
|
||||
#define GPIOD_PIN11 11U
|
||||
#define GPIOD_PIN12 12U
|
||||
#define GPIOD_PIN13 13U
|
||||
#define GPIOD_PIN14 14U
|
||||
#define GPIOD_PIN15 15U
|
||||
|
||||
#define GPIOE_PIN0 0U
|
||||
#define GPIOE_PIN1 1U
|
||||
#define GPIOE_PIN2 2U
|
||||
#define GPIOE_PIN3 3U
|
||||
#define GPIOE_PIN4 4U
|
||||
#define GPIOE_PIN5 5U
|
||||
#define GPIOE_PIN6 6U
|
||||
#define GPIOE_PIN7 7U
|
||||
#define GPIOE_PIN8 8U
|
||||
#define GPIOE_PIN9 9U
|
||||
#define GPIOE_PIN10 10U
|
||||
#define GPIOE_PIN11 11U
|
||||
#define GPIOE_PIN12 12U
|
||||
#define GPIOE_PIN13 13U
|
||||
#define GPIOE_PIN14 14U
|
||||
#define GPIOE_PIN15 15U
|
||||
|
||||
#define GPIOF_OSC_IN 0U
|
||||
#define GPIOF_OSC_OUT 1U
|
||||
#define GPIOF_PIN2 2U
|
||||
#define GPIOF_PIN3 3U
|
||||
#define GPIOF_PIN4 4U
|
||||
#define GPIOF_PIN5 5U
|
||||
#define GPIOF_PIN6 6U
|
||||
#define GPIOF_PIN7 7U
|
||||
#define GPIOF_PIN8 8U
|
||||
#define GPIOF_PIN9 9U
|
||||
#define GPIOF_PIN10 10U
|
||||
#define GPIOF_PIN11 11U
|
||||
#define GPIOF_PIN12 12U
|
||||
#define GPIOF_PIN13 13U
|
||||
#define GPIOF_PIN14 14U
|
||||
#define GPIOF_PIN15 15U
|
||||
|
||||
/*
|
||||
* IO lines assignments.
|
||||
*/
|
||||
#define LINE_BUTTON PAL_LINE(GPIOA, 0U)
|
||||
#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
|
||||
#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
|
||||
#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
|
||||
#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
|
||||
|
||||
#define LINE_SPI2_SCK PAL_LINE(GPIOB, 13U)
|
||||
#define LINE_SPI2_MISO PAL_LINE(GPIOB, 14U)
|
||||
#define LINE_SPI2_MOSI PAL_LINE(GPIOB, 15U)
|
||||
|
||||
#define LINE_MEMS_CS PAL_LINE(GPIOC, 0U)
|
||||
#define LINE_LED_RED PAL_LINE(GPIOC, 6U)
|
||||
#define LINE_LED_BLUE PAL_LINE(GPIOC, 7U)
|
||||
#define LINE_LED_ORANGE PAL_LINE(GPIOC, 8U)
|
||||
#define LINE_LED_GREEN PAL_LINE(GPIOC, 9U)
|
||||
#define LINE_OSC32_IN PAL_LINE(GPIOC, 14U)
|
||||
#define LINE_OSC32_OUT PAL_LINE(GPIOC, 15U)
|
||||
|
||||
|
||||
|
||||
#define LINE_OSC_IN PAL_LINE(GPIOF, 0U)
|
||||
#define LINE_OSC_OUT PAL_LINE(GPIOF, 1U)
|
||||
|
||||
/*
|
||||
* I/O ports initial setup, this configuration is established soon after reset
|
||||
* in the initialization code.
|
||||
* Please refer to the STM32 Reference Manual for details.
|
||||
*/
|
||||
#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
|
||||
#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
|
||||
#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
|
||||
#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
|
||||
#define PIN_ODR_LOW(n) (0U << (n))
|
||||
#define PIN_ODR_HIGH(n) (1U << (n))
|
||||
#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
|
||||
#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
|
||||
#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
|
||||
#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
|
||||
#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
|
||||
#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
|
||||
#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
|
||||
#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
|
||||
#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
|
||||
#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
|
||||
|
||||
/*
|
||||
* GPIOA setup:
|
||||
*
|
||||
* PA0 - BUTTON (input floating).
|
||||
* PA1 - PIN1 (input pullup).
|
||||
* PA2 - PIN2 (input pullup).
|
||||
* PA3 - PIN3 (input pullup).
|
||||
* PA4 - PIN4 (input pullup).
|
||||
* PA5 - PIN5 (input pullup).
|
||||
* PA6 - PIN6 (input pullup).
|
||||
* PA7 - PIN7 (input pullup).
|
||||
* PA8 - PIN8 (input pullup).
|
||||
* PA9 - PIN9 (input pullup).
|
||||
* PA10 - PIN10 (input pullup).
|
||||
* PA11 - USB_DM (input floating).
|
||||
* PA12 - USB_DP (input floating).
|
||||
* PA13 - SWDIO (alternate 0).
|
||||
* PA14 - SWCLK (alternate 0).
|
||||
* PA15 - PIN15 (input pullup).
|
||||
*/
|
||||
#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN1) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN5) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN6) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN7) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN8) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN9) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOA_USB_DM) | \
|
||||
PIN_MODE_INPUT(GPIOA_USB_DP) | \
|
||||
PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
|
||||
PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
|
||||
PIN_MODE_INPUT(GPIOA_PIN15))
|
||||
#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
|
||||
#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_BUTTON) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_USB_DM) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
|
||||
PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
|
||||
PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
|
||||
PIN_OSPEED_HIGH(GPIOA_PIN15))
|
||||
#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
|
||||
PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
|
||||
PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
|
||||
PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
|
||||
PIN_PUPDR_PULLUP(GPIOA_PIN15))
|
||||
#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_BUTTON) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN1) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOA_USB_DM) | \
|
||||
PIN_ODR_HIGH(GPIOA_USB_DP) | \
|
||||
PIN_ODR_HIGH(GPIOA_SWDIO) | \
|
||||
PIN_ODR_HIGH(GPIOA_SWCLK) | \
|
||||
PIN_ODR_HIGH(GPIOA_PIN15))
|
||||
#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_BUTTON, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN1, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN6, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN7, 0U))
|
||||
#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN9, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_USB_DM, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_USB_DP, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \
|
||||
PIN_AFIO_AF(GPIOA_PIN15, 0U))
|
||||
|
||||
/*
|
||||
* GPIOB setup:
|
||||
*
|
||||
* PB0 - PIN0 (input pullup).
|
||||
* PB1 - PIN1 (input pullup).
|
||||
* PB2 - PIN2 (input pullup).
|
||||
* PB3 - PIN3 (input pullup).
|
||||
* PB4 - PIN4 (input pullup).
|
||||
* PB5 - PIN5 (input pullup).
|
||||
* PB6 - PIN6 (input pullup).
|
||||
* PB7 - PIN7 (input pullup).
|
||||
* PB8 - PIN8 (input pullup).
|
||||
* PB9 - PIN9 (input pullup).
|
||||
* PB10 - PIN10 (input pullup).
|
||||
* PB11 - PIN11 (input pullup).
|
||||
* PB12 - PIN12 (input pullup).
|
||||
* PB13 - SPI2_SCK (alternate 0).
|
||||
* PB14 - SPI2_MISO (alternate 0).
|
||||
* PB15 - SPI2_MOSI (alternate 0).
|
||||
*/
|
||||
#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN1) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN5) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN6) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN7) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN8) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN9) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN11) | \
|
||||
PIN_MODE_INPUT(GPIOB_PIN12) | \
|
||||
PIN_MODE_ALTERNATE(GPIOB_SPI2_SCK) | \
|
||||
PIN_MODE_ALTERNATE(GPIOB_SPI2_MISO) | \
|
||||
PIN_MODE_ALTERNATE(GPIOB_SPI2_MOSI))
|
||||
#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN6) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_SPI2_SCK) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MISO) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MOSI))
|
||||
#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
|
||||
PIN_OSPEED_HIGH(GPIOB_PIN2) | \
|
||||
PIN_OSPEED_HIGH(GPIOB_PIN3) | \
|
||||
PIN_OSPEED_HIGH(GPIOB_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN6) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_SPI2_SCK) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_SPI2_MISO) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOB_SPI2_MOSI))
|
||||
#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
|
||||
PIN_PUPDR_FLOATING(GPIOB_SPI2_SCK) | \
|
||||
PIN_PUPDR_FLOATING(GPIOB_SPI2_MISO) | \
|
||||
PIN_PUPDR_FLOATING(GPIOB_SPI2_MOSI))
|
||||
#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN1) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN11) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN12) | \
|
||||
PIN_ODR_HIGH(GPIOB_SPI2_SCK) | \
|
||||
PIN_ODR_HIGH(GPIOB_SPI2_MISO) | \
|
||||
PIN_ODR_HIGH(GPIOB_SPI2_MOSI))
|
||||
#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN1, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN6, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN7, 0U))
|
||||
#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN9, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN11, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_PIN12, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_SPI2_SCK, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_SPI2_MISO, 0U) | \
|
||||
PIN_AFIO_AF(GPIOB_SPI2_MOSI, 0U))
|
||||
|
||||
/*
|
||||
* GPIOC setup:
|
||||
*
|
||||
* PC0 - MEMS_CS (output pushpull maximum).
|
||||
* PC1 - PIN1 (input pullup).
|
||||
* PC2 - PIN2 (input pullup).
|
||||
* PC3 - PIN3 (input pullup).
|
||||
* PC4 - PIN4 (input pullup).
|
||||
* PC5 - PIN5 (input pullup).
|
||||
* PC6 - LED_RED (output pushpull maximum).
|
||||
* PC7 - LED_BLUE (output pushpull maximum).
|
||||
* PC8 - LED_ORANGE (output pushpull maximum).
|
||||
* PC9 - LED_GREEN (output pushpull maximum).
|
||||
* PC10 - PIN10 (input pullup).
|
||||
* PC11 - PIN11 (input pullup).
|
||||
* PC12 - PIN12 (input pullup).
|
||||
* PC13 - PIN13 (input pullup).
|
||||
* PC14 - OSC32_IN (input floating).
|
||||
* PC15 - OSC32_OUT (input floating).
|
||||
*/
|
||||
#define VAL_GPIOC_MODER (PIN_MODE_OUTPUT(GPIOC_MEMS_CS) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN1) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN5) | \
|
||||
PIN_MODE_OUTPUT(GPIOC_LED_RED) | \
|
||||
PIN_MODE_OUTPUT(GPIOC_LED_BLUE) | \
|
||||
PIN_MODE_OUTPUT(GPIOC_LED_ORANGE) | \
|
||||
PIN_MODE_OUTPUT(GPIOC_LED_GREEN) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN11) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN12) | \
|
||||
PIN_MODE_INPUT(GPIOC_PIN13) | \
|
||||
PIN_MODE_INPUT(GPIOC_OSC32_IN) | \
|
||||
PIN_MODE_INPUT(GPIOC_OSC32_OUT))
|
||||
#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_MEMS_CS) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_LED_RED) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_LED_BLUE) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_LED_ORANGE) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_LED_GREEN) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT))
|
||||
#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_MEMS_CS) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_LED_RED) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_LED_BLUE) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_LED_ORANGE) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_LED_GREEN) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_OSC32_IN) | \
|
||||
PIN_OSPEED_HIGH(GPIOC_OSC32_OUT))
|
||||
#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(GPIOC_MEMS_CS) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_LED_RED) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_LED_BLUE) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_LED_ORANGE) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_LED_GREEN) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
|
||||
PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) | \
|
||||
PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT))
|
||||
#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_MEMS_CS) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN1) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN5) | \
|
||||
PIN_ODR_LOW(GPIOC_LED_RED) | \
|
||||
PIN_ODR_LOW(GPIOC_LED_BLUE) | \
|
||||
PIN_ODR_LOW(GPIOC_LED_ORANGE) | \
|
||||
PIN_ODR_LOW(GPIOC_LED_GREEN) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN11) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN12) | \
|
||||
PIN_ODR_HIGH(GPIOC_PIN13) | \
|
||||
PIN_ODR_HIGH(GPIOC_OSC32_IN) | \
|
||||
PIN_ODR_HIGH(GPIOC_OSC32_OUT))
|
||||
#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_MEMS_CS, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN1, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_LED_RED, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_LED_BLUE, 0U))
|
||||
#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_LED_ORANGE, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_LED_GREEN, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN11, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN12, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_PIN13, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_OSC32_IN, 0U) | \
|
||||
PIN_AFIO_AF(GPIOC_OSC32_OUT, 0U))
|
||||
|
||||
/*
|
||||
* GPIOD setup:
|
||||
*
|
||||
* PD0 - PIN0 (input pullup).
|
||||
* PD1 - PIN1 (input pullup).
|
||||
* PD2 - PIN2 (input pullup).
|
||||
* PD3 - PIN3 (input pullup).
|
||||
* PD4 - PIN4 (input pullup).
|
||||
* PD5 - PIN5 (input pullup).
|
||||
* PD6 - PIN6 (input pullup).
|
||||
* PD7 - PIN7 (input pullup).
|
||||
* PD8 - PIN8 (input pullup).
|
||||
* PD9 - PIN9 (input pullup).
|
||||
* PD10 - PIN10 (input pullup).
|
||||
* PD11 - PIN11 (input pullup).
|
||||
* PD12 - PIN12 (input pullup).
|
||||
* PD13 - PIN13 (input pullup).
|
||||
* PD14 - PIN14 (input pullup).
|
||||
* PD15 - PIN15 (input pullup).
|
||||
*/
|
||||
#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN1) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN5) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN6) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN7) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN8) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN9) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN11) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN12) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN13) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN14) | \
|
||||
PIN_MODE_INPUT(GPIOD_PIN15))
|
||||
#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
|
||||
#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOD_PIN15))
|
||||
#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
|
||||
PIN_PUPDR_PULLUP(GPIOD_PIN15))
|
||||
#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN1) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN11) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN12) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN13) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN14) | \
|
||||
PIN_ODR_HIGH(GPIOD_PIN15))
|
||||
#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN1, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN6, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN7, 0U))
|
||||
#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN9, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN11, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN12, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN13, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN14, 0U) | \
|
||||
PIN_AFIO_AF(GPIOD_PIN15, 0U))
|
||||
|
||||
/*
|
||||
* GPIOE setup:
|
||||
*
|
||||
* PE0 - PIN0 (input pullup).
|
||||
* PE1 - PIN1 (input pullup).
|
||||
* PE2 - PIN2 (input pullup).
|
||||
* PE3 - PIN3 (input pullup).
|
||||
* PE4 - PIN4 (input pullup).
|
||||
* PE5 - PIN5 (input pullup).
|
||||
* PE6 - PIN6 (input pullup).
|
||||
* PE7 - PIN7 (input pullup).
|
||||
* PE8 - PIN8 (input pullup).
|
||||
* PE9 - PIN9 (input pullup).
|
||||
* PE10 - PIN10 (input pullup).
|
||||
* PE11 - PIN11 (input pullup).
|
||||
* PE12 - PIN12 (input pullup).
|
||||
* PE13 - PIN13 (input pullup).
|
||||
* PE14 - PIN14 (input pullup).
|
||||
* PE15 - PIN15 (input pullup).
|
||||
*/
|
||||
#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN1) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN5) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN6) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN7) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN8) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN9) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN11) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN12) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN13) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN14) | \
|
||||
PIN_MODE_INPUT(GPIOE_PIN15))
|
||||
#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
|
||||
#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN1) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN2) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN3) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN5) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN8) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN9) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN11) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN12) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN13) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN14) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOE_PIN15))
|
||||
#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN5) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN11) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN13) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN14) | \
|
||||
PIN_PUPDR_PULLUP(GPIOE_PIN15))
|
||||
#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN1) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN11) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN12) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN13) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN14) | \
|
||||
PIN_ODR_HIGH(GPIOE_PIN15))
|
||||
#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN1, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN6, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN7, 0U))
|
||||
#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN9, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN11, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN12, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN13, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN14, 0U) | \
|
||||
PIN_AFIO_AF(GPIOE_PIN15, 0U))
|
||||
|
||||
/*
|
||||
* GPIOF setup:
|
||||
*
|
||||
* PF0 - OSC_IN (input floating).
|
||||
* PF1 - OSC_OUT (input floating).
|
||||
* PF2 - PIN2 (input pullup).
|
||||
* PF3 - PIN3 (input pullup).
|
||||
* PF4 - PIN4 (input pullup).
|
||||
* PF5 - PIN5 (input pullup).
|
||||
* PF6 - PIN6 (input pullup).
|
||||
* PF7 - PIN7 (input pullup).
|
||||
* PF8 - PIN8 (input pullup).
|
||||
* PF9 - PIN9 (input pullup).
|
||||
* PF10 - PIN10 (input pullup).
|
||||
* PF11 - PIN11 (input pullup).
|
||||
* PF12 - PIN12 (input pullup).
|
||||
* PF13 - PIN13 (input pullup).
|
||||
* PF14 - PIN14 (input pullup).
|
||||
* PF15 - PIN15 (input pullup).
|
||||
*/
|
||||
#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_OSC_IN) | \
|
||||
PIN_MODE_INPUT(GPIOF_OSC_OUT) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN2) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN3) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN4) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN5) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN6) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN7) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN8) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN9) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN10) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN11) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN12) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN13) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN14) | \
|
||||
PIN_MODE_INPUT(GPIOF_PIN15))
|
||||
#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_OSC_IN) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
|
||||
PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
|
||||
#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOF_OSC_IN) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_OSC_OUT) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
|
||||
PIN_OSPEED_VERYLOW(GPIOF_PIN15))
|
||||
#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) | \
|
||||
PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
|
||||
PIN_PUPDR_PULLUP(GPIOF_PIN15))
|
||||
#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_OSC_IN) | \
|
||||
PIN_ODR_HIGH(GPIOF_OSC_OUT) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN2) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN3) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN10) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN11) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN12) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN13) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN14) | \
|
||||
PIN_ODR_HIGH(GPIOF_PIN15))
|
||||
#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN2, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN3, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN4, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN5, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN6, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN7, 0U))
|
||||
#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN9, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN10, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN11, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN12, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN13, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN14, 0U) | \
|
||||
PIN_AFIO_AF(GPIOF_PIN15, 0U))
|
||||
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void boardInit(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _FROM_ASM_ */
|
||||
|
||||
#endif /* BOARD_H */
|
||||
@@ -0,0 +1,5 @@
|
||||
# List of all the board related files.
|
||||
BOARDSRC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY/board.c
|
||||
|
||||
# Required include directories
|
||||
BOARDINC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY
|
||||
0
keyboards/clockworkpi_keypad/clockworkpi_keypad.c
Normal file
0
keyboards/clockworkpi_keypad/clockworkpi_keypad.c
Normal file
15
keyboards/clockworkpi_keypad/clockworkpi_keypad.h
Normal file
15
keyboards/clockworkpi_keypad/clockworkpi_keypad.h
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
|
||||
#define k_ KC_NO
|
||||
|
||||
#define LAYOUT_keymap( \
|
||||
kMN, kSH, kSL, kST, \
|
||||
kUP, KY, \
|
||||
kLF, kRH, kX, kB, \
|
||||
kDN, kA, \
|
||||
kL1, kL2, kL3, kL4, kL5 \
|
||||
) { \
|
||||
{ kUP, kLF, kDN, kRH, kY, kX, kA, kB }, \
|
||||
{ kMN, kSH, kSL, kST, k_, k_, k_, k_ }, \
|
||||
{ kL1, kL2, kL3, kL4, kL5, k_, k_, k_ }, \
|
||||
}
|
||||
38
keyboards/clockworkpi_keypad/config.h
Normal file
38
keyboards/clockworkpi_keypad/config.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
Copyright 2019 Jack Humbert <jack.humb@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 0xFEED
|
||||
#define PRODUCT_ID 0xD901
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER clockworkpi
|
||||
#define PRODUCT keypad
|
||||
#define DESCRIPTION
|
||||
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 8
|
||||
|
||||
#define TAPPING_TOGGLE 3
|
||||
|
||||
#define NO_UART 1
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
20
keyboards/clockworkpi_keypad/keymaps/default/keymap.c
Normal file
20
keyboards/clockworkpi_keypad/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
[0] = LAYOUT_keypad(
|
||||
KC_ESC, MO(1), KC_SPC, KC_ENT,
|
||||
|
||||
KC_UP KC_I,
|
||||
KC_LEFT, KC_RIGHT, KC_U, KC_K,
|
||||
KC_DOWN, KC_J,
|
||||
|
||||
KC_HOME, KC_PGUP, MO(1), KC_PGDN, KC_END
|
||||
),
|
||||
|
||||
[1] = LAYOUT_keypad(
|
||||
KC_BSPC, MO(1), KC_PMNS, KC_PPLS,
|
||||
|
||||
KC_UP KC_O,
|
||||
KC_LEFT, KC_RIGHT, KC_Y, KC_L,
|
||||
KC_DOWN, KC_H
|
||||
|
||||
KC_H, KC_Y, MO(1), KC_O, KC_L
|
||||
)
|
||||
65
keyboards/clockworkpi_keypad/matrix.c
Normal file
65
keyboards/clockworkpi_keypad/matrix.c
Normal file
@@ -0,0 +1,65 @@
|
||||
// 0 DO
|
||||
// 1 D1
|
||||
// 2 D2
|
||||
// 3 D3
|
||||
// 4 D4
|
||||
// 5 D5
|
||||
// 6 D6
|
||||
// 7 D7
|
||||
// 8 B0
|
||||
// 9 B1
|
||||
// 10 B2
|
||||
// 11 B3
|
||||
// 12 B4
|
||||
// 13 B5
|
||||
// 14 C0
|
||||
// 15 C1
|
||||
// 16 C2
|
||||
// 17 C3
|
||||
// 18 C4
|
||||
// 19 C5
|
||||
|
||||
// UP D3
|
||||
// LF D6
|
||||
// DN D7
|
||||
// RH B0
|
||||
|
||||
// A B1 Y
|
||||
// B B2 X
|
||||
// C B3 A
|
||||
// D B4 B
|
||||
|
||||
// MN C0
|
||||
// SH C1
|
||||
// SL C2
|
||||
// ST B5
|
||||
|
||||
// L1 C3
|
||||
// L2 C4
|
||||
// L3 C5
|
||||
// L4 C6
|
||||
// L5 D7
|
||||
|
||||
matrix[0] = (
|
||||
(readPin(D3) << 0) |
|
||||
(readPin(D6) << 1) |
|
||||
(readPin(D7) << 2) |
|
||||
(readPin(B0) << 3) |
|
||||
(readPin(B1) << 4) |
|
||||
(readPin(B2) << 5) |
|
||||
(readPin(B3) << 6) |
|
||||
(readPin(B4) << 7)
|
||||
);
|
||||
matrix[1] = (
|
||||
(readPin(C0) << 0) |
|
||||
(readPin(C1) << 1) |
|
||||
(readPin(C2) << 2) |
|
||||
(readPin(B5) << 3)
|
||||
);
|
||||
matrix[2] = (
|
||||
(readPin(C3) << 0) |
|
||||
(readPin(C4) << 1) |
|
||||
(readPin(C5) << 2) |
|
||||
(readPin(C6) << 3) |
|
||||
(readPin(D7) << 4)
|
||||
);
|
||||
52
keyboards/clockworkpi_keypad/rules.mk
Normal file
52
keyboards/clockworkpi_keypad/rules.mk
Normal file
@@ -0,0 +1,52 @@
|
||||
# Copyright 2019 Jack Humbert <jack.humb@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/>.
|
||||
|
||||
# MCU name
|
||||
MCU = atmega328p
|
||||
PROTOCOL = VUSB
|
||||
|
||||
# unsupported features for now
|
||||
NO_UART = yes
|
||||
NO_SUSPEND_POWER_DOWN = yes
|
||||
|
||||
# processor frequency
|
||||
F_CPU = 16000000
|
||||
|
||||
# Bootloader
|
||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||
# different sizes, comment this out, and the correct address will be loaded
|
||||
# automatically (+60). See bootloader.mk for all options.
|
||||
# BOOTLOADER = usbasp
|
||||
PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
|
||||
|
||||
# build options
|
||||
BOOTMAGIC_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
||||
EXTRAKEY_ENABLE = yes
|
||||
CONSOLE_ENABLE = no
|
||||
COMMAND_ENABLE = yes
|
||||
KEY_LOCK_ENABLE = no
|
||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
AUDIO_ENABLE = no
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=2048
|
||||
|
||||
# custom matrix setup
|
||||
CUSTOM_MATRIX = yes
|
||||
SRC = matrix.c
|
||||
@@ -4,19 +4,11 @@ void uart_init(void) {
|
||||
SERIAL_UART_INIT();
|
||||
}
|
||||
|
||||
void led_init(void) {
|
||||
DDRD |= (1<<1);
|
||||
PORTD |= (1<<1);
|
||||
DDRF |= (1<<4) | (1<<5);
|
||||
PORTF |= (1<<4) | (1<<5);
|
||||
}
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user();
|
||||
uart_init();
|
||||
led_init();
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
|
||||
@@ -6,46 +6,6 @@
|
||||
#include "backlight.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define red_led_off PORTF |= (1<<5)
|
||||
#define red_led_on PORTF &= ~(1<<5)
|
||||
#define blu_led_off PORTF |= (1<<4)
|
||||
#define blu_led_on PORTF &= ~(1<<4)
|
||||
#define grn_led_off PORTD |= (1<<1)
|
||||
#define grn_led_on PORTD &= ~(1<<1)
|
||||
|
||||
#define set_led_off red_led_off; grn_led_off; blu_led_off
|
||||
#define set_led_red red_led_on; grn_led_off; blu_led_off
|
||||
#define set_led_blue red_led_off; grn_led_off; blu_led_on
|
||||
#define set_led_green red_led_off; grn_led_on; blu_led_off
|
||||
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
|
||||
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
|
||||
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
|
||||
#define set_led_white red_led_on; grn_led_on; blu_led_on
|
||||
|
||||
/*
|
||||
#define LED_B 5
|
||||
#define LED_R 6
|
||||
#define LED_G 7
|
||||
|
||||
#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
|
||||
|
||||
#define red_led_on PORTF |= (1<<LED_R)
|
||||
#define red_led_off PORTF &= ~(1<<LED_R)
|
||||
#define grn_led_on PORTF |= (1<<LED_G)
|
||||
#define grn_led_off PORTF &= ~(1<<LED_G)
|
||||
#define blu_led_on PORTF |= (1<<LED_B)
|
||||
#define blu_led_off PORTF &= ~(1<<LED_B)
|
||||
|
||||
#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
|
||||
#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
|
||||
#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
|
||||
#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
|
||||
#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
|
||||
#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
|
||||
#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
|
||||
#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
|
||||
*/
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
|
||||
@@ -41,12 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define ONESHOT_TIMEOUT 500
|
||||
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
@@ -65,6 +59,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
// Define masks for modifiers
|
||||
#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
|
||||
#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
|
||||
|
||||
//UART settings for communication with the RF microcontroller
|
||||
#define SERIAL_UART_BAUD 1000000
|
||||
#define SERIAL_UART_DATA UDR1
|
||||
|
||||
162
keyboards/comet46/i2c.c
Normal file
162
keyboards/comet46/i2c.c
Normal file
@@ -0,0 +1,162 @@
|
||||
#include <util/twi.h>
|
||||
#include <avr/io.h>
|
||||
#include <stdlib.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <util/twi.h>
|
||||
#include <stdbool.h>
|
||||
#include "i2c.h"
|
||||
|
||||
#ifdef USE_I2C
|
||||
|
||||
// Limits the amount of we wait for any one i2c transaction.
|
||||
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
|
||||
// 9 bits, a single transaction will take around 90μs to complete.
|
||||
//
|
||||
// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
|
||||
// poll loop takes at least 8 clock cycles to execute
|
||||
#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
|
||||
|
||||
#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
|
||||
|
||||
volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
|
||||
|
||||
static volatile uint8_t slave_buffer_pos;
|
||||
static volatile bool slave_has_register_set = false;
|
||||
|
||||
// Wait for an i2c operation to finish
|
||||
inline static
|
||||
void i2c_delay(void) {
|
||||
uint16_t lim = 0;
|
||||
while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
|
||||
lim++;
|
||||
|
||||
// easier way, but will wait slightly longer
|
||||
// _delay_us(100);
|
||||
}
|
||||
|
||||
// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
|
||||
void i2c_master_init(void) {
|
||||
// no prescaler
|
||||
TWSR = 0;
|
||||
// Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
|
||||
// Check datasheets for more info.
|
||||
TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
|
||||
}
|
||||
|
||||
// Start a transaction with the given i2c slave address. The direction of the
|
||||
// transfer is set with I2C_READ and I2C_WRITE.
|
||||
// returns: 0 => success
|
||||
// 1 => error
|
||||
uint8_t i2c_master_start(uint8_t address) {
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
|
||||
|
||||
i2c_delay();
|
||||
|
||||
// check that we started successfully
|
||||
if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
|
||||
return 1;
|
||||
|
||||
TWDR = address;
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
|
||||
i2c_delay();
|
||||
|
||||
if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
|
||||
return 1; // slave did not acknowledge
|
||||
else
|
||||
return 0; // success
|
||||
}
|
||||
|
||||
|
||||
// Finish the i2c transaction.
|
||||
void i2c_master_stop(void) {
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||
|
||||
uint16_t lim = 0;
|
||||
while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
|
||||
lim++;
|
||||
}
|
||||
|
||||
// Write one byte to the i2c slave.
|
||||
// returns 0 => slave ACK
|
||||
// 1 => slave NACK
|
||||
uint8_t i2c_master_write(uint8_t data) {
|
||||
TWDR = data;
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
|
||||
i2c_delay();
|
||||
|
||||
// check if the slave acknowledged us
|
||||
return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
|
||||
}
|
||||
|
||||
// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
|
||||
// if ack=0 the acknowledge bit is not set.
|
||||
// returns: byte read from i2c device
|
||||
uint8_t i2c_master_read(int ack) {
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
|
||||
|
||||
i2c_delay();
|
||||
return TWDR;
|
||||
}
|
||||
|
||||
void i2c_reset_state(void) {
|
||||
TWCR = 0;
|
||||
}
|
||||
|
||||
void i2c_slave_init(uint8_t address) {
|
||||
TWAR = address << 0; // slave i2c address
|
||||
// TWEN - twi enable
|
||||
// TWEA - enable address acknowledgement
|
||||
// TWINT - twi interrupt flag
|
||||
// TWIE - enable the twi interrupt
|
||||
TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
|
||||
}
|
||||
|
||||
ISR(TWI_vect);
|
||||
|
||||
ISR(TWI_vect) {
|
||||
uint8_t ack = 1;
|
||||
switch(TW_STATUS) {
|
||||
case TW_SR_SLA_ACK:
|
||||
// this device has been addressed as a slave receiver
|
||||
slave_has_register_set = false;
|
||||
break;
|
||||
|
||||
case TW_SR_DATA_ACK:
|
||||
// this device has received data as a slave receiver
|
||||
// The first byte that we receive in this transaction sets the location
|
||||
// of the read/write location of the slaves memory that it exposes over
|
||||
// i2c. After that, bytes will be written at slave_buffer_pos, incrementing
|
||||
// slave_buffer_pos after each write.
|
||||
if(!slave_has_register_set) {
|
||||
slave_buffer_pos = TWDR;
|
||||
// don't acknowledge the master if this memory loctaion is out of bounds
|
||||
if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
|
||||
ack = 0;
|
||||
slave_buffer_pos = 0;
|
||||
}
|
||||
slave_has_register_set = true;
|
||||
} else {
|
||||
i2c_slave_buffer[slave_buffer_pos] = TWDR;
|
||||
BUFFER_POS_INC();
|
||||
}
|
||||
break;
|
||||
|
||||
case TW_ST_SLA_ACK:
|
||||
case TW_ST_DATA_ACK:
|
||||
// master has addressed this device as a slave transmitter and is
|
||||
// requesting data.
|
||||
TWDR = i2c_slave_buffer[slave_buffer_pos];
|
||||
BUFFER_POS_INC();
|
||||
break;
|
||||
|
||||
case TW_BUS_ERROR: // something went wrong, reset twi state
|
||||
TWCR = 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Reset everything, so we are ready for the next TWI interrupt
|
||||
TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
|
||||
}
|
||||
#endif
|
||||
49
keyboards/comet46/i2c.h
Normal file
49
keyboards/comet46/i2c.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef I2C_H
|
||||
#define I2C_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef F_CPU
|
||||
#define F_CPU 16000000UL
|
||||
#endif
|
||||
|
||||
#define I2C_READ 1
|
||||
#define I2C_WRITE 0
|
||||
|
||||
#define I2C_ACK 1
|
||||
#define I2C_NACK 0
|
||||
|
||||
#define SLAVE_BUFFER_SIZE 0x10
|
||||
|
||||
// i2c SCL clock frequency 400kHz
|
||||
#define SCL_CLOCK 400000L
|
||||
|
||||
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
|
||||
|
||||
void i2c_master_init(void);
|
||||
uint8_t i2c_master_start(uint8_t address);
|
||||
void i2c_master_stop(void);
|
||||
uint8_t i2c_master_write(uint8_t data);
|
||||
uint8_t i2c_master_read(int);
|
||||
void i2c_reset_state(void);
|
||||
void i2c_slave_init(uint8_t address);
|
||||
|
||||
|
||||
static inline unsigned char i2c_start_read(unsigned char addr) {
|
||||
return i2c_master_start((addr << 1) | I2C_READ);
|
||||
}
|
||||
|
||||
static inline unsigned char i2c_start_write(unsigned char addr) {
|
||||
return i2c_master_start((addr << 1) | I2C_WRITE);
|
||||
}
|
||||
|
||||
// from SSD1306 scrips
|
||||
extern unsigned char i2c_rep_start(unsigned char addr);
|
||||
extern void i2c_start_wait(unsigned char addr);
|
||||
extern unsigned char i2c_readAck(void);
|
||||
extern unsigned char i2c_readNak(void);
|
||||
extern unsigned char i2c_read(unsigned char ack);
|
||||
|
||||
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
|
||||
|
||||
#endif
|
||||
226
keyboards/comet46/keymaps/default-rgbled/keymap.c
Normal file
226
keyboards/comet46/keymaps/default-rgbled/keymap.c
Normal file
@@ -0,0 +1,226 @@
|
||||
// this is the style you want to emulate.
|
||||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
|
||||
#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 comet46_layers
|
||||
{
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_DVORAK,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
DVORAK,
|
||||
LOWER,
|
||||
RAISE,
|
||||
};
|
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Ctl | A | S | D | F | G | Esc | | Del | H | J | K | L | ; | " |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | { | | } | N | M | , | . | / | Shift|
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | GUI | Lower| Space| | Enter| Raise| Alt |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_QWERTY] = LAYOUT(
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | GUI | Lower| Space| | Enter| Raise| Alt |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT(
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | GUI | Lower| Space| | Enter| Raise| Alt |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_DVORAK] = LAYOUT(
|
||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | ` | \ | - | = | [ | ] | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | ~ | | | _ | + | { | } | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | | | | | | | |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_LOWER] = LAYOUT(
|
||||
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | | 1 | 2 | 3 | 4 | 5 | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | | | | | | | |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_RAISE] = LAYOUT(
|
||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Adjust
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | |Qwerty| |Colemk| | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | |Reset | |Dvorak| | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | | | | | | | |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_ADJUST] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
|
||||
}
|
||||
|
||||
// settings for LED on receiver
|
||||
void led_init(void) {
|
||||
DDRD |= (1<<1);
|
||||
PORTD |= (1<<1);
|
||||
DDRF |= (1<<4) | (1<<5);
|
||||
PORTF |= (1<<4) | (1<<5);
|
||||
}
|
||||
|
||||
#define red_led_off PORTF |= (1<<5)
|
||||
#define red_led_on PORTF &= ~(1<<5)
|
||||
#define blu_led_off PORTF |= (1<<4)
|
||||
#define blu_led_on PORTF &= ~(1<<4)
|
||||
#define grn_led_off PORTD |= (1<<1)
|
||||
#define grn_led_on PORTD &= ~(1<<1)
|
||||
|
||||
#define set_led_off red_led_off; grn_led_off; blu_led_off
|
||||
#define set_led_red red_led_on; grn_led_off; blu_led_off
|
||||
#define set_led_blue red_led_off; grn_led_off; blu_led_on
|
||||
#define set_led_green red_led_off; grn_led_on; blu_led_off
|
||||
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
|
||||
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
|
||||
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
|
||||
#define set_led_white red_led_on; grn_led_on; blu_led_on
|
||||
|
||||
void matrix_init_user(void) {
|
||||
led_init();
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
uint8_t default_layer = biton32(eeconfig_read_default_layer());
|
||||
switch (layer) {
|
||||
case _LOWER:
|
||||
set_led_red;
|
||||
break;
|
||||
case _RAISE:
|
||||
set_led_blue;
|
||||
break;
|
||||
case _ADJUST:
|
||||
set_led_magenta;
|
||||
break;
|
||||
default:
|
||||
switch (default_layer) {
|
||||
case _COLEMAK:
|
||||
set_led_white;
|
||||
break;
|
||||
case _DVORAK:
|
||||
set_led_yellow;
|
||||
break;
|
||||
default:
|
||||
set_led_green;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
}
|
||||
break;
|
||||
case COLEMAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_COLEMAK);
|
||||
}
|
||||
break;
|
||||
case DVORAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_DVORAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
3
keyboards/comet46/keymaps/default-rgbled/readme.md
Normal file
3
keyboards/comet46/keymaps/default-rgbled/readme.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## default-led
|
||||
|
||||
A keymap that is compatible with mitosis-type receivers, which use RGB LED for layer indication.
|
||||
@@ -18,8 +18,14 @@ 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
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
// #include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
/* Use I2C or Serial */
|
||||
|
||||
#define USE_I2C
|
||||
#define SSD1306OLED
|
||||
|
||||
#endif
|
||||
@@ -2,6 +2,10 @@
|
||||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#ifdef SSD1306OLED
|
||||
#include "ssd1306.h"
|
||||
#endif
|
||||
|
||||
|
||||
// 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.
|
||||
@@ -9,13 +13,18 @@
|
||||
// entirely and just use numbers.
|
||||
enum comet46_layers
|
||||
{
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_DVORAK,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
DVORAK,
|
||||
LOWER,
|
||||
RAISE,
|
||||
};
|
||||
@@ -46,6 +55,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | GUI | Lower| Space| | Enter| Raise| Alt |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT(
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | GUI | Lower| Space| | Enter| Raise| Alt |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_DVORAK] = LAYOUT(
|
||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
|
||||
@@ -70,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | | | | | |
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | | | | | | | |
|
||||
* +--------------------/ \--------------------+
|
||||
@@ -78,26 +123,134 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_RAISE] = LAYOUT(
|
||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Adjust
|
||||
* ,-----------------------------------------+ +-----------------------------------------.
|
||||
* | | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | |Qwerty| |Colemk| | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
|
||||
* | | | | | | |Reset | |Dvorak| | | | | | |
|
||||
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
|
||||
* | | | | | | | |
|
||||
* +--------------------/ \--------------------+
|
||||
*/
|
||||
[_ADJUST] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
switch (layer) {
|
||||
case _QWERTY:
|
||||
set_led_green;
|
||||
break;
|
||||
case _RAISE:
|
||||
set_led_blue;
|
||||
break;
|
||||
case _LOWER:
|
||||
set_led_red;
|
||||
break;
|
||||
default:
|
||||
set_led_green;
|
||||
break;
|
||||
}
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
|
||||
}
|
||||
|
||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
|
||||
// You need to add source files to SRC in rules.mk when using OLED display functions
|
||||
void set_keylog(uint16_t keycode);
|
||||
const char *read_keylog(void);
|
||||
const char *read_modifier_state(void);
|
||||
const char *read_host_led_state(void);
|
||||
|
||||
void matrix_init_user(void) {
|
||||
iota_gfx_init(false); // turns on the display
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
iota_gfx_task(); // this is what updates the display continuously
|
||||
}
|
||||
|
||||
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||
dest->dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
void render_status(struct CharacterMatrix *matrix) {
|
||||
// Layer state
|
||||
char layer_str[22];
|
||||
matrix_write(matrix, "Layer: ");
|
||||
uint8_t layer = biton32(layer_state);
|
||||
uint8_t default_layer = biton32(eeconfig_read_default_layer());
|
||||
switch (layer) {
|
||||
case _QWERTY:
|
||||
switch (default_layer) {
|
||||
case _QWERTY:
|
||||
snprintf(layer_str, sizeof(layer_str), "Qwerty");
|
||||
break;
|
||||
case _COLEMAK:
|
||||
snprintf(layer_str, sizeof(layer_str), "Colemak");
|
||||
break;
|
||||
case _DVORAK:
|
||||
snprintf(layer_str, sizeof(layer_str), "Dvorak");
|
||||
break;
|
||||
default:
|
||||
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
snprintf(layer_str, sizeof(layer_str), "Raise");
|
||||
break;
|
||||
case _LOWER:
|
||||
snprintf(layer_str, sizeof(layer_str), "Lower");
|
||||
break;
|
||||
case _ADJUST:
|
||||
snprintf(layer_str, sizeof(layer_str), "Adjust");
|
||||
break;
|
||||
default:
|
||||
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
|
||||
}
|
||||
matrix_write_ln(matrix, layer_str);
|
||||
// Last entered keycode
|
||||
matrix_write_ln(matrix, read_keylog());
|
||||
// Modifier state
|
||||
matrix_write_ln(matrix, read_modifier_state());
|
||||
// Host Keyboard LED Status
|
||||
matrix_write(matrix, read_host_led_state());
|
||||
}
|
||||
|
||||
|
||||
void iota_gfx_task_user(void) {
|
||||
struct CharacterMatrix matrix;
|
||||
matrix_clear(&matrix);
|
||||
render_status(&matrix);
|
||||
matrix_update(&display, &matrix);
|
||||
}
|
||||
|
||||
#endif//SSD1306OLED
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
#ifdef SSD1306OLED
|
||||
if (record->event.pressed) {
|
||||
set_keylog(keycode);
|
||||
}
|
||||
#endif
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
}
|
||||
break;
|
||||
case COLEMAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_COLEMAK);
|
||||
}
|
||||
break;
|
||||
case DVORAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_DVORAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
3
keyboards/comet46/keymaps/default/readme.md
Normal file
3
keyboards/comet46/keymaps/default/readme.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## default-oled-display
|
||||
|
||||
A keymap that is compatible with receivers with an OLED display.
|
||||
5
keyboards/comet46/keymaps/default/rules.mk
Normal file
5
keyboards/comet46/keymaps/default/rules.mk
Normal file
@@ -0,0 +1,5 @@
|
||||
# If you want to change display settings of the OLED, you need to change the following lines
|
||||
SRC += ./lib/glcdfont.c \
|
||||
./lib/keylogger.c \
|
||||
./lib/modifier_state_reader.c \
|
||||
./lib/host_led_state_reader.c
|
||||
@@ -10,133 +10,133 @@ static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
|
||||
* Memo: Using other layer keymap to get keycode
|
||||
*/
|
||||
void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
|
||||
uint8_t prev_shift;
|
||||
uint16_t keycode;
|
||||
uint16_t pseudo_keycode;
|
||||
uint8_t prev_shift;
|
||||
uint16_t keycode;
|
||||
uint16_t pseudo_keycode;
|
||||
|
||||
/* get keycode from keymap you specified */
|
||||
keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
|
||||
/* get keycode from keymap you specified */
|
||||
keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
|
||||
|
||||
prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
|
||||
prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
|
||||
|
||||
if (record->event.pressed) {
|
||||
/* when magic commands entered, keycode does not converted */
|
||||
if (IS_COMMAND()) {
|
||||
if (prev_shift) {
|
||||
add_shift_bit(keycode);
|
||||
}
|
||||
register_code(keycode);
|
||||
return;
|
||||
}
|
||||
|
||||
if (prev_shift) {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, true);
|
||||
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
add_shift_bit(keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
register_code(QK_LSFT ^ pseudo_keycode);
|
||||
} else {
|
||||
/* delete shift mod temporarily */
|
||||
del_mods(prev_shift);
|
||||
send_keyboard_report();
|
||||
register_code(pseudo_keycode);
|
||||
add_mods(prev_shift);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, false);
|
||||
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
add_weak_mods(MOD_BIT(KC_LSFT));
|
||||
send_keyboard_report();
|
||||
register_code(QK_LSFT ^ pseudo_keycode);
|
||||
/* on Windows, prevent key repeat to avoid unintended output */
|
||||
unregister_code(QK_LSFT ^ pseudo_keycode);
|
||||
del_weak_mods(MOD_BIT(KC_LSFT));
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
register_code(pseudo_keycode);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (get_shift_bit(keycode)) {
|
||||
del_shift_bit(keycode);
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, true);
|
||||
} else {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, false);
|
||||
}
|
||||
dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
unregister_code(QK_LSFT ^ pseudo_keycode);
|
||||
} else {
|
||||
unregister_code(pseudo_keycode);
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
/* when magic commands entered, keycode does not converted */
|
||||
if (IS_COMMAND()) {
|
||||
if (prev_shift) {
|
||||
add_shift_bit(keycode);
|
||||
}
|
||||
register_code(keycode);
|
||||
return;
|
||||
}
|
||||
|
||||
if (prev_shift) {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, true);
|
||||
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
add_shift_bit(keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
register_code(QK_LSFT ^ pseudo_keycode);
|
||||
} else {
|
||||
/* delete shift mod temporarily */
|
||||
del_mods(prev_shift);
|
||||
send_keyboard_report();
|
||||
register_code(pseudo_keycode);
|
||||
add_mods(prev_shift);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, false);
|
||||
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
add_weak_mods(MOD_BIT(KC_LSFT));
|
||||
send_keyboard_report();
|
||||
register_code(QK_LSFT ^ pseudo_keycode);
|
||||
/* on Windows, prevent key repeat to avoid unintended output */
|
||||
unregister_code(QK_LSFT ^ pseudo_keycode);
|
||||
del_weak_mods(MOD_BIT(KC_LSFT));
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
register_code(pseudo_keycode);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (get_shift_bit(keycode)) {
|
||||
del_shift_bit(keycode);
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, true);
|
||||
} else {
|
||||
pseudo_keycode = convert_keycode(keymap, keycode, false);
|
||||
}
|
||||
dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
|
||||
|
||||
if (IS_LSFT(pseudo_keycode)) {
|
||||
unregister_code(QK_LSFT ^ pseudo_keycode);
|
||||
} else {
|
||||
unregister_code(pseudo_keycode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
|
||||
{
|
||||
uint16_t pseudo_keycode;
|
||||
uint16_t pseudo_keycode;
|
||||
|
||||
switch (keycode) {
|
||||
case KC_A ... KC_CAPSLOCK:
|
||||
#if defined(__AVR__)
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
|
||||
} else {
|
||||
pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
|
||||
}
|
||||
#else
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = keymap[keycode][1];
|
||||
} else {
|
||||
pseudo_keycode = keymap[keycode][0];
|
||||
}
|
||||
#endif
|
||||
/* if undefined, use got keycode as it is */
|
||||
if (pseudo_keycode == 0x00) {
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = S(keycode);
|
||||
} else {
|
||||
pseudo_keycode = keycode;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = S(keycode);
|
||||
} else {
|
||||
pseudo_keycode = keycode;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return pseudo_keycode;
|
||||
switch (keycode) {
|
||||
case KC_A ... KC_CAPSLOCK:
|
||||
#if defined(__AVR__)
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
|
||||
} else {
|
||||
pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
|
||||
}
|
||||
#else
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = keymap[keycode][1];
|
||||
} else {
|
||||
pseudo_keycode = keymap[keycode][0];
|
||||
}
|
||||
#endif
|
||||
/* if undefined, use got keycode as it is */
|
||||
if (pseudo_keycode == 0x00) {
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = S(keycode);
|
||||
} else {
|
||||
pseudo_keycode = keycode;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (shift_modded) {
|
||||
pseudo_keycode = S(keycode);
|
||||
} else {
|
||||
pseudo_keycode = keycode;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return pseudo_keycode;
|
||||
}
|
||||
|
||||
uint8_t get_shift_bit(uint16_t keycode) {
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
|
||||
return 0;
|
||||
}
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void add_shift_bit(uint16_t keycode) {
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
|
||||
}
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
|
||||
}
|
||||
}
|
||||
|
||||
void del_shift_bit(uint16_t keycode) {
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
|
||||
}
|
||||
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
|
||||
send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
|
||||
} else {
|
||||
dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
|
||||
}
|
||||
}
|
||||
|
||||
34
keyboards/comet46/keymaps/satt/config.h
Normal file
34
keyboards/comet46/keymaps/satt/config.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
This is the c configuration file for the keymap
|
||||
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
|
||||
)
|
||||
|
||||
/* Use I2C or Serial */
|
||||
|
||||
#define USE_I2C
|
||||
#define SSD1306OLED
|
||||
|
||||
#endif
|
||||
@@ -4,64 +4,96 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_jis2us.h"
|
||||
#include "action_pseudo_lut.h"
|
||||
#include "keymap_jp.h"
|
||||
#ifdef SSD1306OLED
|
||||
#include "ssd1306.h"
|
||||
#endif
|
||||
|
||||
// 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 comet46_layers {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_PSEUDO_US,
|
||||
_PSEUDO_US_LOWER,
|
||||
_PSEUDO_US_RAISE,
|
||||
_ADJUST
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_PSEUDO_US,
|
||||
_PSEUDO_US_LOWER,
|
||||
_PSEUDO_US_RAISE,
|
||||
_ADJUST
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
PSEUDO_US,
|
||||
JIS2US,
|
||||
};
|
||||
|
||||
#define KC_LWR MO(_LOWER)
|
||||
#define KC_RSE MO(_RAISE)
|
||||
// JIS keycodes
|
||||
#define KC_JZHT JP_ZHTG // hankaku/zenkaku|kanzi
|
||||
#define KC_JCIR JP_CIRC // ^, ~
|
||||
#define KC_JAT JP_AT // @, `
|
||||
#define KC_JLBR JP_LBRC // [, {
|
||||
#define KC_JCOL JP_COLN // :, *
|
||||
#define KC_JRBR JP_RBRC // ], }
|
||||
#define KC_JBSL JP_BSLS // \, _
|
||||
#define KC_JMHE JP_MHEN // muhenkan
|
||||
#define KC_JHEN JP_HENK // henkan
|
||||
#define KC_JKAN JP_KANA // katakana/hiragana|ro-mazi
|
||||
#define KC_JMKA JP_MKANA //kana on MacOSX
|
||||
#define KC_JMEI JP_MEISU //eisu on MacOSX
|
||||
#define KC_JAMP JP_AMPR // &
|
||||
#define KC_JQUO JP_QUOT // '
|
||||
#define KC_JLPR JP_LPRN // (
|
||||
#define KC_JRPR JP_RPRN // )
|
||||
#define KC_JEQL JP_EQL // =
|
||||
#define KC_JTIL JP_TILD // ~
|
||||
#define KC_JPIP JP_PIPE // |
|
||||
#define KC_JGRV JP_GRV // `
|
||||
#define KC_JLCB JP_LCBR // {
|
||||
#define KC_JPLU JP_PLUS // +
|
||||
#define KC_JAST JP_ASTR // *
|
||||
#define KC_JRCB JP_RCBR // }
|
||||
#define KC_JUND JP_UNDS // _
|
||||
|
||||
// Layer related keycodes
|
||||
#define KC_LWR MO(_LOWER)
|
||||
#define KC_RSE MO(_RAISE)
|
||||
#define KC_P_LW MO(_PSEUDO_US_LOWER)
|
||||
#define KC_P_RS MO(_PSEUDO_US_RAISE)
|
||||
#define KC_QWRT QWERTY
|
||||
#define KC_P_US PSEUDO_US
|
||||
#define KC_J2US JIS2US
|
||||
|
||||
// Special keycodes
|
||||
#define KC_SPCT CTL_T(KC_SPC)
|
||||
#define KC_ENSF SFT_T(KC_ENT)
|
||||
#define KC_SFTA SFT_T(KC_A)
|
||||
#define KC_CTSF S(KC_LCTL)
|
||||
#define KC_CAEC MT(MOD_LCTL | MOD_LALT, KC_ESC)
|
||||
#define KC_CSTB C_S_T(KC_TAB)
|
||||
#define KC_IMON ALT_T(KC_F13)
|
||||
#define KC_IMOF GUI_T(KC_F14)
|
||||
#define KC_SRO S(KC_RO)
|
||||
#define KC_SYEN S(KC_JYEN)
|
||||
#define KC_CAD LCA(KC_DEL)
|
||||
#define KC_RST RESET
|
||||
|
||||
#define LONGPRESS_DELAY 150
|
||||
|
||||
// Fillers to make layering more clear
|
||||
#define KC_ KC_TRNS
|
||||
#define KC_ KC_TRNS
|
||||
#define KC_XXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_QWERTY] = LAYOUT_kc(
|
||||
[_QWERTY] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
|
||||
CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
TAB ,SFTA, S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
|
||||
CSTB, A , S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
CTSF, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
|
||||
LSFT, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
IMOF,LWR ,SPCT, ENSF,RSE ,IMON
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_kc(
|
||||
[_LOWER] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
@@ -69,60 +101,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, F7 , F8 , F9 , F10, F11, F12, TILD,PIPE,UNDS,PLUS,LCBR,RCBR, ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , ,
|
||||
, , , , ,
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT_kc(
|
||||
[_RAISE] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
, , , , , , , XXXX,LEFT,DOWN, UP ,RGHT,END , ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
|
||||
, , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , ,
|
||||
, , , , ,
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
[_PSEUDO_US] = LAYOUT_kc(
|
||||
[_PSEUDO_US] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
|
||||
CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
TAB ,SFTA, S , D , F , G ,ASTR, LPRN, H , J , K , L ,FN0 ,BSPC,
|
||||
CSTB, A , S , D , F , G ,JLPR, JRPR, H , J , K , L ,J2US,BSPC,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
CTSF, Z , X , C , V , B ,FN0 , FN0 , N , M ,COMM,DOT ,SLSH,FN0 ,
|
||||
LSFT, Z , X , C , V , B ,J2US, J2US, N , M ,COMM,DOT ,SLSH,J2US,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
IMOF,P_LW,SPCT, ENSF,P_RS,IMON
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
|
||||
[_PSEUDO_US_LOWER] = LAYOUT_kc(
|
||||
[_PSEUDO_US_LOWER] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
,EXLM,LBRC,HASH,DLR ,PERC, EQL ,CIRC, DQT,ASTR,LPRN, ,
|
||||
,EXLM,JAT ,HASH,DLR ,PERC, JCIR,JAMP,JAST,JLPR,JRPR, ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
, F1 , F2 , F3 , F4 , F5 , F6 , LCBR,JYEN,MINS,UNDS,RBRC,BSLS, ,
|
||||
, F1 , F2 , F3 , F4 , F5 , F6 , JGRV,JBSL,MINS,JEQL,JLBR,JRBR, ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, F7 , F8 , F9 , F10, F11, F12, PLUS,SYEN,SRO ,COLN,RCBR,PIPE, ,
|
||||
, F7 , F8 , F9 , F10, F11, F12, JTIL,JPIP,JUND,JPLU,JLCB,JRCB, ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , ,
|
||||
, , , , ,
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
[_PSEUDO_US_RAISE] = LAYOUT_kc(
|
||||
[_PSEUDO_US_RAISE] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
, , , , , , GRV, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
|
||||
, , , , , ,JZHT, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
|
||||
, , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , ,
|
||||
, , , , ,
|
||||
// +----+----+---/ \---+----+----+
|
||||
),
|
||||
|
||||
[_ADJUST] = LAYOUT_kc(
|
||||
[_ADJUST] = LAYOUT_kc(
|
||||
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
|
||||
, , , , , , , , , , , ,
|
||||
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
|
||||
@@ -130,69 +162,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , , ,RST , P_US, , , , , , ,
|
||||
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
|
||||
, , , , ,
|
||||
, , , , ,
|
||||
// +----+----+---/ \---+----+----+
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* user defined action function
|
||||
*/
|
||||
enum function_id {
|
||||
PSEUDO_US_FUNCTION,
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch (id)
|
||||
{
|
||||
case PSEUDO_US_FUNCTION:
|
||||
action_pseudo_lut(record, _QWERTY, keymap_jis2us);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
|
||||
};
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
switch (layer) {
|
||||
case _LOWER:
|
||||
set_led_red;
|
||||
break;
|
||||
case _RAISE:
|
||||
set_led_blue;
|
||||
break;
|
||||
case _PSEUDO_US_LOWER:
|
||||
set_led_yellow;
|
||||
break;
|
||||
case _PSEUDO_US_RAISE:
|
||||
set_led_cyan;
|
||||
break;
|
||||
case _ADJUST:
|
||||
set_led_magenta;
|
||||
break;
|
||||
default:
|
||||
set_led_green;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _PSEUDO_US:
|
||||
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
|
||||
break;
|
||||
case _PSEUDO_US_LOWER:
|
||||
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
|
||||
break;
|
||||
case _PSEUDO_US_RAISE:
|
||||
case _PSEUDO_US_RAISE:
|
||||
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
|
||||
break;
|
||||
default:
|
||||
@@ -201,19 +180,112 @@ uint32_t layer_state_set_user(uint32_t state) {
|
||||
}
|
||||
}
|
||||
|
||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
|
||||
// You need to add source files to SRC in rules.mk when using OLED display functions
|
||||
void set_keylog(uint16_t keycode);
|
||||
const char *read_keylog(void);
|
||||
const char *read_modifier_state(void);
|
||||
const char *read_host_led_state(void);
|
||||
|
||||
void matrix_init_user(void) {
|
||||
iota_gfx_init(false); // turns on the display
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
iota_gfx_task(); // this is what updates the display continuously
|
||||
}
|
||||
|
||||
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||
dest->dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
void render_status(struct CharacterMatrix *matrix) {
|
||||
// Layer state
|
||||
char layer_str[22];
|
||||
matrix_write(matrix, "Layer: ");
|
||||
uint8_t layer = biton32(layer_state);
|
||||
uint8_t default_layer = biton32(eeconfig_read_default_layer());
|
||||
switch (layer) {
|
||||
case _QWERTY:
|
||||
switch (default_layer) {
|
||||
case _QWERTY:
|
||||
snprintf(layer_str, sizeof(layer_str), "Qwerty");
|
||||
break;
|
||||
case _PSEUDO_US:
|
||||
snprintf(layer_str, sizeof(layer_str), "Psuedo_US");
|
||||
break;
|
||||
default:
|
||||
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
snprintf(layer_str, sizeof(layer_str), "Raise");
|
||||
break;
|
||||
case _LOWER:
|
||||
snprintf(layer_str, sizeof(layer_str), "Lower");
|
||||
break;
|
||||
case _PSEUDO_US_RAISE:
|
||||
snprintf(layer_str, sizeof(layer_str), "P_US_Raise");
|
||||
break;
|
||||
case _PSEUDO_US_LOWER:
|
||||
snprintf(layer_str, sizeof(layer_str), "P_US_Lower");
|
||||
break;
|
||||
case _ADJUST:
|
||||
snprintf(layer_str, sizeof(layer_str), "Adjust");
|
||||
break;
|
||||
default:
|
||||
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
|
||||
}
|
||||
matrix_write_ln(matrix, layer_str);
|
||||
// Last entered keycode
|
||||
matrix_write_ln(matrix, read_keylog());
|
||||
// Modifier state
|
||||
matrix_write_ln(matrix, read_modifier_state());
|
||||
// Host Keyboard LED Status
|
||||
matrix_write(matrix, read_host_led_state());
|
||||
}
|
||||
|
||||
void iota_gfx_task_user(void) {
|
||||
struct CharacterMatrix matrix;
|
||||
|
||||
#if DEBUG_TO_SCREEN
|
||||
if (debug_enable) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
matrix_clear(&matrix);
|
||||
render_status(&matrix);
|
||||
matrix_update(&display, &matrix);
|
||||
}
|
||||
|
||||
#endif//SSD1306OLED
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
#ifdef SSD1306OLED
|
||||
if (record->event.pressed) {
|
||||
set_keylog(keycode);
|
||||
}
|
||||
#endif
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case PSEUDO_US:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_PSEUDO_US);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case JIS2US:
|
||||
action_pseudo_lut(record, _QWERTY, keymap_jis2us);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -3,30 +3,30 @@
|
||||
|
||||
/* keymap for convert from JIS to US */
|
||||
const uint16_t PROGMEM keymap_jis2us[][2] = {
|
||||
[KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
|
||||
[KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
|
||||
|
||||
[KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
|
||||
[KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
|
||||
[KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
|
||||
[KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
|
||||
[KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
|
||||
[KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
|
||||
[KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
|
||||
[KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
|
||||
[KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
|
||||
[KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
|
||||
[KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
|
||||
[KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
|
||||
[KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
|
||||
[KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
|
||||
[KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
|
||||
[KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
|
||||
[KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
|
||||
[KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
|
||||
[KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
|
||||
[KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
|
||||
[KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
|
||||
[KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
|
||||
[KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
|
||||
[KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
|
||||
[KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
|
||||
[KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
|
||||
[KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
|
||||
[KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
|
||||
[KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
|
||||
[KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
|
||||
[KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
|
||||
[KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
|
||||
[KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
|
||||
[KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
|
||||
[KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
|
||||
[KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
|
||||
[KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
|
||||
[KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
|
||||
[KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
|
||||
[KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
|
||||
[KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
|
||||
[KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
|
||||
[KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
|
||||
[KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,26 +1,7 @@
|
||||
SRC += action_pseudo_lut.c
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
ONEHAND_ENABLE = no # Enable one-hand typing
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
# If you want to change display settings of the OLED, you need to change the following lines
|
||||
SRC += ./lib/glcdfont.c \
|
||||
./lib/keylogger.c \
|
||||
./lib/modifier_state_reader.c \
|
||||
./lib/host_led_state_reader.c
|
||||
|
||||
148
keyboards/comet46/lib/glcdfont.c
Normal file
148
keyboards/comet46/lib/glcdfont.c
Normal file
@@ -0,0 +1,148 @@
|
||||
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
|
||||
// See gfxfont.h for newer custom bitmap font info.
|
||||
|
||||
#ifndef FONT5X7_H
|
||||
#define FONT5X7_H
|
||||
|
||||
#ifdef __AVR__
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#elif defined(ESP8266)
|
||||
#include <pgmspace.h>
|
||||
#else
|
||||
#define PROGMEM
|
||||
#endif
|
||||
|
||||
// Standard ASCII 5x7 font
|
||||
|
||||
const unsigned char font[] PROGMEM = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 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,
|
||||
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 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, 0x7E, 0x04, 0x08, 0x00,
|
||||
0x10, 0x20, 0x7E, 0x20, 0x10, 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,
|
||||
0x00, 0x41, 0x22, 0x14, 0x08, 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, 0x30, 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
|
||||
};
|
||||
#endif // FONT5X7_H
|
||||
15
keyboards/comet46/lib/host_led_state_reader.c
Normal file
15
keyboards/comet46/lib/host_led_state_reader.c
Normal file
@@ -0,0 +1,15 @@
|
||||
#include <stdio.h>
|
||||
#include "comet46.h"
|
||||
|
||||
char host_led_state_str[22];
|
||||
|
||||
const char *read_host_led_state(void) {
|
||||
uint8_t leds = host_keyboard_leds();
|
||||
|
||||
snprintf(host_led_state_str, sizeof(host_led_state_str), "Lock: %s%s%s",
|
||||
(leds & (1 << USB_LED_CAPS_LOCK)) ? "CAPL " : "",
|
||||
(leds & (1 << USB_LED_SCROLL_LOCK)) ? "SCRL " : "",
|
||||
(leds & (1 << USB_LED_NUM_LOCK)) ? "NUML" : "");
|
||||
|
||||
return host_led_state_str;
|
||||
}
|
||||
294
keyboards/comet46/lib/keylogger.c
Normal file
294
keyboards/comet46/lib/keylogger.c
Normal file
@@ -0,0 +1,294 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __AVR__
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#else
|
||||
#define PROGMEM
|
||||
#endif
|
||||
|
||||
#define NUM_USB_HID_KEYCODES 255
|
||||
#define LEN_KEYCODE_STR 4
|
||||
|
||||
char keylog[22] = {"KC: ID: "};
|
||||
|
||||
// Quick and dirty way to display USB HID keycodes used in QMK
|
||||
// USB HID keycodes from 0x0000 to 0x00FF are stored in a 4x256+1 length char
|
||||
const char code_to_name[] PROGMEM = {
|
||||
"NO " //0x00
|
||||
"TRNS"
|
||||
"? "
|
||||
"? "
|
||||
"A "
|
||||
"B "
|
||||
"C "
|
||||
"D "
|
||||
"E "
|
||||
"F "
|
||||
"G "
|
||||
"H "
|
||||
"I "
|
||||
"J "
|
||||
"K "
|
||||
"L "
|
||||
"M " //0x10
|
||||
"N "
|
||||
"O "
|
||||
"P "
|
||||
"Q "
|
||||
"R "
|
||||
"S "
|
||||
"T "
|
||||
"U "
|
||||
"V "
|
||||
"W "
|
||||
"X "
|
||||
"Y "
|
||||
"Z "
|
||||
"1 "
|
||||
"2 "
|
||||
"3 " //0x20
|
||||
"4 "
|
||||
"5 "
|
||||
"6 "
|
||||
"7 "
|
||||
"8 "
|
||||
"9 "
|
||||
"0 "
|
||||
"ENT "
|
||||
"ESC "
|
||||
"BSPC"
|
||||
"TAB "
|
||||
"SPC "
|
||||
"MINS"
|
||||
"EQL "
|
||||
"LBRC"
|
||||
"RBRC" //0x30
|
||||
"BSLS"
|
||||
"NUHS"
|
||||
"SCLN"
|
||||
"QUOT"
|
||||
"GRV "
|
||||
"COMM"
|
||||
"DOT "
|
||||
"SLSH"
|
||||
"CAPS"
|
||||
"F1 "
|
||||
"F2 "
|
||||
"F3 "
|
||||
"F4 "
|
||||
"F5 "
|
||||
"F6 "
|
||||
"F7 " //0x40
|
||||
"F8 "
|
||||
"F9 "
|
||||
"F10 "
|
||||
"F11 "
|
||||
"F12 "
|
||||
"PSCR"
|
||||
"SLCK"
|
||||
"PAUS"
|
||||
"INS "
|
||||
"HOME"
|
||||
"PGUP"
|
||||
"DEL "
|
||||
"END "
|
||||
"PGDN"
|
||||
"RGHT"
|
||||
"LEFT" //0x50
|
||||
"DOWN"
|
||||
"UP "
|
||||
"NLCK"
|
||||
"PSLS"
|
||||
"PAST"
|
||||
"PMNS"
|
||||
"PPLS"
|
||||
"PENT"
|
||||
"P1 "
|
||||
"P2 "
|
||||
"P3 "
|
||||
"P4 "
|
||||
"P5 "
|
||||
"P6 "
|
||||
"P7 "
|
||||
"P8 " //0x60
|
||||
"P9 "
|
||||
"P0 "
|
||||
"PDOT"
|
||||
"NUBS"
|
||||
"APP "
|
||||
"POW "
|
||||
"PEQL"
|
||||
"F13 "
|
||||
"F14 "
|
||||
"F15 "
|
||||
"F16 "
|
||||
"F17 "
|
||||
"F18 "
|
||||
"F19 "
|
||||
"F20 "
|
||||
"F21 " //0x70
|
||||
"F22 "
|
||||
"F23 "
|
||||
"F24 "
|
||||
"EXEC"
|
||||
"HELP"
|
||||
"MENU"
|
||||
"SLCT"
|
||||
"STOP"
|
||||
"AGIN"
|
||||
"UNDO"
|
||||
"CUT "
|
||||
"COPY"
|
||||
"PSTE"
|
||||
"FIND"
|
||||
"_MUT"
|
||||
"_VUP" //0x80
|
||||
"_VDN"
|
||||
"LCAP"
|
||||
"LNUM"
|
||||
"LSCR"
|
||||
"PCMM"
|
||||
"PEQA"
|
||||
"INT1"
|
||||
"INT2"
|
||||
"INT3"
|
||||
"INT4"
|
||||
"INT5"
|
||||
"INT6"
|
||||
"INT7"
|
||||
"INT8"
|
||||
"INT9"
|
||||
"LAN1" //0x90
|
||||
"LAN2"
|
||||
"LAN3"
|
||||
"LAN4"
|
||||
"LAN5"
|
||||
"LAN6"
|
||||
"LAN7"
|
||||
"LAN8"
|
||||
"LAN9"
|
||||
"ERAS"
|
||||
"SYSR"
|
||||
"CNCL"
|
||||
"CLR "
|
||||
"PRIR"
|
||||
"RTRN"
|
||||
"SEP "
|
||||
"OUT " //0xA0
|
||||
"OPER"
|
||||
"CLRA"
|
||||
"CSEL"
|
||||
"ESEL"
|
||||
"PWR " //0xA5
|
||||
"SLEP"
|
||||
"WAKE"
|
||||
"MUTE"
|
||||
"VOLU"
|
||||
"VOLD"
|
||||
"MNXT"
|
||||
"MPRV"
|
||||
"MSTP"
|
||||
"MPLY"
|
||||
"MSEL"
|
||||
"EJCT" //0xB0
|
||||
"MAIL"
|
||||
"CALC"
|
||||
"MYCM"
|
||||
"WSCH"
|
||||
"WHOM"
|
||||
"WBAK"
|
||||
"WFWD"
|
||||
"WSTP"
|
||||
"WREF"
|
||||
"WFAV"
|
||||
"MFFD"
|
||||
"MRWD"
|
||||
"BRIU"
|
||||
"BRID"
|
||||
"? "
|
||||
"FN0 " //0xC0
|
||||
"FN1 "
|
||||
"FN2 "
|
||||
"FN3 "
|
||||
"FN4 "
|
||||
"FN5 "
|
||||
"FN6 "
|
||||
"FN7 "
|
||||
"FN8 "
|
||||
"FN9 "
|
||||
"FN10"
|
||||
"FN11"
|
||||
"FN12"
|
||||
"FN13"
|
||||
"FN14"
|
||||
"FN15"
|
||||
"FN16" //0xD0
|
||||
"FN17"
|
||||
"FN18"
|
||||
"FN19"
|
||||
"FN20"
|
||||
"FN21"
|
||||
"FN22"
|
||||
"FN23"
|
||||
"FN24"
|
||||
"FN25"
|
||||
"FN26"
|
||||
"FN27"
|
||||
"FN28"
|
||||
"FN29"
|
||||
"FN30"
|
||||
"FN31"
|
||||
"LCTL" //0xE0
|
||||
"LSFT"
|
||||
"LALT"
|
||||
"LGUI"
|
||||
"RCTL"
|
||||
"RSFT"
|
||||
"RALT"
|
||||
"RGUI"
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"? "
|
||||
"MS_U" //0xF0
|
||||
"MS_D"
|
||||
"MS_L"
|
||||
"MS_R"
|
||||
"BTN1"
|
||||
"BTN2"
|
||||
"BTN3"
|
||||
"BTN4"
|
||||
"BTN5"
|
||||
"WH_U"
|
||||
"WH_D"
|
||||
"WH_L"
|
||||
"WH_R"
|
||||
"ACL0"
|
||||
"ACL1"
|
||||
"ACL2"
|
||||
};
|
||||
|
||||
void set_keylog(uint16_t keycode)
|
||||
{
|
||||
char name[LEN_KEYCODE_STR+1] = "? ";
|
||||
|
||||
if (keycode <= NUM_USB_HID_KEYCODES) {
|
||||
for (uint8_t k = 0; k < LEN_KEYCODE_STR; k++) {
|
||||
name[k] = pgm_read_byte_near(code_to_name + keycode * LEN_KEYCODE_STR + k);
|
||||
}
|
||||
} else if (keycode > NUM_USB_HID_KEYCODES) {
|
||||
snprintf(name, sizeof(name), "QMK ");
|
||||
}
|
||||
|
||||
// update keylog
|
||||
snprintf(keylog, sizeof(keylog), "KC: %s ID: %d", name, keycode);
|
||||
}
|
||||
|
||||
const char *read_keylog(void) {
|
||||
return keylog;
|
||||
}
|
||||
18
keyboards/comet46/lib/modifier_state_reader.c
Normal file
18
keyboards/comet46/lib/modifier_state_reader.c
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <stdio.h>
|
||||
#include "comet46.h"
|
||||
|
||||
char modifier_state_str[22];
|
||||
|
||||
const char *read_modifier_state(void) {
|
||||
uint8_t modifiers = get_mods();
|
||||
uint8_t one_shot = get_oneshot_mods();
|
||||
|
||||
snprintf(modifier_state_str, sizeof(modifier_state_str), "Mod: %s%s%s%s",
|
||||
(modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL " : "",
|
||||
(modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI " : "",
|
||||
(modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT " : "",
|
||||
(modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : ""
|
||||
);
|
||||
|
||||
return modifier_state_str;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
# Comet46
|
||||
|
||||

|
||||

|
||||
|
||||
A split wireless 40% column-staggered keyboard
|
||||
|
||||
@@ -13,4 +13,5 @@ Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make comet46:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
||||
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
|
||||
OPT_DEFS += -DCOMET46_ORTHO_===PROMICRO
|
||||
COMET46_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||
|
||||
# # project specific files
|
||||
SRC = matrix.c
|
||||
|
||||
|
||||
SRC += matrix.c \
|
||||
i2c.c \
|
||||
ssd1306.c
|
||||
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
@@ -24,8 +20,6 @@ MCU = atmega32u4
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
@@ -48,7 +42,7 @@ F_USB = $(F_CPU)
|
||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||
# different sizes, comment this out, and the correct address will be loaded
|
||||
# automatically (+60). See bootloader.mk for all options.
|
||||
BOOTLOADER = caterina
|
||||
# BOOTLOADER = caterina
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
344
keyboards/comet46/ssd1306.c
Normal file
344
keyboards/comet46/ssd1306.c
Normal file
@@ -0,0 +1,344 @@
|
||||
#ifdef SSD1306OLED
|
||||
|
||||
#include "ssd1306.h"
|
||||
#include "i2c.h"
|
||||
#include <string.h>
|
||||
#include "print.h"
|
||||
#ifdef ADAFRUIT_BLE_ENABLE
|
||||
#include "adafruit_ble.h"
|
||||
#endif
|
||||
#ifdef PROTOCOL_LUFA
|
||||
#include "lufa.h"
|
||||
#endif
|
||||
#include "sendchar.h"
|
||||
#include "timer.h"
|
||||
|
||||
static const unsigned char font[] PROGMEM;
|
||||
|
||||
// Set this to 1 to help diagnose early startup problems
|
||||
// when testing power-on with ble. Turn it off otherwise,
|
||||
// as the latency of printing most of the debug info messes
|
||||
// with the matrix scan, causing keys to drop.
|
||||
#define DEBUG_TO_SCREEN 0
|
||||
|
||||
//static uint16_t last_battery_update;
|
||||
//static uint32_t vbat;
|
||||
//#define BatteryUpdateInterval 10000 /* milliseconds */
|
||||
|
||||
// 'last_flush' is declared as uint16_t,
|
||||
// so this must be less than 65535
|
||||
#define ScreenOffInterval 60000 /* milliseconds */
|
||||
#if DEBUG_TO_SCREEN
|
||||
static uint8_t displaying;
|
||||
#endif
|
||||
static uint16_t last_flush;
|
||||
|
||||
static bool force_dirty = true;
|
||||
|
||||
// Write command sequence.
|
||||
// Returns true on success.
|
||||
static inline bool _send_cmd1(uint8_t cmd) {
|
||||
bool res = false;
|
||||
|
||||
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||
xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (i2c_master_write(0x0 /* command byte follows */)) {
|
||||
print("failed to write control byte\n");
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (i2c_master_write(cmd)) {
|
||||
xprintf("failed to write command %d\n", cmd);
|
||||
goto done;
|
||||
}
|
||||
res = true;
|
||||
done:
|
||||
i2c_master_stop();
|
||||
return res;
|
||||
}
|
||||
|
||||
// Write 2-byte command sequence.
|
||||
// Returns true on success
|
||||
static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
|
||||
if (!_send_cmd1(cmd)) {
|
||||
return false;
|
||||
}
|
||||
return _send_cmd1(opr);
|
||||
}
|
||||
|
||||
// Write 3-byte command sequence.
|
||||
// Returns true on success
|
||||
static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
|
||||
if (!_send_cmd1(cmd)) {
|
||||
return false;
|
||||
}
|
||||
if (!_send_cmd1(opr1)) {
|
||||
return false;
|
||||
}
|
||||
return _send_cmd1(opr2);
|
||||
}
|
||||
|
||||
#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
|
||||
#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
|
||||
#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
|
||||
|
||||
static void clear_display(void) {
|
||||
matrix_clear(&display);
|
||||
|
||||
// Clear all of the display bits (there can be random noise
|
||||
// in the RAM on startup)
|
||||
send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
|
||||
send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
|
||||
|
||||
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||
goto done;
|
||||
}
|
||||
if (i2c_master_write(0x40)) {
|
||||
// Data mode
|
||||
goto done;
|
||||
}
|
||||
for (uint8_t row = 0; row < MatrixRows; ++row) {
|
||||
for (uint8_t col = 0; col < DisplayWidth; ++col) {
|
||||
i2c_master_write(0);
|
||||
}
|
||||
}
|
||||
|
||||
display.dirty = false;
|
||||
|
||||
done:
|
||||
i2c_master_stop();
|
||||
}
|
||||
|
||||
#if DEBUG_TO_SCREEN
|
||||
#undef sendchar
|
||||
static int8_t capture_sendchar(uint8_t c) {
|
||||
sendchar(c);
|
||||
iota_gfx_write_char(c);
|
||||
|
||||
if (!displaying) {
|
||||
iota_gfx_flush();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool iota_gfx_init(bool rotate) {
|
||||
bool success = false;
|
||||
|
||||
i2c_master_init();
|
||||
send_cmd1(DisplayOff);
|
||||
send_cmd2(SetDisplayClockDiv, 0x80);
|
||||
send_cmd2(SetMultiPlex, DisplayHeight - 1);
|
||||
|
||||
send_cmd2(SetDisplayOffset, 0);
|
||||
|
||||
|
||||
send_cmd1(SetStartLine | 0x0);
|
||||
send_cmd2(SetChargePump, 0x14 /* Enable */);
|
||||
send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
|
||||
|
||||
if(rotate){
|
||||
// the following Flip the display orientation 180 degrees
|
||||
send_cmd1(SegRemap);
|
||||
send_cmd1(ComScanInc);
|
||||
}else{
|
||||
// Flips the display orientation 0 degrees
|
||||
send_cmd1(SegRemap | 0x1);
|
||||
send_cmd1(ComScanDec);
|
||||
}
|
||||
|
||||
send_cmd2(SetComPins, 0x2);
|
||||
send_cmd2(SetContrast, 0x8f);
|
||||
send_cmd2(SetPreCharge, 0xf1);
|
||||
send_cmd2(SetVComDetect, 0x40);
|
||||
send_cmd1(DisplayAllOnResume);
|
||||
send_cmd1(NormalDisplay);
|
||||
send_cmd1(DeActivateScroll);
|
||||
send_cmd1(DisplayOn);
|
||||
|
||||
send_cmd2(SetContrast, 0); // Dim
|
||||
|
||||
clear_display();
|
||||
|
||||
success = true;
|
||||
|
||||
iota_gfx_flush();
|
||||
|
||||
#if DEBUG_TO_SCREEN
|
||||
print_set_sendchar(capture_sendchar);
|
||||
#endif
|
||||
|
||||
done:
|
||||
return success;
|
||||
}
|
||||
|
||||
bool iota_gfx_off(void) {
|
||||
bool success = false;
|
||||
|
||||
send_cmd1(DisplayOff);
|
||||
success = true;
|
||||
|
||||
done:
|
||||
return success;
|
||||
}
|
||||
|
||||
bool iota_gfx_on(void) {
|
||||
bool success = false;
|
||||
|
||||
send_cmd1(DisplayOn);
|
||||
success = true;
|
||||
|
||||
done:
|
||||
return success;
|
||||
}
|
||||
|
||||
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
|
||||
*matrix->cursor = c;
|
||||
++matrix->cursor;
|
||||
|
||||
if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
|
||||
// We went off the end; scroll the display upwards by one line
|
||||
memmove(&matrix->display[0], &matrix->display[1],
|
||||
MatrixCols * (MatrixRows - 1));
|
||||
matrix->cursor = &matrix->display[MatrixRows - 1][0];
|
||||
memset(matrix->cursor, ' ', MatrixCols);
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
|
||||
matrix->dirty = true;
|
||||
|
||||
if (c == '\n') {
|
||||
// Clear to end of line from the cursor and then move to the
|
||||
// start of the next line
|
||||
uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
|
||||
|
||||
while (cursor_col++ < MatrixCols) {
|
||||
matrix_write_char_inner(matrix, ' ');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
matrix_write_char_inner(matrix, c);
|
||||
}
|
||||
|
||||
void iota_gfx_write_char(uint8_t c) {
|
||||
matrix_write_char(&display, c);
|
||||
}
|
||||
|
||||
void matrix_write(struct CharacterMatrix *matrix, const char *data) {
|
||||
const char *end = data + strlen(data);
|
||||
while (data < end) {
|
||||
matrix_write_char(matrix, *data);
|
||||
++data;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
|
||||
char data_ln[strlen(data)+2];
|
||||
snprintf(data_ln, sizeof(data_ln), "%s\n", data);
|
||||
matrix_write(matrix, data_ln);
|
||||
}
|
||||
|
||||
void iota_gfx_write(const char *data) {
|
||||
matrix_write(&display, data);
|
||||
}
|
||||
|
||||
void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
|
||||
while (true) {
|
||||
uint8_t c = pgm_read_byte(data);
|
||||
if (c == 0) {
|
||||
return;
|
||||
}
|
||||
matrix_write_char(matrix, c);
|
||||
++data;
|
||||
}
|
||||
}
|
||||
|
||||
void iota_gfx_write_P(const char *data) {
|
||||
matrix_write_P(&display, data);
|
||||
}
|
||||
|
||||
void matrix_clear(struct CharacterMatrix *matrix) {
|
||||
memset(matrix->display, ' ', sizeof(matrix->display));
|
||||
matrix->cursor = &matrix->display[0][0];
|
||||
matrix->dirty = true;
|
||||
}
|
||||
|
||||
void iota_gfx_clear_screen(void) {
|
||||
matrix_clear(&display);
|
||||
}
|
||||
|
||||
void matrix_render(struct CharacterMatrix *matrix) {
|
||||
last_flush = timer_read();
|
||||
iota_gfx_on();
|
||||
#if DEBUG_TO_SCREEN
|
||||
++displaying;
|
||||
#endif
|
||||
|
||||
// Move to the home position
|
||||
send_cmd3(PageAddr, 0, MatrixRows - 1);
|
||||
send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
|
||||
|
||||
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||
goto done;
|
||||
}
|
||||
if (i2c_master_write(0x40)) {
|
||||
// Data mode
|
||||
goto done;
|
||||
}
|
||||
|
||||
for (uint8_t row = 0; row < MatrixRows; ++row) {
|
||||
for (uint8_t col = 0; col < MatrixCols; ++col) {
|
||||
const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
|
||||
|
||||
for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
|
||||
uint8_t colBits = pgm_read_byte(glyph + glyphCol);
|
||||
i2c_master_write(colBits);
|
||||
}
|
||||
|
||||
// 1 column of space between chars (it's not included in the glyph)
|
||||
//i2c_master_write(0);
|
||||
}
|
||||
}
|
||||
|
||||
matrix->dirty = false;
|
||||
|
||||
done:
|
||||
i2c_master_stop();
|
||||
#if DEBUG_TO_SCREEN
|
||||
--displaying;
|
||||
#endif
|
||||
}
|
||||
|
||||
void iota_gfx_flush(void) {
|
||||
matrix_render(&display);
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void iota_gfx_task_user(void) {
|
||||
}
|
||||
|
||||
void iota_gfx_task(void) {
|
||||
iota_gfx_task_user();
|
||||
|
||||
if (display.dirty|| force_dirty) {
|
||||
iota_gfx_flush();
|
||||
force_dirty = false;
|
||||
}
|
||||
|
||||
if (timer_elapsed(last_flush) > ScreenOffInterval) {
|
||||
iota_gfx_off();
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
|
||||
force_dirty = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
91
keyboards/comet46/ssd1306.h
Normal file
91
keyboards/comet46/ssd1306.h
Normal file
@@ -0,0 +1,91 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include "pincontrol.h"
|
||||
#include "action.h"
|
||||
|
||||
enum ssd1306_cmds {
|
||||
DisplayOff = 0xAE,
|
||||
DisplayOn = 0xAF,
|
||||
|
||||
SetContrast = 0x81,
|
||||
DisplayAllOnResume = 0xA4,
|
||||
|
||||
DisplayAllOn = 0xA5,
|
||||
NormalDisplay = 0xA6,
|
||||
InvertDisplay = 0xA7,
|
||||
SetDisplayOffset = 0xD3,
|
||||
SetComPins = 0xda,
|
||||
SetVComDetect = 0xdb,
|
||||
SetDisplayClockDiv = 0xD5,
|
||||
SetPreCharge = 0xd9,
|
||||
SetMultiPlex = 0xa8,
|
||||
SetLowColumn = 0x00,
|
||||
SetHighColumn = 0x10,
|
||||
SetStartLine = 0x40,
|
||||
|
||||
SetMemoryMode = 0x20,
|
||||
ColumnAddr = 0x21,
|
||||
PageAddr = 0x22,
|
||||
|
||||
ComScanInc = 0xc0,
|
||||
ComScanDec = 0xc8,
|
||||
SegRemap = 0xa0,
|
||||
SetChargePump = 0x8d,
|
||||
ExternalVcc = 0x01,
|
||||
SwitchCapVcc = 0x02,
|
||||
|
||||
ActivateScroll = 0x2f,
|
||||
DeActivateScroll = 0x2e,
|
||||
SetVerticalScrollArea = 0xa3,
|
||||
RightHorizontalScroll = 0x26,
|
||||
LeftHorizontalScroll = 0x27,
|
||||
VerticalAndRightHorizontalScroll = 0x29,
|
||||
VerticalAndLeftHorizontalScroll = 0x2a,
|
||||
};
|
||||
|
||||
// Controls the SSD1306 128x32 OLED display via i2c
|
||||
|
||||
#ifndef SSD1306_ADDRESS
|
||||
#define SSD1306_ADDRESS 0x3C
|
||||
#endif
|
||||
|
||||
#define DisplayHeight 32
|
||||
#define DisplayWidth 128
|
||||
|
||||
#define FontHeight 8
|
||||
#define FontWidth 6
|
||||
|
||||
#define MatrixRows (DisplayHeight / FontHeight)
|
||||
#define MatrixCols (DisplayWidth / FontWidth)
|
||||
|
||||
struct CharacterMatrix {
|
||||
uint8_t display[MatrixRows][MatrixCols];
|
||||
uint8_t *cursor;
|
||||
bool dirty;
|
||||
};
|
||||
|
||||
struct CharacterMatrix display;
|
||||
|
||||
bool iota_gfx_init(bool rotate);
|
||||
void iota_gfx_task(void);
|
||||
bool iota_gfx_off(void);
|
||||
bool iota_gfx_on(void);
|
||||
void iota_gfx_flush(void);
|
||||
void iota_gfx_write_char(uint8_t c);
|
||||
void iota_gfx_write(const char *data);
|
||||
void iota_gfx_write_P(const char *data);
|
||||
void iota_gfx_clear_screen(void);
|
||||
|
||||
void iota_gfx_task_user(void);
|
||||
|
||||
void matrix_clear(struct CharacterMatrix *matrix);
|
||||
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
|
||||
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
|
||||
void matrix_write(struct CharacterMatrix *matrix, const char *data);
|
||||
void matrix_write_ln(struct CharacterMatrix *matrix, const char *data);
|
||||
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
|
||||
void matrix_render(struct CharacterMatrix *matrix);
|
||||
|
||||
bool process_record_gfx(uint16_t keycode, keyrecord_t *record);
|
||||
@@ -127,11 +127,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
case NR_L3:
|
||||
if (record->event.pressed) {
|
||||
register_code(DE_ALGR);
|
||||
register_code(KC_ALGR);
|
||||
layer_on(_NUMROW_L3);
|
||||
} else {
|
||||
layer_off(_NUMROW_L3);
|
||||
unregister_code(DE_ALGR);
|
||||
unregister_code(KC_ALGR);
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
|
||||
@@ -88,16 +88,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
};
|
||||
|
||||
void matrix_init_keymap(void) {
|
||||
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
|
||||
DDRD &= ~(1<<5);
|
||||
PORTD &= ~(1<<5);
|
||||
#ifndef CONVERT_TO_PROTON_C
|
||||
setPinOutput(D5);
|
||||
writePinHigh(D5);
|
||||
|
||||
DDRB &= ~(1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
setPinOutput(B0);
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||
@@ -126,10 +128,10 @@ const char code_to_name[60] = {
|
||||
|
||||
void set_keylog(uint16_t keycode, keyrecord_t *record) {
|
||||
char name = ' ';
|
||||
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
|
||||
if (keycode < 60) {
|
||||
name = code_to_name[keycode];
|
||||
}
|
||||
|
||||
// update keylog
|
||||
snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
|
||||
record->event.key.row, record->event.key.col,
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
/* Copyright 2018 'mechmerlin'
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Defines the keycodes used by our macros in process_record_user
|
||||
enum custom_keycodes {
|
||||
QMKBEST = SAFE_RANGE,
|
||||
QMKURL
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_RGHT,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_0, KC_UP,
|
||||
KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_ENT, KC_DOWN),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QMKBEST:
|
||||
if (record->event.pressed) {
|
||||
// when keycode QMKBEST is pressed
|
||||
SEND_STRING("QMK is the best thing ever!");
|
||||
} else {
|
||||
// when keycode QMKBEST is released
|
||||
}
|
||||
break;
|
||||
case QMKURL:
|
||||
if (record->event.pressed) {
|
||||
// when keycode QMKURL is pressed
|
||||
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
|
||||
} else {
|
||||
// when keycode QMKURL is released
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
@@ -23,11 +23,9 @@ void led_init_ports(void) {
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
DDRB |= (1 << 2);
|
||||
PORTB &= ~(1 << 2);
|
||||
} else {
|
||||
DDRB &= ~(1 << 2);
|
||||
PORTB &= ~(1 << 2);
|
||||
PORTB |= (1 << 2);
|
||||
}
|
||||
|
||||
led_set_user(usb_led);
|
||||
|
||||
@@ -332,6 +332,33 @@
|
||||
{ k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
|
||||
}
|
||||
|
||||
/* LAYOUT_60_tsangan
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │ 0e │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
|
||||
* │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
|
||||
* ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
|
||||
* │40 │41 │43 │46 (7u) │4b │4d │4e │
|
||||
* └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
|
||||
*/
|
||||
#define LAYOUT_60_tsangan( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
|
||||
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
|
||||
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
|
||||
k40, k41, k43, k46, k4b, k4d, k4e \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
|
||||
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
|
||||
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
|
||||
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
|
||||
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, k4e } \
|
||||
}
|
||||
|
||||
/* LAYOUT_60_tsangan_hhkb
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │
|
||||
|
||||
@@ -53,6 +53,10 @@
|
||||
"key_count": 67,
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
|
||||
},
|
||||
"LAYOUT_60_tsangan": {
|
||||
"keycount": 61,
|
||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
|
||||
},
|
||||
"LAYOUT_60_tsangan_hhkb": {
|
||||
"key_count": 62,
|
||||
"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":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
|
||||
|
||||
32
keyboards/dz60/keymaps/60_tsangan/keymap.c
Normal file
32
keyboards/dz60/keymaps/60_tsangan/keymap.c
Normal file
@@ -0,0 +1,32 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL = 0, // Base Layer
|
||||
_FL, // Function Layer
|
||||
_CL // Control Layer
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BL] = LAYOUT_60_tsangan(
|
||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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(_FL),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
[_FL] = LAYOUT_60_tsangan(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, _______, _______,
|
||||
_______, _______, _______, _______, _______, MO(_CL), _______
|
||||
),
|
||||
[_CL] = LAYOUT_60_tsangan(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
@@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, NO_OSLH), LT(SYMB, NO_AE),
|
||||
KC_WFWD, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC,
|
||||
KC_SPC, KC_BSPC, NO_ALGR, NO_ASTR, CTL_T(NO_TILD),
|
||||
KC_SPC, KC_BSPC, KC_ALGR, NO_ASTR, CTL_T(NO_TILD),
|
||||
KC_HOME, NO_CIRC,
|
||||
KC_PGUP, KC_UP, KC_DOWN,
|
||||
KC_LGUI, ALT_T(KC_ESC), CTL_T(KC_ENT)
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
#include "../../config.h"
|
||||
#pragma once
|
||||
|
||||
//Force NKRO to be enabled.
|
||||
#define FORCE_NKRO
|
||||
|
||||
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
|
||||
#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
|
||||
//#define TAPPING_TERM 200
|
||||
|
||||
@@ -11,13 +11,16 @@ enum layers {
|
||||
_AL, // Adjust Layer
|
||||
};
|
||||
|
||||
enum gonnerd_keycodes {
|
||||
enum custom_keycodes {
|
||||
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
|
||||
QMK_REV,
|
||||
KC_WEB,
|
||||
KC_SP4
|
||||
};
|
||||
|
||||
extern backlight_config_t backlight_config;
|
||||
|
||||
#include "dynamic_macro.h"
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define FN_CAPS LT(_FL, KC_CAPS)
|
||||
#define KC_DMR1 DYN_REC_START1
|
||||
#define KC_DMR2 DYN_REC_START2
|
||||
@@ -25,47 +28,44 @@ enum gonnerd_keycodes {
|
||||
#define KC_DMP2 DYN_MACRO_PLAY2
|
||||
#define KC_DMRS DYN_REC_STOP
|
||||
|
||||
static uint8_t current_layer;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* _BL: Base Layer, mostly standard TKL QWERTY layout.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _BL: Base Layer - Standard TKL QWERTY layout.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_BL] = LAYOUT_tkl( \
|
||||
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_SLCK, KC_PAUS, \
|
||||
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_INS, KC_HOME, KC_PGUP, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
|
||||
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
|
||||
/* _WL: Workman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | -| =| | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | A| S| H| T| G| Y| N| E| O| I| '| | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Z| X| M| C| V| K| L| ,| .| /| | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _WL: Workman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_WL] = LAYOUT_tkl( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
@@ -75,21 +75,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* _NL: Norman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | -| =| | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | A| S| E| T| G| Y| N| I| O| H| '| | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Z| X| C| V| B| P| M| ,| .| /| | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _NL: Norman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_NL] = LAYOUT_tkl( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
@@ -99,21 +98,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* _DL: Dvorak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | [| ]| | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | A| O| E| U| I| D| H| T| N| S| -| | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _DL: Dvorak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |[ |] | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_DL] = LAYOUT_tkl( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
@@ -123,21 +121,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* _CL: Colmak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | -| =| | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | A| R| S| T| D| H| N| E| I| O| '| | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | Z| X| C| V| B| K| M| ,| .| /| | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _CL: Colmak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_CL] = LAYOUT_tkl( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
@@ -147,142 +144,126 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* _FL: Function Layer.
|
||||
* M0 opens Chrome
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | M0| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |FnCaps| | | | | | |Lft|Dwn|Up |Rgt| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| |WBk| |WFw|
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _FL: Function Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* |Web| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | |Lft|Dwn|Up |Rgt| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | |Fn | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | SP4 | |Fn | |WBk| |WFw|
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_FL] = LAYOUT_tkl( \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
M(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, KC_MENU, M(1), XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
|
||||
XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
|
||||
),
|
||||
|
||||
/* _AL: Adjust Layer.
|
||||
* Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Rst||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |FnCaps| | |_DL| | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | |_CL| |_BL|_NL| | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | ||||| | | ||||| | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
/*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Rst||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | |_DL| | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | |Fn | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_AL] = LAYOUT_tkl( \
|
||||
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
|
||||
QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
|
||||
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
|
||||
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
|
||||
),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
|
||||
}
|
||||
else {
|
||||
SEND_STRING("chrome.exe\n");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(0),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch (id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_level(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
if (current_layer == layer) {
|
||||
}
|
||||
else {
|
||||
current_layer = layer;
|
||||
switch (layer) {
|
||||
case 0:
|
||||
backlight_level(0);
|
||||
break;
|
||||
case 1:
|
||||
backlight_level(1);
|
||||
break;
|
||||
case 2:
|
||||
backlight_level(1);
|
||||
break;
|
||||
case 3:
|
||||
backlight_level(1);
|
||||
break;
|
||||
case 4:
|
||||
backlight_level(1);
|
||||
break;
|
||||
case 5:
|
||||
backlight_level(2);
|
||||
break;
|
||||
case 6:
|
||||
backlight_level(3);
|
||||
break;
|
||||
default:
|
||||
backlight_level(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
// Enable Dynamic Macros.
|
||||
switch (keycode) {
|
||||
case QMK_REV:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_WEB:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("r"));
|
||||
wait_ms(100);
|
||||
SEND_STRING("chrome.exe\n");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_SP4:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (" ");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
// Dynamic Macros.
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void custom_backlight_level(uint8_t level) {
|
||||
if (level > BACKLIGHT_LEVELS)
|
||||
level = BACKLIGHT_LEVELS;
|
||||
backlight_config.level = level;
|
||||
backlight_config.enable = !!backlight_config.level;
|
||||
backlight_set(backlight_config.level);
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
custom_backlight_level(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _BL:
|
||||
custom_backlight_level(0);
|
||||
break;
|
||||
case _WL:
|
||||
case _NL:
|
||||
case _DL:
|
||||
case _CL:
|
||||
custom_backlight_level(1);
|
||||
break;
|
||||
case _FL:
|
||||
custom_backlight_level(2);
|
||||
break;
|
||||
case _AL:
|
||||
custom_backlight_level(3);
|
||||
break;
|
||||
default:
|
||||
custom_backlight_level(0);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,120 +1,114 @@
|
||||
# Keymap Maintainer: Gam3cat
|
||||
make gonnerd:gam3cat
|
||||
## Layout Config:
|
||||
2u backspace, 2.25u left shift/enter, 1.75u right shift.
|
||||
2x1.5u, 1x7.0u, 2x1.5u, 3x1u bottom row.
|
||||
|
||||
FN_CAPS = MO(_FL) when held, CAPS when tapped.
|
||||
GRAVE_ESC + GUI = `
|
||||
GRAVE_ESC + SHIFT = ~
|
||||
2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
|
||||
[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
|
||||
|
||||
## Base Layer Selection:
|
||||
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
|
||||
(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
|
||||
|
||||
### Base Layer Options:
|
||||
_BL: Base Layer, mostly standard TKL QWERTY layout.
|
||||
#### _BL: Base Layer - Standard TKL QWERTY layout.
|
||||
.-----------------------------------------------------------------------.
|
||||
|Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
|
||||
|Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
|
||||
|~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
|
||||
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
|
||||
|Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
|
||||
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
|
||||
|Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_WL: Workman Layer.
|
||||
|
||||
#### _WL: Workman Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | -| =| | | | |
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
|
||||
| |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | A| S| H| T| G| Y| N| E| O| I| '| | |
|
||||
| |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Z| X| M| C| V| K| L| ,| .| /| | | | | |
|
||||
| |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| | | | |
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_NL: Norman Layer.
|
||||
|
||||
#### _NL: Norman Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | -| =| | | | |
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
|
||||
| |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | A| S| E| T| G| Y| N| I| O| H| '| | |
|
||||
| |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Z| X| C| V| B| P| M| ,| .| /| | | | | |
|
||||
| |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| | | | |
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_DL: Dvorak Layer.
|
||||
|
||||
#### _DL: Dvorak Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | [| ]| | | | |
|
||||
| | | | | | | | | | | |[ |] | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
|
||||
| |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | A| O| E| U| I| D| H| T| N| S| -| | |
|
||||
| |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
|
||||
| |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| | | | |
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_CL: Colmak Layer.
|
||||
|
||||
#### _CL: Colmak Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | -| =| | | | |
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
|
||||
| |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | A| R| S| T| D| H| N| E| I| O| '| | |
|
||||
| |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | Z| X| C| V| B| K| M| ,| .| /| | | | | |
|
||||
| |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| | | | |
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_FL: Function Layer.
|
||||
M0 opens Chrome
|
||||
|
||||
#### _FL: Function Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| M0| | | | | | | | | | | | | | | | |
|
||||
|Web| | | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | | | | | | |
|
||||
|Fn_AL| | | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | |Fn | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| |WBk| |WFw|
|
||||
| | | | SP4 | |Fn | |WBk| |WFw|
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
_AL: Adjust Layer.
|
||||
Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
|
||||
#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
|
||||
.-----------------------------------------------------------------------.
|
||||
|Rst||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
|Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
|Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|FnCaps| | |_DL| | | | | | | | | | |
|
||||
| | | |_DL| | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | |_CL| |_BL|_NL| | | | | | | | | |
|
||||
| | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| ||||| | | ||||| | | | |
|
||||
| | | | | |Fn | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
@@ -2,20 +2,23 @@
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
TAP_DANCE_ENABLE = no # Enable TapDance functionality
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+1500)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
NKRO_ENABLE = yes # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = no # Enable extended unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
|
||||
#VARIABLE_TRACE = no # Use this to debug changes to variable values
|
||||
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
|
||||
KEY_LOCK_ENABLE = no # This enables key lock(+260)
|
||||
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
|
||||
|
||||
10
keyboards/h87a/keymaps/gam3cat/config.h
Normal file
10
keyboards/h87a/keymaps/gam3cat/config.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
//Force NKRO to be enabled.
|
||||
#define FORCE_NKRO
|
||||
|
||||
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
|
||||
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
|
||||
//#define TAPPING_TERM 200
|
||||
292
keyboards/h87a/keymaps/gam3cat/keymap.c
Normal file
292
keyboards/h87a/keymaps/gam3cat/keymap.c
Normal file
@@ -0,0 +1,292 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "version.h"
|
||||
|
||||
enum layers {
|
||||
_BL = 0, // Base Layer
|
||||
_WL, // Workman Layer
|
||||
_NL, // Norman Layer
|
||||
_DL, // Dvorak Layer
|
||||
_CL, // Base Layer
|
||||
_FL, // Function Layer
|
||||
_AL, // Adjust Layer
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
|
||||
QMK_REV,
|
||||
KC_WEB,
|
||||
KC_SP4
|
||||
};
|
||||
|
||||
extern backlight_config_t backlight_config;
|
||||
|
||||
#include "dynamic_macro.h"
|
||||
#define FN_CAPS LT(_FL, KC_CAPS)
|
||||
#define KC_DMR1 DYN_REC_START1
|
||||
#define KC_DMR2 DYN_REC_START2
|
||||
#define KC_DMP1 DYN_MACRO_PLAY1
|
||||
#define KC_DMP2 DYN_MACRO_PLAY2
|
||||
#define KC_DMRS DYN_REC_STOP
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*#### _BL: Base Layer - Standard TKL QWERTY layout.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_BL] = 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_SLCK, KC_PAUS, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
|
||||
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
/*#### _WL: Workman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_WL] = LAYOUT_all( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, _______, \
|
||||
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*#### _NL: Norman Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_NL] = LAYOUT_all( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, _______, \
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*#### _DL: Dvorak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |[ |] | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_DL] = LAYOUT_all( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, \
|
||||
_______, KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, KC_EQL , _______, _______, _______, _______, \
|
||||
_______, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, _______, \
|
||||
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*#### _CL: Colmak Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | |- |= | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_CL] = LAYOUT_all( \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , _______, _______, _______, \
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*#### _FL: Function Layer.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* |Web| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL| | | | | | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | |Lft|Dwn|Up |Rgt| | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | | | | | | | | |Fn | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | SP4 | |Fn | |WBk| |WFw|
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_FL] = LAYOUT_all( \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
|
||||
),
|
||||
/*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
|
||||
* .-----------------------------------------------------------------------.
|
||||
* |Rst||||| | | | ||| | | | ||| | | | | | | |
|
||||
* .-----------------------------------------------------------|-----------|
|
||||
* |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | |_DL| | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|
||||
* |-----------------------------------------------------------|-----------|
|
||||
* | | | | | |Fn | | | | |
|
||||
* *-----------------------------------------------------------------------*
|
||||
*/
|
||||
[_AL] = LAYOUT_all( \
|
||||
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
|
||||
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
|
||||
),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QMK_REV:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_WEB:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("r"));
|
||||
wait_ms(100);
|
||||
SEND_STRING("chrome.exe\n");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_SP4:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (" ");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
// Dynamic Macros.
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void custom_backlight_level(uint8_t level) {
|
||||
if (level > BACKLIGHT_LEVELS)
|
||||
level = BACKLIGHT_LEVELS;
|
||||
backlight_config.level = level;
|
||||
backlight_config.enable = !!backlight_config.level;
|
||||
backlight_set(backlight_config.level);
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
custom_backlight_level(0);
|
||||
#endif
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv_noeeprom(180,100,100);
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _BL:
|
||||
custom_backlight_level(0);
|
||||
rgblight_sethsv_noeeprom(180,100,255);
|
||||
break;
|
||||
case _WL:
|
||||
case _NL:
|
||||
case _DL:
|
||||
case _CL:
|
||||
custom_backlight_level(1);
|
||||
rgblight_sethsv_noeeprom(230,255,255);
|
||||
break;
|
||||
case _FL:
|
||||
custom_backlight_level(2);
|
||||
rgblight_sethsv_noeeprom(280,255,255);
|
||||
break;
|
||||
case _AL:
|
||||
custom_backlight_level(3);
|
||||
rgblight_sethsv_noeeprom(350,255,255);
|
||||
break;
|
||||
default:
|
||||
custom_backlight_level(0);
|
||||
rgblight_sethsv_noeeprom(180,100,100);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void led_init_ports(void) {
|
||||
DDRD |= (1<<5); // OUT
|
||||
DDRE |= (1<<6); // OUT
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
DDRD |= (1 << 5); PORTD &= ~(1 << 5);
|
||||
} else {
|
||||
DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
|
||||
}
|
||||
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||
DDRE |= (1 << 6); PORTE &= ~(1 << 6);
|
||||
} else {
|
||||
DDRE &= ~(1 << 6); PORTE &= ~(1 << 6);
|
||||
}
|
||||
}
|
||||
114
keyboards/h87a/keymaps/gam3cat/readme.md
Normal file
114
keyboards/h87a/keymaps/gam3cat/readme.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# Keymap Maintainer: Gam3cat
|
||||
make h87a:gam3cat
|
||||
## Layout Config:
|
||||
2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
|
||||
[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
|
||||
|
||||
## Base Layer Selection:
|
||||
(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
|
||||
|
||||
### Base Layer Options:
|
||||
#### _BL: Base Layer - Standard TKL QWERTY layout.
|
||||
.-----------------------------------------------------------------------.
|
||||
|Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _WL: Workman Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _NL: Norman Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _DL: Dvorak Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | |[ |] | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _CL: Colmak Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | |- |= | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _FL: Function Layer.
|
||||
.-----------------------------------------------------------------------.
|
||||
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
|Web| | | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Fn_AL| | | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | | | | | | | | |Fn | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | SP4 | |Fn | |WBk| |WFw|
|
||||
*-----------------------------------------------------------------------*
|
||||
|
||||
#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
|
||||
.-----------------------------------------------------------------------.
|
||||
|Rst||||| | | | ||| | | | ||| | | | | | | |
|
||||
.-----------------------------------------------------------|-----------|
|
||||
|Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | |_DL| | | | | | | | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|
||||
|-----------------------------------------------------------|-----------|
|
||||
| | | | | |Fn | | | | |
|
||||
*-----------------------------------------------------------------------*
|
||||
24
keyboards/h87a/keymaps/gam3cat/rules.mk
Normal file
24
keyboards/h87a/keymaps/gam3cat/rules.mk
Normal file
@@ -0,0 +1,24 @@
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
TAP_DANCE_ENABLE = no # Enable TapDance functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+1500)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = no # Enable extended unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
|
||||
#VARIABLE_TRACE = no # Use this to debug changes to variable values
|
||||
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
|
||||
KEY_LOCK_ENABLE = no # This enables key lock(+260)
|
||||
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
|
||||
@@ -148,13 +148,26 @@
|
||||
#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
|
||||
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
|
||||
|
||||
/* default 3V ERM vibration motor voltage and library*/
|
||||
#if FB_ERM_LRA == 0
|
||||
#define RATED_VOLTAGE 3
|
||||
#define V_RMS 2.3
|
||||
#define V_PEAK 3.30
|
||||
/* Library Selection */
|
||||
#define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
|
||||
|
||||
/* default 2V LRA voltage and library */
|
||||
#elif FB_ERM_LRA == 1
|
||||
#define RATED_VOLTAGE 2
|
||||
#define V_RMS 2.0
|
||||
#define V_PEAK 2.85
|
||||
#define F_LRA 205
|
||||
#define F_LRA 200
|
||||
/* Library Selection */
|
||||
#define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* Control 1 register settings */
|
||||
#define DRIVE_TIME 25
|
||||
#define AC_COUPLE 0
|
||||
@@ -179,14 +192,11 @@
|
||||
#define ZC_DET_TIME 0
|
||||
#define AUTO_CAL_TIME 3
|
||||
|
||||
//#define WS2812_LED_N 2
|
||||
//#define RGBLED_NUM WS2812_LED_N
|
||||
//#define WS2812_TIM_N 2
|
||||
//#define WS2812_TIM_CH 2
|
||||
//#define PORT_WS2812 GPIOA
|
||||
//#define PIN_WS2812 15
|
||||
//#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
|
||||
//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
|
||||
//#define WS2812_EXTERNAL_PULLUP
|
||||
//#define RGBLIGHT_ANIMATIONS
|
||||
|
||||
//#define RGBLED_NUM 10
|
||||
//#define RGB_DI_PIN B5
|
||||
//#define DRIVER_LED_TOTAL RGBLED_NUM
|
||||
|
||||
//#define RGB_MATRIX_KEYPRESSES
|
||||
#endif
|
||||
|
||||
@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_LOWER] = LAYOUT_wrapper(
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE, \
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),_______,_______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 10
|
||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 10
|
||||
#define STM32_I2C_USE_DMA TRUE
|
||||
#define STM32_I2C_USE_DMA FALSE
|
||||
#define STM32_I2C_I2C1_DMA_PRIORITY 1
|
||||
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||
|
||||
@@ -8,14 +8,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, FR_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
|
||||
[1] = KEYMAP(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
|
||||
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
|
||||
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
|
||||
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, FR_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
|
||||
};
|
||||
|
||||
|
||||
|
||||
52
keyboards/handwired/tradestation/config.h
Normal file
52
keyboards/handwired/tradestation/config.h
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Flehrad
|
||||
#define PRODUCT Trade Station
|
||||
#define DESCRIPTION A Pro Micro-powered macropad layout by Didier Luximon. 1/8U gap space top two rows and 1/4U gap between 2U bottom two rows.
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 4
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { D1, C6, D4, D0 }
|
||||
#define MATRIX_COL_PINS { F7, B1, D7, E6 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
#endif
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 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
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 5
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
#endif
|
||||
15
keyboards/handwired/tradestation/info.json
Normal file
15
keyboards/handwired/tradestation/info.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"keyboard_name": "Tradestation",
|
||||
"url": "",
|
||||
"maintainer": "Flehrad",
|
||||
"bootloader": "",
|
||||
"width": 4.3,
|
||||
"height": 4.5,
|
||||
"layouts": {
|
||||
"LAYOUT_tradestation": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25, "w":2}, {"x":2.25, "y":2.25, "w":2}, {"x":0, "y":3.5, "w":2}, {"x":2.25, "y":3.5, "w":2}]
|
||||
},
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25}, {"x":3.25, "y":2.25}, {"x":0, "y":3.5}, {"x":1, "y":3.5}, {"x":2.25, "y":3.5}, {"x":3.25, "y":3.5}]
|
||||
}
|
||||
}
|
||||
61
keyboards/handwired/tradestation/keymaps/default/keymap.c
Normal file
61
keyboards/handwired/tradestation/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
LAYOUT_ortho_4x4(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
LAYOUT_tradestation(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS),
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_COMPOSE)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_KANA)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
201
keyboards/handwired/tradestation/license
Normal file
201
keyboards/handwired/tradestation/license
Normal file
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
25
keyboards/handwired/tradestation/readme.md
Normal file
25
keyboards/handwired/tradestation/readme.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Tradestation
|
||||
QMK for Tradestation Macropad
|
||||
|
||||
This macropad was layout designed by Didier Luximon
|
||||
|
||||
This PCB supports an overall 4x4 matrix with unique spacing.
|
||||
* Top two rows are 1U keys with 1/8U spacing
|
||||
* Bottom two rows are available with 4x2 1U as clusters of 2x1U or as 2x2 2U, spaced with 1/4U
|
||||
|
||||
For QMK Configurator, the info.json is utilised.
|
||||
- For 2U keys , the first 1u row/column key assignment is the same as the 2u position.
|
||||
|
||||
Build requires a pro micro.
|
||||
|
||||
Can be built as single PCB with custom case, or as two PCB style with standoffs.
|
||||
|
||||
If you like this simple PCB and want to make a donation, you can at https://paypal.me/theboardpodcast
|
||||
|
||||
Check out our:
|
||||
|
||||
YouTube (https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
|
||||
|
||||
Podcast (www.libsyn.com/theboardpodcast)
|
||||
|
||||
Patreon (www.patreon.com/theboardpodcast)
|
||||
65
keyboards/handwired/tradestation/rules.mk
Normal file
65
keyboards/handwired/tradestation/rules.mk
Normal file
@@ -0,0 +1,65 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
LAYOUTS = ortho_4x4
|
||||
1
keyboards/handwired/tradestation/tradestation.c
Normal file
1
keyboards/handwired/tradestation/tradestation.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "tradestation.h"
|
||||
27
keyboards/handwired/tradestation/tradestation.h
Normal file
27
keyboards/handwired/tradestation/tradestation.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT_ortho_4x4( \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, \
|
||||
K30, K31, K32, K33 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, K21, K22, K23 }, \
|
||||
{ K30, K31, K32, K33 } \
|
||||
}
|
||||
|
||||
#define LAYOUT_tradestation( \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K22, \
|
||||
K30, K32 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03 }, \
|
||||
{ K10, K11, K12, K13 }, \
|
||||
{ K20, KC_NO, K22, KC_NO }, \
|
||||
{ K30, KC_NO, K32, KC_NO } \
|
||||
}
|
||||
@@ -89,9 +89,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
|
||||
void matrix_init_keymap(void) {
|
||||
DDRD &= ~(1<<5);
|
||||
PORTD &= ~(1<<5);
|
||||
#ifndef CONVERT_TO_PROTON_C
|
||||
setPinOutput(D5);
|
||||
writePinHigh(D5);
|
||||
|
||||
DDRB &= ~(1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
setPinOutput(B0);
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
#include "../../config.h"
|
||||
#pragma once
|
||||
|
||||
//Force NKRO to be enabled.
|
||||
#define FORCE_NKRO
|
||||
|
||||
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
|
||||
#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
|
||||
@@ -11,13 +11,16 @@ enum layers {
|
||||
_AL, // Adjust Layer
|
||||
};
|
||||
|
||||
enum jc65_keycodes {
|
||||
enum custom_keycodes {
|
||||
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
|
||||
QMK_REV,
|
||||
KC_WEB,
|
||||
KC_SP4
|
||||
};
|
||||
|
||||
extern backlight_config_t backlight_config;
|
||||
|
||||
#include "dynamic_macro.h"
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define FN_CAPS LT(_FL, KC_CAPS)
|
||||
#define KC_DMR1 DYN_REC_START1
|
||||
#define KC_DMR2 DYN_REC_START2
|
||||
@@ -25,18 +28,16 @@ enum jc65_keycodes {
|
||||
#define KC_DMP2 DYN_MACRO_PLAY2
|
||||
#define KC_DMRS DYN_REC_STOP
|
||||
|
||||
static uint8_t current_layer;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* _BL: Base Layer, mostly standard 65% QWERTY layout.
|
||||
/*#### _BL: Base Layer - Mostly standard 65% QWERTY layout.
|
||||
* .---------------------------------------------------------------.
|
||||
* |GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
|
||||
* |GrE|1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|
|
||||
* |---------------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
|
||||
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|
|
||||
* |---------------------------------------------------------------|
|
||||
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
|
||||
* |FnCaps|A |S |D |F |G |H |J |K |L |; |' |Return |PgU|
|
||||
* |---------------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
|
||||
* |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|
|
||||
* |---------------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
|
||||
* *---------------------------------------------------------------*
|
||||
@@ -48,16 +49,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* _WL: Workman Layer.
|
||||
/*#### _WL: Workman Layer.
|
||||
* .---------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | -| =| | |
|
||||
* | | | | | | | | | | | |- |= | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
|
||||
* | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | A| S| H| T| G| Y| N| E| O| I| '| | |
|
||||
* | |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Z| X| M| C| V| K| L| ,| .| /| | | |
|
||||
* | |Z |X |M |C |V |K |L |, |. |/ | | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | | | | | | | | |
|
||||
* *---------------------------------------------------------------*
|
||||
@@ -69,16 +69,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* _NL: Norman Layer.
|
||||
/*#### _NL: Norman Layer.
|
||||
* .---------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | -| =| | |
|
||||
* | | | | | | | | | | | |- |= | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
|
||||
* | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | A| S| E| T| G| Y| N| I| O| H| '| | |
|
||||
* | |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Z| X| C| V| B| P| M| ,| .| /| | | |
|
||||
* | |Z |X |C |V |B |P |M |, |. |/ | | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | | | | | | | | |
|
||||
* *---------------------------------------------------------------*
|
||||
@@ -90,16 +89,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* _DL: Dvorak Layer.
|
||||
/*#### _DL: Dvorak Layer.
|
||||
* .---------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | [| ]| | |
|
||||
* | | | | | | | | | | | |[ |] | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
|
||||
* | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | A| O| E| U| I| D| H| T| N| S| -| | |
|
||||
* | |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | ;| Q| J| K| X| B| M| W| V| Z| | | |
|
||||
* | |; |Q |J |K |X |B |M |W |V |Z | | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | | | | | | | | |
|
||||
* *---------------------------------------------------------------*
|
||||
@@ -111,16 +109,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* _CL: Colmak Layer.
|
||||
/*#### _CL: Colmak Layer.
|
||||
* .---------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | -| =| | |
|
||||
* | | | | | | | | | | | |- |= | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
|
||||
* | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | A| R| S| T| D| H| N| E| I| O| '| | |
|
||||
* | |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | Z| X| C| V| B| K| M| ,| .| /| | | |
|
||||
* | |Z |X |C |V |B |K |M |, |. |/ | | | |
|
||||
* |---------------------------------------------------------------|
|
||||
* | | | | | | | | | |
|
||||
* *---------------------------------------------------------------*
|
||||
@@ -132,11 +129,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* _FL: Function Layer.
|
||||
* M0 opens Chrome
|
||||
/*#### _FL: Function Layer.
|
||||
* .---------------------------------------------------------------.
|
||||
* |M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
|
||||
* |Web|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|SLock |PSc|
|
||||
* |---------------------------------------------------------------|
|
||||
* |Fn_AL| | | | | | | | | | | | | |Pau|
|
||||
* |---------------------------------------------------------------|
|
||||
@@ -144,21 +139,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |---------------------------------------------------------------|
|
||||
* | | | | | | | | | | | |VlMute|VlU|End|
|
||||
* |---------------------------------------------------------------|
|
||||
* | | |Menu| | | |WBk|VlD|WFw|
|
||||
* | | |Menu| SP4 | | |WBk|VlD|WFw|
|
||||
* *---------------------------------------------------------------*
|
||||
*/
|
||||
[_FL] = LAYOUT(
|
||||
M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_SLCK, KC_PSCR,
|
||||
KC_WEB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_SLCK, KC_PSCR,
|
||||
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLU, KC_END,
|
||||
XXXXXXX, XXXXXXX, KC_MENU, M(1), M(1), M(1), XXXXXXX, XXXXXXX, XXXXXXX, KC_WBAK, KC_VOLD, KC_WFWD
|
||||
XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, KC_SP4, KC_SP4, XXXXXXX, XXXXXXX, XXXXXXX, KC_WBAK, KC_VOLD, KC_WFWD
|
||||
),
|
||||
|
||||
/* _AL: Adjust Layer.
|
||||
* Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
/*#### _AL: Adjust Layer - Keymap select, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
* .---------------------------------------------------------------.
|
||||
* |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|
||||
* |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|
||||
* |---------------------------------------------------------------|
|
||||
* |Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
|
||||
* |---------------------------------------------------------------|
|
||||
@@ -170,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* *---------------------------------------------------------------*
|
||||
*/
|
||||
[_AL] = LAYOUT(
|
||||
F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMP1,
|
||||
QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMP1,
|
||||
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1,
|
||||
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR2,
|
||||
@@ -178,102 +171,96 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
|
||||
}
|
||||
else {
|
||||
SEND_STRING("chrome.exe https://geekhack.org/index.php?topic=86756.new;topicseen#new\n");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(0),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch (id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_level(0);
|
||||
#endif
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(180,100,100);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
if (current_layer == layer) {
|
||||
}
|
||||
else {
|
||||
current_layer = layer;
|
||||
switch (layer) {
|
||||
case 0:
|
||||
backlight_level(0);
|
||||
rgblight_sethsv(180,100,255);
|
||||
break;
|
||||
case 1:
|
||||
backlight_level(1);
|
||||
rgblight_sethsv(180,95,240);
|
||||
break;
|
||||
case 2:
|
||||
backlight_level(1);
|
||||
rgblight_sethsv(180,90,225);
|
||||
break;
|
||||
case 3:
|
||||
backlight_level(1);
|
||||
rgblight_sethsv(180,85,210);
|
||||
break;
|
||||
case 4:
|
||||
backlight_level(1);
|
||||
rgblight_sethsv(180,80,195);
|
||||
break;
|
||||
case 5:
|
||||
backlight_level(2);
|
||||
rgblight_sethsv(230,255,255);
|
||||
break;
|
||||
case 6:
|
||||
backlight_level(3);
|
||||
rgblight_sethsv(350,255,255);
|
||||
break;
|
||||
default:
|
||||
backlight_level(0);
|
||||
rgblight_sethsv(180,100,100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
// Enable Dynamic Macros.
|
||||
switch (keycode) {
|
||||
case QMK_REV:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_WEB:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("r"));
|
||||
wait_ms(100);
|
||||
SEND_STRING("chrome.exe https://geekhack.org/index.php?topic=86756.new;topicseen#new\n");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_SP4:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (" ");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
// Dynamic Macros.
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void custom_backlight_level(uint8_t level) {
|
||||
if (level > BACKLIGHT_LEVELS)
|
||||
level = BACKLIGHT_LEVELS;
|
||||
backlight_config.level = level;
|
||||
backlight_config.enable = !!backlight_config.level;
|
||||
backlight_set(backlight_config.level);
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
custom_backlight_level(0);
|
||||
#endif
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv_noeeprom(180,100,100);
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _BL:
|
||||
custom_backlight_level(0);
|
||||
rgblight_sethsv_noeeprom(180,100,255);
|
||||
break;
|
||||
case _WL:
|
||||
custom_backlight_level(1);
|
||||
rgblight_sethsv_noeeprom(180,95,240);
|
||||
break;
|
||||
case _NL:
|
||||
custom_backlight_level(1);
|
||||
rgblight_sethsv_noeeprom(180,90,225);
|
||||
break;
|
||||
case _DL:
|
||||
custom_backlight_level(1);
|
||||
rgblight_sethsv_noeeprom(180,85,210);
|
||||
break;
|
||||
case _CL:
|
||||
custom_backlight_level(1);
|
||||
rgblight_sethsv_noeeprom(180,80,195);
|
||||
break;
|
||||
case _FL:
|
||||
custom_backlight_level(2);
|
||||
rgblight_sethsv_noeeprom(230,255,255);
|
||||
break;
|
||||
case _AL:
|
||||
custom_backlight_level(3);
|
||||
rgblight_sethsv_noeeprom(350,255,255);
|
||||
break;
|
||||
default:
|
||||
custom_backlight_level(0);
|
||||
rgblight_sethsv_noeeprom(180,100,100);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
|
||||
@@ -13,76 +13,74 @@ make jc65/v32u4:gam3cat
|
||||
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
|
||||
|
||||
### Base Layer Options:
|
||||
#### _BL: Base Layer, mostly standard 65% QWERTY layout.
|
||||
#### _BL: Base Layer - Mostly standard 65% QWERTY layout.
|
||||
.---------------------------------------------------------------.
|
||||
|GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
|
||||
|GrE|1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|
|
||||
|---------------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
|
||||
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|
|
||||
|---------------------------------------------------------------|
|
||||
|FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
|
||||
|FnCaps|A |S |D |F |G |H |J |K |L |; |' |Return |PgU|
|
||||
|---------------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
|
||||
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|
|
||||
|---------------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
#### _WL: Workman Layer.
|
||||
.---------------------------------------------------------------.
|
||||
| | | | | | | | | | | | -| =| | |
|
||||
| | | | | | | | | | | |- |= | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
|
||||
| |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | |
|
||||
|---------------------------------------------------------------|
|
||||
| | A| S| H| T| G| Y| N| E| O| I| '| | |
|
||||
| |A |S |H |T |G |Y |N |E |O |I |' | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Z| X| M| C| V| K| L| ,| .| /| | | |
|
||||
| |Z |X |M |C |V |K |L |, |. |/ | | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | | | | | | | | |
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
#### _NL: Norman Layer.
|
||||
.---------------------------------------------------------------.
|
||||
| | | | | | | | | | | | -| =| | |
|
||||
| | | | | | | | | | | |- |= | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
|
||||
| |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | |
|
||||
|---------------------------------------------------------------|
|
||||
| | A| S| E| T| G| Y| N| I| O| H| '| | |
|
||||
| |A |S |E |T |G |Y |N |I |O |H |' | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Z| X| C| V| B| P| M| ,| .| /| | | |
|
||||
| |Z |X |C |V |B |P |M |, |. |/ | | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | | | | | | | | |
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
#### _DL: Dvorak Layer.
|
||||
.---------------------------------------------------------------.
|
||||
| | | | | | | | | | | | [| ]| | |
|
||||
| | | | | | | | | | | |[ |] | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
|
||||
| |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | |
|
||||
|---------------------------------------------------------------|
|
||||
| | A| O| E| U| I| D| H| T| N| S| -| | |
|
||||
| |A |O |E |U |I |D |H |T |N |S |- | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | ;| Q| J| K| X| B| M| W| V| Z| | | |
|
||||
| |; |Q |J |K |X |B |M |W |V |Z | | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | | | | | | | | |
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
#### _CL: Colmak Layer.
|
||||
.---------------------------------------------------------------.
|
||||
| | | | | | | | | | | | -| =| | |
|
||||
| | | | | | | | | | | |- |= | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
|
||||
| |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | |
|
||||
|---------------------------------------------------------------|
|
||||
| | A| R| S| T| D| H| N| E| I| O| '| | |
|
||||
| |A |R |S |T |D |H |N |E |I |O |' | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | Z| X| C| V| B| K| M| ,| .| /| | | |
|
||||
| |Z |X |C |V |B |K |M |, |. |/ | | | |
|
||||
|---------------------------------------------------------------|
|
||||
| | | | | | | | | |
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
### Function Layer: (hold Caps to access)
|
||||
M0 opens Chrome
|
||||
#### _FL: Function Layer.
|
||||
.---------------------------------------------------------------.
|
||||
|M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
|
||||
|Web|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|SLock |PSc|
|
||||
|---------------------------------------------------------------|
|
||||
|Fn_AL| | | | | | | | | | | | | |Pau|
|
||||
|---------------------------------------------------------------|
|
||||
@@ -90,14 +88,12 @@ make jc65/v32u4:gam3cat
|
||||
|---------------------------------------------------------------|
|
||||
| | | | | | | | | | | |VlMute|VlU|End|
|
||||
|---------------------------------------------------------------|
|
||||
| | |Menu| | | |WBk|VlD|WFw|
|
||||
| | |Menu| SP4 | | |WBk|VlD|WFw|
|
||||
*---------------------------------------------------------------*
|
||||
|
||||
### Adjust Layer: (hold Caps+TAB to access)
|
||||
Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
#### _AL: Adjust Layer.
|
||||
#### _AL: Adjust Layer - Keymap select, RGB Underglow, LED backlight, and Dynamic Macro settings.
|
||||
.---------------------------------------------------------------.
|
||||
|Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|
||||
|Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|
||||
|---------------------------------------------------------------|
|
||||
|Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
|
||||
|---------------------------------------------------------------|
|
||||
|
||||
@@ -1,6 +1,24 @@
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
BACKLIGHT_ENABLE=yes
|
||||
//TAP_DANCE_ENABLE=yes
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
TAP_DANCE_ENABLE = no # Enable TapDance functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+1500)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = no # Enable extended unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
|
||||
#VARIABLE_TRACE = no # Use this to debug changes to variable values
|
||||
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
|
||||
KEY_LOCK_ENABLE = no # This enables key lock(+260)
|
||||
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
|
||||
|
||||
10
keyboards/kbd6x/keymaps/othi/config.h
Normal file
10
keyboards/kbd6x/keymaps/othi/config.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#define ONESHOT_TAP_TOOGLE 2
|
||||
#define ONESHOT_TIMEOUT 2000
|
||||
// tap dance configurations
|
||||
#define TAPPING_TERM 200
|
||||
#define TAPPING_TOGGLE 2
|
||||
#define PERMISSIVE_HOLD
|
||||
// Fix KC_GESC conflict with Cmd+Alt+Esc on macros
|
||||
#define GRAVE_ESC_GUI_OVERRIDE
|
||||
|
||||
190
keyboards/kbd6x/keymaps/othi/keymap.c
Normal file
190
keyboards/kbd6x/keymaps/othi/keymap.c
Normal file
@@ -0,0 +1,190 @@
|
||||
/* Copyright 2018 Othi
|
||||
*
|
||||
* 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
|
||||
|
||||
// read README.md for rundown of what does what
|
||||
|
||||
// #define BL 0
|
||||
#define CL 0
|
||||
#define NM_MODE 2
|
||||
#define VI_MODE 3
|
||||
#define FN3 4
|
||||
#define ACCENT 5
|
||||
#define ACCENT_CAP 6
|
||||
|
||||
//Unicode keymaps
|
||||
void eeconfig_init_user(void) {
|
||||
set_unicode_input_mode(UC_LNX);
|
||||
}
|
||||
#define DE_AE UC(0x00E4)
|
||||
#define DE_SS UC(0x00DF)
|
||||
#define DE_OE UC(0x00F6)
|
||||
#define DE_UE UC(0x00FC)
|
||||
#define DE_AE_CAP UC(0x00C4)
|
||||
#define DE_OE_CAP UC(0x00D6)
|
||||
#define DE_UE_CAP UC(0x00DC)
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case NM_MODE:
|
||||
rgblight_setrgb (0x00, 0x66, 0x00);
|
||||
break;
|
||||
case VI_MODE:
|
||||
rgblight_setrgb (0x66, 0x66, 0x00);
|
||||
break;
|
||||
case ACCENT:
|
||||
rgblight_setrgb (0x7A, 0x00, 0xFF);
|
||||
break;
|
||||
case ACCENT_CAP:
|
||||
rgblight_setrgb (0x7A, 0xFF, 0xFF);
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
rgblight_setrgb (0xFF, 0x00, 0x00);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
//Tap Dance Declarations
|
||||
enum {
|
||||
CTL_NM = 0,
|
||||
ALT_NM = 1,
|
||||
SFT_NM = 2,
|
||||
GUI_NM = 3
|
||||
};
|
||||
|
||||
void dance_CTL_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
set_oneshot_mods(MOD_LCTL);
|
||||
} else {
|
||||
register_code (KC_LCTL);
|
||||
layer_on(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_CTL_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
unregister_code (KC_LCTL);
|
||||
} else {
|
||||
unregister_code (KC_LCTL);
|
||||
layer_off(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_GUI_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
register_code (KC_LGUI);
|
||||
} else {
|
||||
register_code (KC_LGUI);
|
||||
layer_on(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_GUI_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
unregister_code (KC_LGUI);
|
||||
} else {
|
||||
unregister_code (KC_LGUI);
|
||||
layer_off(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_ALT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
register_code (KC_LALT);
|
||||
} else {
|
||||
register_code (KC_LALT);
|
||||
layer_on(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_ALT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
unregister_code (KC_LALT);
|
||||
} else {
|
||||
unregister_code (KC_LALT);
|
||||
layer_off(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_SFT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
register_code (KC_LSFT);
|
||||
set_oneshot_mods(MOD_LSFT);
|
||||
} else {
|
||||
register_code (KC_LSFT);
|
||||
layer_on(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_SFT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||
if (state->count == 1) {
|
||||
unregister_code (KC_LSFT);
|
||||
} else {
|
||||
unregister_code (KC_LSFT);
|
||||
layer_off(NM_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[CTL_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_CTL_NM_finished, dance_CTL_NM_reset),
|
||||
[GUI_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_GUI_NM_finished, dance_GUI_NM_reset),
|
||||
[ALT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_ALT_NM_finished, dance_ALT_NM_reset),
|
||||
[SFT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_SFT_NM_finished, dance_SFT_NM_reset)
|
||||
};
|
||||
|
||||
// backup
|
||||
// old R3 capslock, LT(NM_MODE,KC_BSPC),
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[CL] = LAYOUT(
|
||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
|
||||
MT(MOD_LGUI,KC_TAB), LT(NM_MODE,KC_Q), KC_W, LT(ACCENT,KC_F), KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||
MT(MOD_LCTL,KC_BSPC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
|
||||
TD(SFT_NM), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, MT(MOD_LCTL,KC_COMM), MT(MOD_LSFT,KC_DOT), MT(MOD_LALT,KC_SLSH), LM(CL,MOD_LGUI|MOD_LSFT), TT(NM_MODE),
|
||||
_______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT) , _______
|
||||
),
|
||||
[NM_MODE] = LAYOUT(
|
||||
KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, KC_END, _______, _______, _______, _______, _______, KC_HOME, _______, _______, RESET, KC_INS,
|
||||
LGUI(KC_TAB), _______, LCTL(KC_RGHT), _______, _______, _______, _______, KC_UP, KC_PGUP, _______, _______, _______, TG(CL), KC_DEL,
|
||||
_______, KC_LEFT, _______, KC_RGHT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_ENT, KC_QUOT, KC_LGUI,
|
||||
KC_LSFT, _______, _______, _______, _______, LCTL(KC_LEFT), _______, _______, _______, _______, _______, TG(VI_MODE), TO(CL),
|
||||
_______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
|
||||
),
|
||||
|
||||
[VI_MODE] = LAYOUT(
|
||||
KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, LSFT(KC_END), KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, LSFT(KC_HOME), KC_F11, KC_F12, RESET, KC_INS,
|
||||
LGUI(KC_TAB), _______, LSFT(LCTL(KC_RGHT)), _______, _______, _______, _______, LSFT(KC_UP), _______, _______, _______, _______, TG(CL), KC_BSPC,
|
||||
_______, _______, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), LSFT(KC_DOWN), LSFT(KC_RGHT), _______, KC_SCLN, KC_QUOT, KC_LGUI,
|
||||
KC_LSFT, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), _______, _______, _______, _______, KC_SLSH, OSM(MOD_LSFT), TO(CL),
|
||||
_______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
|
||||
),
|
||||
[ACCENT] = 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, _______, _______,
|
||||
_______, RGB_TOG, RGB_MODE_PLAIN, _______, _______, _______, _______, _______, DE_UE, _______, _______, _______, _______, _______,
|
||||
_______, DE_AE, UC_Z, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE, _______, _______,
|
||||
OSL(ACCENT_CAP), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(CL),
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[ACCENT_CAP] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, DE_UE_CAP, _______, _______, _______, _______, _______,
|
||||
_______, DE_AE_CAP, _______, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE_CAP, _______, TO(CL),
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
56
keyboards/kbd6x/keymaps/othi/readme.md
Normal file
56
keyboards/kbd6x/keymaps/othi/readme.md
Normal file
@@ -0,0 +1,56 @@
|
||||
## Othi's Universal HHKB keymap
|
||||
|
||||
### Goals
|
||||
- Colemak layout. If you don't use Colemak then you'll need to also change the arrow key bindigns in other layers
|
||||
|
||||
- Vim-like navigation layer so you can use vim binding arrowkeys in non-vim environment
|
||||
|
||||
- Good modifier support so you don't have to hold 14 modifier keys at the same time
|
||||
|
||||
- RGB indicating layer change(only work with plain colors so far, don't put your rgb to pulsing or any non static animation)
|
||||
|
||||
### Layers
|
||||
- **CL:**
|
||||
|
||||
The base layer, default is Colemak
|
||||
|
||||
- **NM_MODE:**
|
||||
|
||||
Vim-like arrowkeys in the home row, it's `LHNE` for *JENK Colemak* and `HJKL` for *QWERTY*
|
||||
|
||||
Also `HOME`, `END` and next/prev word (`Ctrl + Left/Right`) in `0, 4, w, b` like in vim
|
||||
|
||||
- **VI_MODE:**
|
||||
|
||||
The same as `NM_MODE` but with `KC_LSFT` held down for mostly highlighting
|
||||
|
||||
- **ACCENT + ACCENT_CAP:**
|
||||
|
||||
Function row and Unicode characters
|
||||
|
||||
### Modifiers and Tap Dance keys
|
||||
**LHS:**
|
||||
|
||||
- Any Tap Dance key with the format of `TD(XXX_NM)` act as normal XXX modifier upon hold, but will hold **and** put you to `NM_MODE` when double click hold(a tap before the hold)(eg you can produce `Alt + PgUp` by pressing `Alt + Alt + U`)
|
||||
|
||||
- `KC_TAB` acts as both `KC_TAB` on tap and `KC_LGUI` on hold
|
||||
|
||||
- R3 CapsLock acts as both `KC_BSPC` on tap and `KC_LCTL` on hold
|
||||
|
||||
- Holding `KC_Q` also puts you into `NM_MODE`
|
||||
|
||||
- Holding `KC_F` puts you into `VI_MODE` for fast function keys
|
||||
|
||||
**RHS:**
|
||||
|
||||
- 3 keys `KC_SCLN`, `KC_DOT` and `KC_SLSH` in `CL` layer can also be held down for respectively `KC_LCTL`, `KC_LSFT`, `KC_LALT` for easier 2-hand modifier holding
|
||||
|
||||
- Right modifiers hold the selected modifier with `KC_LGUI` at the same time, mainly for i3wm, you can change this to whatever combination you want
|
||||
|
||||
### Misc. functionalities
|
||||
|
||||
**Unicode:**
|
||||
|
||||
- In case the keyboard output the 4-digit codepoint instead of the actual unicode, you need to change the rewrite input mode of the keyboard into the EEPROM(you only have to do this if the EEPROM was cleared or your current machine use another unicode compose method other than IBus/Linux's `Ctrl + Shift + U`). Change the corresponding Input `void eeconfig_init_user(void)`. See [this](https://docs.qmk.fm/#/feature_unicode) for availble input modes.
|
||||
|
||||
- **NOTE:** make sure to keep your qmk env up to date with upstream
|
||||
19
keyboards/kbd6x/keymaps/othi/rules.mk
Normal file
19
keyboards/kbd6x/keymaps/othi/rules.mk
Normal file
@@ -0,0 +1,19 @@
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = yes # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||
TAP_DANCE_ENABLE=yes
|
||||
|
||||
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, \
|
||||
KC_TAB, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_PLUS, DE_HASH, \
|
||||
KC_LSFT, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_ENT , \
|
||||
KC_LCTL, KC_LALT, DE_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
KC_LCTL, KC_LALT, KC_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
#include "m10a.h"
|
||||
#include "action_layer.h"
|
||||
#include "eeconfig.h"
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "version.h"
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
@@ -18,46 +16,48 @@ enum layers {
|
||||
_L9
|
||||
};
|
||||
|
||||
enum m10a_keycodes {
|
||||
enum custom_keycodes {
|
||||
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
|
||||
QMK_REV,
|
||||
KC_WEB,
|
||||
KC_WCLS
|
||||
};
|
||||
|
||||
extern backlight_config_t backlight_config;
|
||||
|
||||
#include "dynamic_macro.h"
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
#define FN_ZERO LT(_L9, KC_0)
|
||||
#define FN_ZERO LT(_L9, KC_KP_0)
|
||||
#define KC_DMR1 DYN_REC_START1
|
||||
#define KC_DMR2 DYN_REC_START2
|
||||
#define KC_DMP1 DYN_MACRO_PLAY1
|
||||
#define KC_DMP2 DYN_MACRO_PLAY2
|
||||
#define KC_DMRS DYN_REC_STOP
|
||||
|
||||
static uint8_t current_layer;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* .-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
* | 7| 8| 9| | +| -| *| | ^| &| !| |VLU|Ver|WFD| |VLU|NXT|FFD|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | 4| 5| 6| | /| %| ,| | D| E| F| |MUT|C-W|CHR| |MUT|STP|PLY|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | 1| 2| 3| | .| =|Ent| | A| B| C| |VLD|CMP|WBK| |VLD|PRV|RWD|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |L0 | _L9/0| |L1 | _L9 | |L2 | _L9 | |L3 | _L9 | |L4 | _L9 |
|
||||
* *-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
* .-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
* | | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | | | | | | | | | |MRS| | | | | | |_L3|_L4|_L5|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |L5 | _L9 | |L6 | _L9 | |L7 | _L9 | |L8 | _L9 | |L9 | |
|
||||
* *-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
/*## Layout Config:
|
||||
* .-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
* |7 |8 |9 | |+ |- |* | |^ |& |! | |VLU|Ver|WFD| |VLU|NXT|FFD|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |4 |5 |6 | |/ |% |, | |D |E |F | |MUT|C-W|CHR| |MUT|STP|PLY|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |1 |2 |3 | |. |= |Ent| |A |B |C | |VLD|CMP|WBK| |VLD|PRV|RWD|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |#L0|_L9/0 | |#L1|_L9 | |#L2|_L9 | |#L3|_L9 | |#L4|_L9 |
|
||||
* *-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
* .-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
* | | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | | | | | | | | | |MRS| | | | | | |_L3|_L4|_L5|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* | | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
|
||||
* |-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
* |#L5|_L9 | |#L6|_L9 | |#L7|_L9 | |#L8|_L9 | |#L9| |
|
||||
* *-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
*/
|
||||
[_L0] = {{KC_7, KC_8, KC_9 }, {KC_4, KC_5, KC_6 }, {KC_1, KC_2, KC_3 }, {XXXXXXX, XXXXXXX, FN_ZERO}},
|
||||
[_L0] = {{KC_KP_7, KC_KP_8, KC_KP_9}, {KC_KP_4, KC_KP_5, KC_KP_6}, {KC_KP_1, KC_KP_2, KC_KP_3}, {XXXXXXX, XXXXXXX, FN_ZERO}},
|
||||
[_L1] = {{KC_PPLS, KC_PMNS, KC_PAST}, {KC_PSLS, KC_PERC, KC_COMM}, {KC_PDOT, KC_EQL, KC_PENT}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L2] = {{KC_CIRC, KC_AMPR, KC_EXLM}, {S(KC_D), S(KC_E), S(KC_F)}, {S(KC_A), S(KC_B), S(KC_C)}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L3] = {{KC_VOLU, F(0), KC_WFWD}, {KC_MUTE, M(1), M(0) }, {KC_VOLD, KC_MYCM, KC_WBAK}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L3] = {{KC_VOLU, QMK_REV, KC_WFWD}, {KC_MUTE, KC_WCLS, KC_WEB }, {KC_VOLD, KC_MYCM, KC_WBAK}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L4] = {{KC_VOLU, KC_MNXT, KC_MFFD}, {KC_MUTE, KC_MSTP, KC_MPLY}, {KC_VOLD, KC_MPRV, KC_MRWD}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L5] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
[_L6] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
|
||||
@@ -66,96 +66,93 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_L9] = {{DF(_L6), DF(_L7), DF(_L8)}, {DF(_L3), DF(_L4), DF(_L5)}, {DF(_L0), DF(_L1), DF(_L2)}, {XXXXXXX, XXXXXXX, _______}},
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(10), D(LGUI), T(R), U(LGUI), END);
|
||||
}
|
||||
else {
|
||||
SEND_STRING("chrome.exe\n");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(I(10), D(LCTL), T(W), U(LCTL), END);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(0),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch (id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING ("[Keyboard: " QMK_KEYBOARD "] -- [QMK Version: " QMK_VERSION "] -- [Keymap: " QMK_KEYMAP "]");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_level(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
if (current_layer == layer) {
|
||||
}
|
||||
else {
|
||||
current_layer = layer;
|
||||
switch (layer) {
|
||||
case 0:
|
||||
backlight_level(0);
|
||||
break;
|
||||
case 1:
|
||||
backlight_level(1);
|
||||
break;
|
||||
case 2:
|
||||
backlight_level(2);
|
||||
break;
|
||||
case 3:
|
||||
backlight_level(3);
|
||||
break;
|
||||
case 4:
|
||||
backlight_level(4);
|
||||
break;
|
||||
case 5:
|
||||
backlight_level(5);
|
||||
break;
|
||||
case 6:
|
||||
backlight_level(6);
|
||||
break;
|
||||
case 7:
|
||||
backlight_level(6);
|
||||
break;
|
||||
case 8:
|
||||
backlight_level(6);
|
||||
break;
|
||||
case 9:
|
||||
backlight_level(0);
|
||||
break;
|
||||
default:
|
||||
backlight_level(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
// Enable Dynamic Macros.
|
||||
switch (keycode) {
|
||||
case QMK_REV:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_WEB:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("r"));
|
||||
wait_ms(100);
|
||||
SEND_STRING("chrome.exe\n");
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_WCLS:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (SS_LCTRL("w"));
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
// Dynamic Macros.
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void custom_backlight_level(uint8_t level) {
|
||||
if (level > BACKLIGHT_LEVELS)
|
||||
level = BACKLIGHT_LEVELS;
|
||||
backlight_config.level = level;
|
||||
backlight_config.enable = !!backlight_config.level;
|
||||
backlight_set(backlight_config.level);
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
custom_backlight_level(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _L0:
|
||||
custom_backlight_level(0);
|
||||
break;
|
||||
case _L1:
|
||||
custom_backlight_level(1);
|
||||
break;
|
||||
case _L2:
|
||||
custom_backlight_level(2);
|
||||
break;
|
||||
case _L3:
|
||||
custom_backlight_level(3);
|
||||
break;
|
||||
case _L4:
|
||||
custom_backlight_level(4);
|
||||
break;
|
||||
case _L5:
|
||||
custom_backlight_level(5);
|
||||
break;
|
||||
case _L6:
|
||||
custom_backlight_level(6);
|
||||
break;
|
||||
case _L7:
|
||||
custom_backlight_level(6);
|
||||
break;
|
||||
case _L8:
|
||||
custom_backlight_level(6);
|
||||
break;
|
||||
case _L9:
|
||||
custom_backlight_level(0);
|
||||
break;
|
||||
default:
|
||||
custom_backlight_level(0);
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
make m10a:gam3cat
|
||||
## Layout Config:
|
||||
.-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
| 7| 8| 9| | +| -| *| | ^| &| !| |VLU|Ver|WFD| |VLU|NXT|FFD|
|
||||
|7 |8 |9 | |+ |- |* | |^ |& |! | |VLU|Ver|WFD| |VLU|NXT|FFD|
|
||||
|-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
| 4| 5| 6| | /| %| ,| | D| E| F| |MUT|C-W|CHR| |MUT|STP|PLY|
|
||||
|4 |5 |6 | |/ |% |, | |D |E |F | |MUT|C-W|CHR| |MUT|STP|PLY|
|
||||
|-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
| 1| 2| 3| | .| =|Ent| | A| B| C| |VLD|CMP|WBK| |VLD|PRV|RWD|
|
||||
|1 |2 |3 | |. |= |Ent| |A |B |C | |VLD|CMP|WBK| |VLD|PRV|RWD|
|
||||
|-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
|L0 | _L9/0| |L1 | _L9 | |L2 | _L9 | |L3 | _L9 | |L4 | _L9 |
|
||||
|#L0|_L9/0 | |#L1|_L9 | |#L2|_L9 | |#L3|_L9 | |#L4|_L9 |
|
||||
*-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
.-----------. .-----------. .-----------. .-----------. .-----------.
|
||||
| | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
|
||||
@@ -17,5 +17,5 @@ make m10a:gam3cat
|
||||
|-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
| | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
|
||||
|-----------| |-----------| |-----------| |-----------| |-----------|
|
||||
|L5 | _L9 | |L6 | _L9 | |L7 | _L9 | |L8 | _L9 | |L9 | |
|
||||
|#L5|_L9 | |#L6|_L9 | |#L7|_L9 | |#L8|_L9 | |#L9| |
|
||||
*-----------* *-----------* *-----------* *-----------* *-----------*
|
||||
|
||||
@@ -1,3 +1,24 @@
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
TAP_DANCE_ENABLE = no # Enable TapDance functionality
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+1500)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = no # Enable extended unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
|
||||
#VARIABLE_TRACE = no # Use this to debug changes to variable values
|
||||
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
|
||||
KEY_LOCK_ENABLE = no # This enables key lock(+260)
|
||||
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#define _FN1 2
|
||||
#define _FN2 3
|
||||
#define _WIN 1
|
||||
#define _FN3 4
|
||||
//Tap Dance Declarations
|
||||
enum
|
||||
{
|
||||
@@ -22,10 +23,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT),
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT),
|
||||
KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_RGUI, RGB_TOG),
|
||||
KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_RGUI, MO(4)),
|
||||
[_WIN] = LAYOUT_625_space(
|
||||
LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT),
|
||||
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(4, KC_ENT),
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT),
|
||||
KC_ESC, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, RGB_TOG),
|
||||
[_FN1] = LAYOUT_625_space(
|
||||
@@ -35,14 +36,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[_FN2] = LAYOUT_625_space(
|
||||
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,
|
||||
MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS,
|
||||
KC_PWR, KC_BRID, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, RESET,
|
||||
MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS,
|
||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[_FN3] = LAYOUT_625_space(
|
||||
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,
|
||||
MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS,
|
||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -32,9 +32,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "timer.h"
|
||||
#include "split_flags.h"
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
# include "rgblight.h"
|
||||
#endif
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
# include "backlight.h"
|
||||
extern backlight_config_t backlight_config;
|
||||
@@ -55,6 +52,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
static bool debouncing = false;
|
||||
#endif
|
||||
|
||||
#if defined(USE_I2C) || defined(EH)
|
||||
|
||||
#if (MATRIX_COLS <= 8)
|
||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||
@@ -62,6 +61,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# define ROW_SHIFTER ((uint8_t)1)
|
||||
#else
|
||||
# error "Currently only supports 8 COLS"
|
||||
#endif
|
||||
|
||||
#else // USE_SERIAL
|
||||
|
||||
#if (MATRIX_COLS <= 8)
|
||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||
# define matrix_bitpop(i) bitpop(matrix[i])
|
||||
# define ROW_SHIFTER ((uint8_t)1)
|
||||
#elif (MATRIX_COLS <= 16)
|
||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||
# define matrix_bitpop(i) bitpop16(matrix[i])
|
||||
# define ROW_SHIFTER ((uint16_t)1)
|
||||
#elif (MATRIX_COLS <= 32)
|
||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||
# define matrix_bitpop(i) bitpop32(matrix[i])
|
||||
# define ROW_SHIFTER ((uint32_t)1)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
|
||||
@@ -315,15 +335,39 @@ i2c_error: // the cable is disconnceted, or something else went wrong
|
||||
|
||||
#else // USE_SERIAL
|
||||
|
||||
|
||||
typedef struct _Serial_s2m_buffer_t {
|
||||
// TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
|
||||
matrix_row_t smatrix[ROWS_PER_HAND];
|
||||
} Serial_s2m_buffer_t;
|
||||
|
||||
volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
|
||||
volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
|
||||
uint8_t volatile status0 = 0;
|
||||
|
||||
SSTD_t transactions[] = {
|
||||
{ (uint8_t *)&status0,
|
||||
sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
|
||||
sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
|
||||
}
|
||||
};
|
||||
|
||||
void serial_master_init(void)
|
||||
{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
|
||||
|
||||
void serial_slave_init(void)
|
||||
{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
|
||||
|
||||
int serial_transaction(void) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
|
||||
if (serial_update_buffers()) {
|
||||
if (soft_serial_transaction()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TODO: if MATRIX_COLS > 8 change to unpack()
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
matrix[slaveOffset+i] = serial_s2m_buffer.smatrix[i];
|
||||
}
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
@@ -332,7 +376,7 @@ int serial_transaction(void) {
|
||||
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
// Write backlight level for slave to read
|
||||
serial_master_buffer[SERIAL_BACKLIT_START] = backlight_config.enable ? backlight_config.level : 0;
|
||||
serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
@@ -375,8 +419,9 @@ void matrix_slave_scan(void) {
|
||||
i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
|
||||
}
|
||||
#else // USE_SERIAL
|
||||
// TODO: if MATRIX_COLS > 8 change to pack()
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
serial_slave_buffer[i] = matrix[offset+i];
|
||||
serial_s2m_buffer.smatrix[i] = matrix[offset+i];
|
||||
}
|
||||
#endif
|
||||
matrix_slave_scan_user();
|
||||
|
||||
@@ -161,7 +161,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#define RGB_DI_PIN D0 // The pin your RGB strip is wired to
|
||||
#define RGBLED_NUM 7 // Number of LEDs
|
||||
#define RGBLED_NUM 17 // Number of LEDs
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
||||
@@ -5,7 +5,7 @@ A compact 30% keyboard.
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: miuni32 PCB
|
||||
Hardware Availability: https://zealpc.net/products/miuni32
|
||||
Hardware Availability: https://bigtuna.io
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ void rgblight_step_reverse(void) {
|
||||
rgblight_mode(mode);
|
||||
}
|
||||
|
||||
uint32_t rgblight_get_mode(void) {
|
||||
uint8_t rgblight_get_mode(void) {
|
||||
if (!rgblight_config.enable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
19
keyboards/namecard2x4/keymaps/brainfuck/config.h
Normal file
19
keyboards/namecard2x4/keymaps/brainfuck/config.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copyright 2018 takashiski
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// place overrides here
|
||||
59
keyboards/namecard2x4/keymaps/brainfuck/keymap.c
Normal file
59
keyboards/namecard2x4/keymaps/brainfuck/keymap.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/* Copyright 2018 takashiski
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_jp.h"
|
||||
|
||||
enum Layer
|
||||
{
|
||||
JP,
|
||||
EN,
|
||||
CONFIG
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[JP] = LAYOUT(
|
||||
JP_LT,JP_GT,JP_PLUS,JP_MINS,\
|
||||
LT(CONFIG,JP_DOT),JP_COMM,JP_LBRC,LT(CONFIG,JP_RBRC)\
|
||||
),
|
||||
[EN] = LAYOUT(
|
||||
KC_LT,KC_GT,KC_PLUS,KC_MINS,\
|
||||
LT(CONFIG,KC_DOT),KC_COMM,KC_LBRC,LT(CONFIG,KC_RBRC)\
|
||||
),
|
||||
[CONFIG]= LAYOUT(
|
||||
KC_NO,DF(JP),DF(JP),KC_NO,\
|
||||
KC_TRNS,DF(EN),DF(JP),KC_TRNS\
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
12
keyboards/namecard2x4/keymaps/brainfuck/readme.md
Normal file
12
keyboards/namecard2x4/keymaps/brainfuck/readme.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# keymap for brainfuck
|
||||
|
||||
This keymap is specialized for the brainfuck programming language.
|
||||
|
||||
| < | > | + | - |
|
||||
| . | , | [ | ] |
|
||||
|
||||
and when you hold . or ], change config layer.
|
||||
|
||||
default layer is for JP keyboard(logical pairing).
|
||||
you can choose EN keyboard(typewrite pairing).
|
||||
|
||||
@@ -5,8 +5,82 @@
|
||||
"width": 16,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
|
||||
}
|
||||
"LAYOUT": {
|
||||
"key_count": 71,
|
||||
"layout": [
|
||||
{"label":"ESC", "x":0, "y":0},
|
||||
{"label":"1", "x":1, "y":0},
|
||||
{"label":"2", "x":2, "y":0},
|
||||
{"label":"3", "x":3, "y":0},
|
||||
{"label":"4", "x":4, "y":0},
|
||||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":6, "y":0},
|
||||
{"label":"7", "x":7, "y":0},
|
||||
{"label":"8", "x":8, "y":0},
|
||||
{"label":"9", "x":9, "y":0},
|
||||
{"label":"0", "x":10, "y":0},
|
||||
{"label":"MINUS", "x":11, "y":0},
|
||||
{"label":"EQUAL", "x":12, "y":0},
|
||||
{"label":"BACKSLASH", "x":13, "y":0},
|
||||
{"label":"BACKSPACE", "x":14, "y":0},
|
||||
{"label":"GRAVE", "x":15, "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":"LBRACKET", "x":11.5, "y":1},
|
||||
{"label":"RBRACKET", "x":12.5, "y":1},
|
||||
{"label":"BACKSLASH", "x":13.5, "y":1, "w":1.5},
|
||||
{"label":"DELETE", "x":15, "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":"SEMICOLON", "x":10.75, "y":2},
|
||||
{"label":"QUOTE", "x":11.75, "y":2},
|
||||
{"label":"ISO HASH", "x":12.75, "y":2},
|
||||
{"label":"ENTER", "x":13.75, "y":2, "w":1.25},
|
||||
{"label":"PAGE UP", "x":15, "y":2},
|
||||
{"label":"LSHIFT", "x":0, "y":3, "w":1.25},
|
||||
{"label":"ISO BACKSLASH", "x":1.25, "y":3},
|
||||
{"label":"Z", "x":2.25, "y":3},
|
||||
{"label":"X", "x":3.25, "y":3},
|
||||
{"label":"C", "x":4.25, "y":3},
|
||||
{"label":"V", "x":5.25, "y":3},
|
||||
{"label":"B", "x":6.25, "y":3},
|
||||
{"label":"N", "x":7.25, "y":3},
|
||||
{"label":"M", "x":8.25, "y":3},
|
||||
{"label":"COMMA", "x":9.25, "y":3},
|
||||
{"label":"PERIOD", "x":10.25, "y":3},
|
||||
{"label":"SLASH", "x":11.25, "y":3},
|
||||
{"label":"RSHIFT", "x":12.25, "y":3, "w":1.75},
|
||||
{"label":"UP", "x":14, "y":3},
|
||||
{"label":"PAGE DOWN", "x":15, "y":3},
|
||||
{"label":"LCTRL", "x":0, "y":4, "w":1.25},
|
||||
{"label":"LGUI", "x":1.25, "y":4, "w":1.25},
|
||||
{"label":"LALT", "x":2.5, "y":4, "w":1.25},
|
||||
{"label":"SPACE", "x":3.75, "y":4, "w":6.25},
|
||||
{"label":"LALT", "x":10, "y":4},
|
||||
{"label":"FN", "x":11, "y":4},
|
||||
{"label":"RCTRL", "x":12, "y":4},
|
||||
{"label":"LEFT", "x":13, "y":4},
|
||||
{"label":"DOWN", "x":14, "y":4},
|
||||
{"label":"RIGHT", "x":15, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Ctrl|Win |Alt | Space |Alt|Mo(1)|Ctrl|Lef|Dow|Rght|
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_BL] = LAYOUT_65_ansi(
|
||||
[_BL] = LAYOUT(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_GRV,
|
||||
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_NUHS, KC_ENT, KC_PGUP,
|
||||
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | BL_Toggle | | | | |Vol-| |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_FL1] = LAYOUT_65_ansi(
|
||||
[_FL1] = LAYOUT(
|
||||
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, _______,
|
||||
RGB_TOG, RGB_VAI, RGB_SAI, RGB_HUI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
|
||||
_______, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
|
||||
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | | | | |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_FL2] = LAYOUT_65_ansi(
|
||||
[_FL2] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT_65_ansi( \
|
||||
#define LAYOUT( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
|
||||
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
|
||||
|
||||
@@ -97,9 +97,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
};
|
||||
|
||||
void matrix_init_keymap(void) {
|
||||
DDRD &= ~(1<<5);
|
||||
PORTD &= ~(1<<5);
|
||||
#ifndef CONVERT_TO_PROTON_C
|
||||
setPinOutput(D5);
|
||||
writePinHigh(D5);
|
||||
|
||||
DDRB &= ~(1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
setPinOutput(B0);
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | Esc | Caps | Alt | GUI |Lower | Space |Raise |NumLay| RAlt | Men | Del |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_planck_grid(
|
||||
[_QWERTY] = LAYOUT_ortho_4x12_wrapper(
|
||||
LT_FN(KC_TAB), _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
|
||||
KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, CTL_ENT,
|
||||
KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, LT_RAI(KC_MINS),
|
||||
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT_planck_grid(
|
||||
[_COLEMAK] = LAYOUT_ortho_4x12_wrapper(
|
||||
LT_FN(KC_TAB), _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC,
|
||||
KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT,
|
||||
KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, LT_RAI(KC_MINS),
|
||||
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = LAYOUT_planck_grid(
|
||||
[_DVORAK] = LAYOUT_ortho_4x12_wrapper(
|
||||
LT_FN(KC_TAB), _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC,
|
||||
KC_LCTL, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_ENT,
|
||||
KC_LSFT, _________________DVORAK_L3_________________, _________________DVORAK_R3_________________, LT_RAI(KC_MINS),
|
||||
@@ -78,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT_planck_grid(
|
||||
[_LOWER] = LAYOUT_ortho_4x12_wrapper(
|
||||
________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_GRV, KC_BSLS,
|
||||
_______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE,
|
||||
_______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
|
||||
@@ -96,7 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | 0 | | Left | Down | Right| NumLk|
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT_planck_grid(
|
||||
[_RAISE] = LAYOUT_ortho_4x12_wrapper(
|
||||
________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_PLUS, KC_BSLS,
|
||||
_______, KC_A, KC_UP, KC_D, KC_PSCR, KC_VOLU, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RIGHT,KC__MUTE, KC_VOLD, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______,
|
||||
@@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_PLOVER] = LAYOUT_planck_grid(
|
||||
[_PLOVER] = LAYOUT_ortho_4x12_wrapper(
|
||||
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
|
||||
XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
|
||||
XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
@@ -133,7 +133,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_FNLAYER] = LAYOUT_planck_grid(
|
||||
[_FNLAYER] = LAYOUT_ortho_4x12_wrapper(
|
||||
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
|
||||
_______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT,
|
||||
_______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
|
||||
@@ -151,7 +151,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | 0 | . | Exit | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_NUMLAY] = LAYOUT_planck_grid(
|
||||
[_NUMLAY] = LAYOUT_ortho_4x12_wrapper(
|
||||
_______, KC_Q, KC_UP, KC_H, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_MINS, KC_PLUS, KC_BSPC,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PAST, KC_COLN, KC_ENT,
|
||||
_______, KC_Z, KC_X, KC_C, KC_V, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PSLS, _______,
|
||||
@@ -170,7 +170,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_MOUSECURSOR] = LAYOUT_planck_grid(
|
||||
[_MOUSECURSOR] = LAYOUT_ortho_4x12_wrapper(
|
||||
KC_ACL0, KC_ACL1, KC_ACL2, M_EMAIL,M_EMAIL2, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, P_MPASS, P_META,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, O_RTQ6H, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, O_DAYRN,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______,
|
||||
@@ -188,7 +188,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_planck_grid(
|
||||
[_ADJUST] = LAYOUT_ortho_4x12_wrapper(
|
||||
DFU, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_DEL,
|
||||
_______, MAGIC_TOGGLE_NKRO, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
|
||||
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG,
|
||||
|
||||
@@ -24,7 +24,6 @@ enum planck_layers {
|
||||
_NUMBER,
|
||||
_SYMBOL,
|
||||
_FUNC,
|
||||
_ADJUST
|
||||
};
|
||||
|
||||
enum planck_keycodes {
|
||||
@@ -33,11 +32,10 @@ enum planck_keycodes {
|
||||
|
||||
#define SPC_SHF MT(MOD_LSFT, KC_SPC)
|
||||
|
||||
#define ENT_FUN LT(_FUNC, KC_ENT)
|
||||
#define ESC_FUN LT(_FUNC, KC_ESC)
|
||||
#define ESC_HYP MT(MOD_HYPR, KC_ESC)
|
||||
#define TAB_NUM LT(_NUMBER, KC_TAB)
|
||||
#define BSP_SYM LT(_SYMBOL, KC_BSPC)
|
||||
#define DEL_ADJ LT(_ADJUST, KC_DEL)
|
||||
#define DEL_WRP MT(MOD_LCTL | MOD_LALT | MOD_LGUI, KC_DEL)
|
||||
|
||||
#define SYMLOCK TG(_SYMBOL)
|
||||
#define NUMLOCK TG(_NUMBER)
|
||||
@@ -48,18 +46,25 @@ enum planck_keycodes {
|
||||
#define ONE_HYP OSM(MOD_HYPR)
|
||||
#define ONE_MEH OSM(MOD_MEH)
|
||||
#define ONE_WRP OSM(MOD_LCTL | MOD_LALT | MOD_LGUI)
|
||||
#define ONE_WOA OSM(MOD_LCTL | MOD_LGUI | MOD_LSFT)
|
||||
#define ONE_DER OSM(MOD_LALT | MOD_LGUI | MOD_LSFT)
|
||||
|
||||
#define A_CTRL MT(MOD_LCTL, KC_A)
|
||||
#define S_ALT MT(MOD_LALT, KC_S)
|
||||
#define D_GUI MT(MOD_LGUI, KC_D)
|
||||
#define F_SHFT MT(MOD_LSFT, KC_F)
|
||||
#define G_NUM LT(_NUMBER, KC_G)
|
||||
#define H_NAV LT(_SYMBOL, KC_H)
|
||||
#define J_SHFT MT(MOD_RSFT, KC_J)
|
||||
#define K_GUI MT(MOD_RGUI, KC_K)
|
||||
#define L_ALT MT(MOD_RALT, KC_L)
|
||||
#define A_CTRL MT(MOD_LCTL, KC_A)
|
||||
#define S_ALT MT(MOD_LALT, KC_S)
|
||||
#define D_GUI MT(MOD_LGUI, KC_D)
|
||||
#define F_SHFT MT(MOD_LSFT, KC_F)
|
||||
#define J_SHFT MT(MOD_RSFT, KC_J)
|
||||
#define K_GUI MT(MOD_RGUI, KC_K)
|
||||
#define L_ALT MT(MOD_RALT, KC_L)
|
||||
#define MINSCTL MT(MOD_RCTL, KC_MINS)
|
||||
#define SCL_CTL MT(MOD_RCTL, KC_SCLN)
|
||||
|
||||
#define ENT_CTL MT(MOD_LCTL, KC_ENT)
|
||||
#define LT_ALT MT(MOD_LALT, KC_LEFT)
|
||||
#define DN_GUI MT(MOD_LGUI, KC_DOWN)
|
||||
#define RT_SHFT MT(MOD_LSFT, KC_RGHT)
|
||||
#define N4_SHFT MT(MOD_RSFT, KC_4)
|
||||
#define N5_GUI MT(MOD_RGUI, KC_5)
|
||||
#define N6_ALT MT(MOD_RALT, KC_6)
|
||||
|
||||
#define BWORD LALT(KC_LEFT)
|
||||
#define FWORD LALT(KC_RIGHT)
|
||||
@@ -68,6 +73,8 @@ enum planck_keycodes {
|
||||
#define PWIN LGUI(LSFT(KC_GRV))
|
||||
#define NTAB LGUI(LSFT(KC_RBRC))
|
||||
#define PTAB LGUI(LSFT(KC_LBRC))
|
||||
#define NAVBACK LGUI(KC_LBRC)
|
||||
#define NAVFWD LGUI(KC_RBRC)
|
||||
|
||||
#define XMSNCTL HYPR(KC_F14)
|
||||
#define XDSKTOP HYPR(KC_F15)
|
||||
@@ -82,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
| | | | | | | | | | | | |
|
||||
|------|------|------|------|------|------|------|------|------|------|------|------|
|
||||
| ( | a | s | d | f | g | h | j | k | l | ; | ' |
|
||||
| | CTRL | ALT | GUI | SHIFT| NUMBR| SYMBL| SHIFT| GUI | ALT | CTRL | |
|
||||
| | CTRL | ALT | GUI | SHIFT| | | SHIFT| GUI | ALT | CTRL | |
|
||||
|------|------|------|------|------|------|------|------|------|------|------|------|
|
||||
| [ | z | x | c | v | b | n | m | , | . | / | > |
|
||||
| | | | | | | | | | | | |
|
||||
@@ -92,71 +99,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_planck_grid(
|
||||
KC_HASH, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
|
||||
KC_LPRN, A_CTRL, S_ALT, D_GUI, F_SHFT, G_NUM, H_NAV, J_SHFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
|
||||
KC_LPRN, A_CTRL, S_ALT, D_GUI, F_SHFT, KC_G, KC_H, J_SHFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
|
||||
KC_LBRC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RABK,
|
||||
KC_CAPS, ONE_ALT, ONE_GUI, ESC_FUN, TAB_NUM, SPC_SHF, SPC_SHF, BSP_SYM, DEL_ADJ, ONE_HYP, ONE_MEH, ONE_WRP
|
||||
NUMLOCK, MO(_FUNC), ONE_MEH, ESC_HYP, TAB_NUM, SPC_SHF, SPC_SHF, BSP_SYM, DEL_WRP, ONE_WRP, ONE_DER, SYMLOCK
|
||||
),
|
||||
|
||||
/* Symbol
|
||||
| | & | ` | ~ | [ | ] | < | > | + | | | | - |
|
||||
| | $ | % | = | ( | ) | | : | ! | @ | * | ' |
|
||||
| | | ^ | # | { | } | | " | | | \ | | |
|
||||
| | | | | LOCK | | .... | | | | |
|
||||
| | & | ` | ~ | [ | ] | < | > | + | | | | |
|
||||
| | $ | % | = | ( | ) | ; | : | ! | @ | _ | |
|
||||
| | | ^ | # | { | } | ' | " | | | \ | ? | |
|
||||
| | | | | | | .... | | | | |
|
||||
*/
|
||||
[_SYMBOL] = LAYOUT_planck_grid(
|
||||
_______, KC_AMPR, KC_GRV, KC_TILD, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_PLUS, KC_ASTR, XXXXXXX, _______,
|
||||
_______, KC_DLR, KC_PERC, KC_EQL, KC_LPRN, KC_RPRN, KC_SCLN, KC_COLN, KC_EXLM, KC_AT, KC_ASTR, _______,
|
||||
_______, XXXXXXX, KC_CIRC, KC_HASH, KC_LCBR, KC_RCBR, KC_QUOT, KC_DQUO, KC_PIPE, KC_BSLS, XXXXXXX, _______,
|
||||
_______, _______, _______, _______, SYMLOCK, _______, _______, _______, _______, _______, _______, _______
|
||||
KC_ESC, KC_AMPR, KC_GRV, KC_TILD, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_PLUS, KC_ASTR, XXXXXXX, KC_DEL,
|
||||
KC_ENT, KC_DLR, KC_PERC, KC_EQL, KC_LPRN, KC_RPRN, KC_SCLN, KC_COLN, KC_EXLM, KC_AT, KC_UNDS, KC_BSPC,
|
||||
_______, XXXXXXX, KC_CIRC, KC_HASH, KC_LCBR, KC_RCBR, KC_QUOT, KC_DQUO, KC_PIPE, KC_BSLS, KC_QUES, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
/* Number
|
||||
| | |<-word| up |word->| PgUp | . | 7 | 8 | 9 | + | * |
|
||||
| | Enter| left | down | right| PgDn | 0 | 4 | 5 | 6 | - | / |
|
||||
| | Bksp | Home | tab | End | Del | , | 1 | 2 | 3 | = | % |
|
||||
| | | | | .... | | LOCK | | : | $ | |
|
||||
| | | | | .... | | | | : | $ | |
|
||||
*/
|
||||
[_NUMBER] = LAYOUT_planck_grid(
|
||||
XXXXXXX, _______, BWORD, KC_UP, FWORD, KC_PGUP, KC_DOT, KC_7, KC_8, KC_9, KC_PLUS, KC_ASTR,
|
||||
XXXXXXX, KC_ENT , KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_0, KC_4, KC_5, KC_6, KC_MINS, KC_SLSH,
|
||||
XXXXXXX, XXXXXXX, BWORD, KC_UP, FWORD, KC_PGUP, KC_DOT, KC_7, KC_8, KC_9, KC_PLUS, KC_ASTR,
|
||||
KC_CAPS, ENT_CTL, LT_ALT, DN_GUI, RT_SHFT, KC_PGDN, KC_0, N4_SHFT, N5_GUI, N6_ALT, MINSCTL, KC_SLSH,
|
||||
XXXXXXX, KC_BSPC, KC_HOME, KC_TAB, KC_END, KC_DEL, KC_COMM, KC_1, KC_2, KC_3, KC_EQL, KC_PERC,
|
||||
_______, _______, _______, _______, _______, _______, _______, NUMLOCK, _______, KC_COLN, KC_DLR, _______
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, KC_DLR, _______
|
||||
),
|
||||
/* Function
|
||||
* | | Mctl | Pspc | Nwin | Nspc | Desk | | F7 | F8 | F9 | F10 | F13 |
|
||||
* | | Nctr | Ptab | Pwin | Ntab | | | F4 | F5 | F6 | F11 | F14 |
|
||||
* | Reset| Mctl | Pspc | Nwin | Nspc | Desk | | F7 | F8 | F9 | F10 | F13 |
|
||||
* | Debug| Nctr | Ptab | Pwin | Ntab | Back | Fwd | F4 | F5 | F6 | F11 | F14 |
|
||||
* | Mute | Vol- | Vol+ | Trk- | Trk+ | Play | | F1 | F2 | F3 | F12 | F15 |
|
||||
* | | | | | | | | | | | | |
|
||||
*/
|
||||
[_FUNC] = LAYOUT_planck_grid(
|
||||
XXXXXXX, XMSNCTL, XPRVSPC, NWIN, XNXTSPC, XDSKTOP, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F13,
|
||||
XXXXXXX, XNOTIFY, PTAB, PWIN, NTAB, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F11, KC_F14,
|
||||
RESET, XMSNCTL, XPRVSPC, NWIN, XNXTSPC, XDSKTOP, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F13,
|
||||
DEBUG, XNOTIFY, PTAB, PWIN, NTAB, NAVBACK, NAVFWD, KC_F4, KC_F5, KC_F6, KC_F11, KC_F14,
|
||||
KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12, KC_F15,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Reset| Debug| | | | | | | | | | |
|
||||
* | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_planck_grid(
|
||||
RESET, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
|
||||
|
||||
};
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
#endif
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
/* state = update_tri_layer_state(state, _SYMBOL, _NUMBER, _ADJUST); */
|
||||
state = update_tri_layer_state(state, _SYMBOL, _NUMBER, _FUNC);
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , NO_AA ,
|
||||
UTILITY, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , NO_OSLH, NO_AE ,
|
||||
KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , NO_MINS, KC_RSPC,
|
||||
LFT_CTR, KC_LALT, KC_LGUI, NO_AT , ESC_LOW, KC_ENT , KC_SPC , BSP_RAI, _______, NO_ALGR, NO_ASTR, RGT_CTR
|
||||
LFT_CTR, KC_LALT, KC_LGUI, NO_AT , ESC_LOW, KC_ENT , KC_SPC , BSP_RAI, _______, KC_ALGR, NO_ASTR, RGT_CTR
|
||||
),
|
||||
|
||||
/* Raise
|
||||
|
||||
@@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM, \
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH, \
|
||||
KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
@@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM, \
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH, \
|
||||
KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Mac Lower
|
||||
|
||||
@@ -6,7 +6,92 @@
|
||||
"height": 6.25,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"[L2] `", "x":0, "y":0.375, "w":1.25}, {"label":"!", "x":1.25, "y":0.375}, {"label":"@", "x":2.25, "y":0.125}, {"label":"#", "x":3.25, "y":0}, {"label":"$", "x":4.25, "y":0.125}, {"label":"%", "x":5.25, "y":0.25}, {"label":"[L1]", "x":6.25, "y":0.75}, {"label":"[L1]", "x":11.25, "y":0.75}, {"label":"^", "x":12.25, "y":0.25}, {"label":"&", "x":13.25, "y":0.125}, {"label":"*", "x":14.25, "y":0}, {"label":"(", "x":15.25, "y":0.125}, {"label":")", "x":16.25, "y":0.375}, {"label":"[L2] -", "x":17.25, "y":0.375, "w":1.25}, {"label":"Tab", "x":0, "y":1.375, "w":1.25}, {"label":"Q", "x":1.25, "y":1.375}, {"label":"W", "x":2.25, "y":1.125}, {"label":"E", "x":3.25, "y":1}, {"label":"R", "x":4.25, "y":1.125}, {"label":"T", "x":5.25, "y":1.25}, {"label":"[", "x":6.25, "y":1.75, "h":1.5}, {"label":"]", "x":11.25, "y":1.75, "h":1.5}, {"label":"Y", "x":12.25, "y":1.25}, {"label":"U", "x":13.25, "y":1.125}, {"label":"I", "x":14.25, "y":1}, {"label":"O", "x":15.25, "y":1.125}, {"label":"P", "x":16.25, "y":1.375}, {"label":"=", "x":17.25, "y":1.375, "w":1.25}, {"label":"Esc", "x":0, "y":2.375, "w":1.25}, {"label":"A", "x":1.25, "y":2.375}, {"label":"S", "x":2.25, "y":2.125}, {"label":"D", "x":3.25, "y":2}, {"label":"F", "x":4.25, "y":2.125}, {"label":"G", "x":5.25, "y":2.25}, {"label":"PgUp", "x":6.75, "y":3.75}, {"label":"End", "x":10.75, "y":3.75}, {"label":"H", "x":12.25, "y":2.25}, {"label":"J", "x":13.25, "y":2.125}, {"label":"K", "x":14.25, "y":2}, {"label":"L", "x":15.25, "y":2.125}, {"label":":", "x":16.25, "y":2.375}, {"label":"'", "x":17.25, "y":2.375, "w":1.25}, {"label":"Shift", "x":0, "y":3.375, "w":1.25}, {"label":"Z", "x":1.25, "y":3.375}, {"label":"X", "x":2.25, "y":3.125}, {"label":"C", "x":3.25, "y":3}, {"label":"V", "x":4.25, "y":3.125}, {"label":"B", "x":5.25, "y":3.25}, {"label":"PgDn", "x":7.75, "y":3.75}, {"label":"Home", "x":9.75, "y":3.75}, {"label":"N", "x":12.25, "y":3.25}, {"label":"M", "x":13.25, "y":3.125}, {"label":"<", "x":14.25, "y":3}, {"label":">", "x":15.25, "y":3.125}, {"label":"?", "x":16.25, "y":3.375}, {"label":"Shift", "x":17.25, "y":3.375, "w":1.25}, {"label":"GUI", "x":0.25, "y":4.375}, {"label":"+", "x":1.25, "y":4.375}, {"label":"-", "x":2.25, "y":4.125}, {"label":"[Alt] *", "x":3.25, "y":4}, {"label":"[Ctrl] /", "x":5.5, "y":5.25, "w":1.25}, {"label":"Backspace", "x":6.75, "y":4.75, "h":1.5}, {"label":"Del", "x":7.75, "y":4.75, "h":1.5}, {"label":"Enter", "x":9.75, "y":4.75, "h":1.5}, {"label":"Space", "x":10.75, "y":4.75, "h":1.5}, {"label":"Alt", "x":11.75, "y":5.25, "w":1.25}, {"label":"Left", "x":14.25, "y":4}, {"label":"Down", "x":15.25, "y":4.125}, {"label":"Up", "x":16.25, "y":4.375}, {"label":"Right", "x":17.25, "y":4.375}]
|
||||
"layout": [
|
||||
{"label":"_Nav || `", "x":0, "y":0.375, "w":1.25},
|
||||
{"label":"1", "x":1.25, "y":0.375},
|
||||
{"label":"2", "x":2.25, "y":0.125},
|
||||
{"label":"3", "x":3.25, "y":0},
|
||||
{"label":"4", "x":4.25, "y":0.125},
|
||||
{"label":"5", "x":5.25, "y":0.25},
|
||||
|
||||
{"label":"6", "x":12.25, "y":0.25},
|
||||
{"label":"7", "x":13.25, "y":0.125},
|
||||
{"label":"8", "x":14.25, "y":0},
|
||||
{"label":"9", "x":15.25, "y":0.125},
|
||||
{"label":"0", "x":16.25, "y":0.375},
|
||||
{"label":"_Nav || -", "x":17.25, "y":0.375, "w":1.25},
|
||||
|
||||
{"label":"Tab", "x":0, "y":1.375, "w":1.25},
|
||||
{"label":"Q", "x":1.25, "y":1.375},
|
||||
{"label":"W", "x":2.25, "y":1.125},
|
||||
{"label":"E", "x":3.25, "y":1},
|
||||
{"label":"R", "x":4.25, "y":1.125},
|
||||
{"label":"T", "x":5.25, "y":1.25},
|
||||
{"label":"MO(_SYMB)", "x":6.25, "y":0.75},
|
||||
|
||||
{"label":"MO(_SYMB)", "x":11.25, "y":0.75},
|
||||
{"label":"Y", "x":12.25, "y":1.25},
|
||||
{"label":"U", "x":13.25, "y":1.125},
|
||||
{"label":"I", "x":14.25, "y":1},
|
||||
{"label":"O", "x":15.25, "y":1.125},
|
||||
{"label":"P", "x":16.25, "y":1.375},
|
||||
{"label":"=", "x":17.25, "y":1.375, "w":1.25},
|
||||
|
||||
{"label":"Esc", "x":0, "y":2.375, "w":1.25},
|
||||
{"label":"A", "x":1.25, "y":2.375},
|
||||
{"label":"S", "x":2.25, "y":2.125},
|
||||
{"label":"D", "x":3.25, "y":2},
|
||||
{"label":"F", "x":4.25, "y":2.125},
|
||||
{"label":"G", "x":5.25, "y":2.25},
|
||||
{"label":"[", "x":6.25, "y":1.75, "h":1.5},
|
||||
|
||||
{"label":"]", "x":11.25, "y":1.75, "h":1.5},
|
||||
{"label":"H", "x":12.25, "y":2.25},
|
||||
{"label":"J", "x":13.25, "y":2.125},
|
||||
{"label":"K", "x":14.25, "y":2},
|
||||
{"label":"L", "x":15.25, "y":2.125},
|
||||
{"label":";", "x":16.25, "y":2.375},
|
||||
{"label":"'", "x":17.25, "y":2.375, "w":1.25},
|
||||
|
||||
{"label":"Shift", "x":0, "y":3.375, "w":1.25},
|
||||
{"label":"Z", "x":1.25, "y":3.375},
|
||||
{"label":"X", "x":2.25, "y":3.125},
|
||||
{"label":"C", "x":3.25, "y":3},
|
||||
{"label":"V", "x":4.25, "y":3.125},
|
||||
{"label":"B", "x":5.25, "y":3.25},
|
||||
|
||||
{"label":"_Adjust/Page Up", "x":6.75, "y":3.75},
|
||||
{"label":"Page Down", "x":7.75, "y":3.75},
|
||||
|
||||
{"label":"Home", "x":9.75, "y":3.75},
|
||||
{"label":"_Adjust/End", "x":10.75, "y":3.75},
|
||||
|
||||
{"label":"N", "x":12.25, "y":3.25},
|
||||
{"label":"M", "x":13.25, "y":3.125},
|
||||
{"label":",", "x":14.25, "y":3},
|
||||
{"label":",", "x":15.25, "y":3.125},
|
||||
{"label":"\\", "x":16.25, "y":3.375},
|
||||
{"label":"Shift", "x":17.25, "y":3.375, "w":1.25},
|
||||
|
||||
{"label":"LGUI", "x":0.25, "y":4.375},
|
||||
{"label":"P+", "x":1.25, "y":4.375},
|
||||
{"label":"P-", "x":2.25, "y":4.125},
|
||||
{"label":"LAlt || P*", "x":3.25, "y":4},
|
||||
|
||||
{"label":"LCtrl || P/", "x":5.5, "y":5.25, "w":1.25},
|
||||
{"label":"Backspace", "x":6.75, "y":4.75, "h":1.5},
|
||||
{"label":"Delete", "x":7.75, "y":4.75, "h":1.5},
|
||||
|
||||
{"label":"Enter", "x":9.75, "y":4.75, "h":1.5},
|
||||
{"label":"Space", "x":10.75, "y":4.75, "h":1.5},
|
||||
{"label":"RAlt", "x":11.75, "y":5.25, "w":1.25},
|
||||
|
||||
{"label":"Left", "x":14.25, "y":4},
|
||||
{"label":"Down", "x":15.25, "y":4.125},
|
||||
{"label":"Up", "x":16.25, "y":4.375},
|
||||
{"label":"Right", "x":17.25, "y":4.375}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
92
keyboards/s65_plus/info.json
Normal file
92
keyboards/s65_plus/info.json
Normal file
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"keyboard_name": "S65-Plus",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 18,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_ansi": {
|
||||
"layout": [
|
||||
{"label":"F1", "x":0, "y":0},
|
||||
{"label":"F2", "x":1, "y":0},
|
||||
{"label":"ESC", "x":2, "y":0},
|
||||
{"label":"1", "x":3, "y":0},
|
||||
{"label":"2", "x":4, "y":0},
|
||||
{"label":"3", "x":5, "y":0},
|
||||
{"label":"4", "x":6, "y":0},
|
||||
{"label":"5", "x":7, "y":0},
|
||||
{"label":"6", "x":8, "y":0},
|
||||
{"label":"7", "x":9, "y":0},
|
||||
{"label":"8", "x":10, "y":0},
|
||||
{"label":"9", "x":11, "y":0},
|
||||
{"label":"0", "x":12, "y":0},
|
||||
{"label":"MINUS", "x":13, "y":0},
|
||||
{"label":"EQUAL", "x":14, "y":0},
|
||||
{"label":"BACKSPACE", "x":15, "y":0, "w":2},
|
||||
{"label":"DELETE", "x":17, "y":0},
|
||||
{"label":"F3", "x":0, "y":1},
|
||||
{"label":"F4", "x":1, "y":1},
|
||||
{"label":"TAB", "x":2, "y":1, "w":1.5},
|
||||
{"label":"Q", "x":3.5, "y":1},
|
||||
{"label":"W", "x":4.5, "y":1},
|
||||
{"label":"E", "x":5.5, "y":1},
|
||||
{"label":"R", "x":6.5, "y":1},
|
||||
{"label":"T", "x":7.5, "y":1},
|
||||
{"label":"Y", "x":8.5, "y":1},
|
||||
{"label":"U", "x":9.5, "y":1},
|
||||
{"label":"I", "x":10.5, "y":1},
|
||||
{"label":"O", "x":11.5, "y":1},
|
||||
{"label":"P", "x":12.5, "y":1},
|
||||
{"label":"LBRACKET", "x":13.5, "y":1},
|
||||
{"label":"RBRACKET", "x":14.5, "y":1},
|
||||
{"label":"BACKSLASH", "x":15.5, "y":1, "w":1.5},
|
||||
{"label":"PAGEUP", "x":17, "y":1},
|
||||
{"label":"F5", "x":0, "y":2},
|
||||
{"label":"F6", "x":1, "y":2},
|
||||
{"label":"CAPSLOCK", "x":2, "y":2, "w":1.75},
|
||||
{"label":"A", "x":3.75, "y":2},
|
||||
{"label":"S", "x":4.75, "y":2},
|
||||
{"label":"D", "x":5.75, "y":2},
|
||||
{"label":"F", "x":6.75, "y":2},
|
||||
{"label":"G", "x":7.75, "y":2},
|
||||
{"label":"H", "x":8.75, "y":2},
|
||||
{"label":"J", "x":9.75, "y":2},
|
||||
{"label":"K", "x":10.75, "y":2},
|
||||
{"label":"L", "x":11.75, "y":2},
|
||||
{"label":"SEMICOLON", "x":12.75, "y":2},
|
||||
{"label":"QUOTE", "x":13.75, "y":2},
|
||||
{"label":"ENTER", "x":14.75, "y":2, "w":2.25},
|
||||
{"label":"PAGEDOWN", "x":17, "y":2},
|
||||
{"label":"F7", "x":0, "y":3},
|
||||
{"label":"F8", "x":1, "y":3},
|
||||
{"label":"LSHIFT", "x":2, "y":3, "w":2.25},
|
||||
{"label":"Z", "x":4.25, "y":3},
|
||||
{"label":"X", "x":5.25, "y":3},
|
||||
{"label":"C", "x":6.25, "y":3},
|
||||
{"label":"V", "x":7.25, "y":3},
|
||||
{"label":"B", "x":8.25, "y":3},
|
||||
{"label":"N", "x":9.25, "y":3},
|
||||
{"label":"M", "x":10.25, "y":3},
|
||||
{"label":"COMMA", "x":11.25, "y":3},
|
||||
{"label":"PERIOD", "x":12.25, "y":3},
|
||||
{"label":"SLASH", "x":13.25, "y":3},
|
||||
{"label":"RSHIFT", "x":14.25, "y":3, "w":1.75},
|
||||
{"label":"UP", "x":16, "y":3},
|
||||
{"label":"END", "x":17, "y":3},
|
||||
{"label":"F9", "x":0, "y":4},
|
||||
{"label":"F10", "x":1, "y":4},
|
||||
{"label":"LCTRL", "x":2, "y":4, "w":1.25},
|
||||
{"label":"LGUI", "x":3.25, "y":4, "w":1.25},
|
||||
{"label":"LALT", "x":4.5, "y":4, "w":1.25},
|
||||
{"label":"SPACE", "x":5.75, "y":4, "w":6.25},
|
||||
{"label":"RALT", "x":12, "y":4},
|
||||
{"label":"FN", "x":13, "y":4},
|
||||
{"label":"RCTRL", "x":14, "y":4},
|
||||
{"label":"LEFT", "x":15, "y":4},
|
||||
{"label":"DOWN", "x":16, "y":4},
|
||||
{"label":"RIGHT", "x":17, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#ifndef S60PLUS_H
|
||||
#define S60PLUS_H
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
@@ -20,4 +19,3 @@
|
||||
void matrix_init_user(void);
|
||||
void matrix_scan_user(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, DE_PLUS, \
|
||||
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_OE, DE_AE, DE_HASH, KC_ENT, \
|
||||
KC_LSFT, DE_LESS, DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT, KC_DELETE, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, DE_ALGR, KC_RGUI, KC_APP, KC_RCTL),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_ALGR, KC_RGUI, KC_APP, KC_RCTL),
|
||||
|
||||
|
||||
/* Keymap _FNK: Function Keys
|
||||
|
||||
61
keyboards/skog/README.md
Normal file
61
keyboards/skog/README.md
Normal file
@@ -0,0 +1,61 @@
|
||||
Skog TKL by Percent
|
||||
==========================
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: Skog PCB
|
||||
Hardware Availability: https://geekhack.org/index.php?topic=87953.0
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make skog:default
|
||||
|
||||
## Setting the board to bootloader mode
|
||||
|
||||
If you're lucky, the programming script does this automagically for you. If
|
||||
however this doesn't work for you, you need to enter the bootloader mode manually
|
||||
by plugging the keyboard in while holding the bootloader key. If you did this
|
||||
correctly the LEDs will blink and you'll be able to flash your firmware.
|
||||
|
||||
The bootloader key is in the top-right (Pause).
|
||||
|
||||
## Flashing
|
||||
|
||||
ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
|
||||
|
||||
Windows:
|
||||
1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
|
||||
2. Place your keyboard into reset.
|
||||
3. Press the `Find Device` button and ensure that your keyboard is found.
|
||||
4. Press the `Open .hex File` button and locate the `.hex` file you created.
|
||||
5. Press the `Flash Device` button and wait for the process to complete.
|
||||
|
||||
macOS:
|
||||
1. Install homebrew by typing the following:
|
||||
```
|
||||
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||
```
|
||||
2. Install `crosspack-avr`.
|
||||
```
|
||||
brew cask install crosspack-avr
|
||||
```
|
||||
3. Install the following packages:
|
||||
```
|
||||
brew install python
|
||||
brew install pyusb
|
||||
brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
|
||||
|
||||
4. Place your keyboard into reset.
|
||||
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
|
||||
|
||||
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).
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
From my experience, it's really hard to brick these boards. But these
|
||||
tricks have been useful when it got stuck in a weird scenario.
|
||||
|
||||
1. Try plugging the board in while holding the bootloader key. This will force
|
||||
it to boot only the bootloader without loading the firmware. Once this is
|
||||
done, just reflash the board with the original firmware.
|
||||
2. Sometimes USB hubs can act weird, so try connecting the board directly
|
||||
to your computer or plugging/unplugging the USB hub.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user