Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b034896cd3 | ||
|
2bd625b754 | ||
|
da32068f48 | ||
|
b308d6709e | ||
|
123ad0de95 | ||
|
00fc38435f | ||
|
8b5b41bb47 | ||
|
4bdde668e1 | ||
|
3c0d86eb47 | ||
|
f60166c1a1 | ||
|
7d59f83b2e | ||
|
be81cd8c98 | ||
|
b075df1c87 | ||
|
8a91aa5e6c | ||
|
fae437cfad | ||
|
fc91bf4a65 | ||
|
78ea99d154 | ||
|
2165f9d654 | ||
|
31df12c84f | ||
|
d09d9f32bd | ||
|
690a08cbbb |
1
.gitmodules
vendored
1
.gitmodules
vendored
@@ -1,6 +1,7 @@
|
||||
[submodule "lib/chibios"]
|
||||
path = lib/chibios
|
||||
url = https://github.com/qmk/ChibiOS
|
||||
branch = handwire
|
||||
[submodule "lib/chibios-contrib"]
|
||||
path = lib/chibios-contrib
|
||||
url = https://github.com/qmk/ChibiOS-Contrib
|
||||
|
@@ -20,6 +20,12 @@ SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||
SERIAL_DEFS += -DSERIAL_LINK_ENABLE
|
||||
COMMON_VPATH += $(SERIAL_PATH)
|
||||
|
||||
ifeq ($(PLATFORM),AVR)
|
||||
COMMON_VPATH += $(DRIVER_PATH)/avr
|
||||
else
|
||||
COMMON_VPATH += $(DRIVER_PATH)/arm
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
||||
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
||||
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
||||
@@ -184,6 +190,11 @@ ifeq ($(strip $(USB_HID_ENABLE)), yes)
|
||||
include $(TMK_DIR)/protocol/usb_hid.mk
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(I2C_SLAVE_ENABLE)), yes)
|
||||
SRC += twi2c.c
|
||||
OPT_DEFS += -DI2C_SLAVE_ENABLE
|
||||
endif
|
||||
|
||||
QUANTUM_SRC:= \
|
||||
$(QUANTUM_DIR)/quantum.c \
|
||||
$(QUANTUM_DIR)/keymap_common.c \
|
||||
|
@@ -27,38 +27,3 @@ Shortcuts for bootmagic options. You can use these even when bootmagic is off.
|
||||
|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
|
||||
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Left Alt and GUI |
|
||||
|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
|
||||
|
||||
|
||||
## Bootmagc Hotkeys
|
||||
|
||||
Use this by holding the SPACEBAR and the documented key while
|
||||
plugging in the USB connection. e.g. to get into bootloader mode
|
||||
hold `SPACE` and `B` while plugging in USB.
|
||||
|
||||
|
||||
|Key |Description |
|
||||
|-----------|------------------------------------------------------------------------|
|
||||
|`ESC` | Skip bootmagic and saved eeprom configuration |
|
||||
|`B` | Enter bootloader instead of firmware |
|
||||
|`BACKSPACE`| Clear the saved settings from flash |
|
||||
|`LCTRL` | Swap `Control` and `Capslock` and save into flash |
|
||||
|`CAPSLOCK` | Swap `Capslock` and `Control` and save into flash |
|
||||
|`LALT` | Swap Left `Alt` and `GUI` and save into flash, e.g. for OSX Opt and Cmd|
|
||||
|`RALT` | Swap Right `Alt` and `GUI` and save into flash |
|
||||
|`LGUI` | Disable GUI key - e.g. disable Windows key during gaming |
|
||||
|`GRAVE` | Swap ' and `ESC` and save into flash |
|
||||
|`BACKSLASH`| Swap Blackslash and Backspace and save into flash |
|
||||
|`N` | Enable NKRO (N Key Roll Over) |
|
||||
|`0` | Make Layer 0 the default layer at bootup, e.g. switch to dvorak |
|
||||
|`1` | Make Layer 1 the default layer at bootup |
|
||||
|`2` | Make Layer 2 the default layer at bootup |
|
||||
|`3` | Make Layer 3 the default layer at bootup |
|
||||
|`4` | Make Layer 4 the default layer at bootup |
|
||||
|`5` | Make Layer 5 the default layer at bootup |
|
||||
|`6` | Make Layer 6 the default layer at bootup |
|
||||
|`7` | Make Layer 7 the default layer at bootup |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -37,7 +37,6 @@ Debian / Ubuntu example:
|
||||
sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
|
||||
|
||||
Fedora / Red Hat example:
|
||||
|
||||
sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs arm-none-eabi-binutils-cs arm-none-eabi-newlib
|
||||
|
||||
## Nix
|
||||
@@ -132,7 +131,7 @@ docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasqu
|
||||
On Windows Docker seems to have issues with the VOLUME tag in Dockerfile, and `$('pwd')` won't print a Windows compliant path; use full path instead, like this:
|
||||
|
||||
```bash
|
||||
docker run -e keymap=default -e keyboard=ergodox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
|
||||
docker run -e keymap=default -e keyboard=ergobox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
|
||||
|
||||
```
|
||||
|
||||
|
219
drivers/arm/twi2c.c
Normal file
219
drivers/arm/twi2c.c
Normal file
@@ -0,0 +1,219 @@
|
||||
/* Copyright 2018 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/>.
|
||||
*/
|
||||
|
||||
#include "twi2c.h"
|
||||
#include <string.h>
|
||||
#include <hal.h>
|
||||
#include "hal_i2cslave.h"
|
||||
#include "chprintf.h"
|
||||
#include "memstreams.h"
|
||||
#include "printf.h"
|
||||
#include "matrix.h"
|
||||
|
||||
/**
|
||||
* I2C slave test routine.
|
||||
*
|
||||
* To use: Add file to a project, call startComms() with the address of a serial stream
|
||||
*
|
||||
* There are two different responses:
|
||||
* a) A read-only transaction - returns the "Initial Reply" message
|
||||
* b) A write then read transaction - calls a message processor and returns the generated reply.
|
||||
* Stretches clock until reply available.
|
||||
*/
|
||||
// static const I2CConfig masterI2CConfig = {
|
||||
// 400000
|
||||
// };
|
||||
|
||||
I2CSlaveMsgCB twi2c_slave_message_process, catchError, clearAfterSend;
|
||||
|
||||
static const I2CConfig slaveI2CConfig = {
|
||||
STM32_TIMINGR_PRESC(15U) |
|
||||
STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) |
|
||||
STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(21U),
|
||||
0,
|
||||
0,
|
||||
NULL
|
||||
};
|
||||
|
||||
char initialReplyBody[50] = "Initial reply"; // 'Status' response if read without preceding write
|
||||
|
||||
|
||||
uint32_t messageCounter = 0; /* Counts number of messages received to return as part of response */
|
||||
|
||||
uint8_t rxBody[2]; /* stores last message master sent us (intentionally a few bytes smaller than txBody) */
|
||||
uint8_t txBody[MATRIX_ROWS/2]; /* Return message buffer for computed replies */
|
||||
|
||||
BaseSequentialStream *chp = NULL; // Used for serial logging
|
||||
|
||||
// Handler when something sent to us
|
||||
const I2CSlaveMsg echoRx =
|
||||
{
|
||||
sizeof(rxBody), /* max sizeof received msg body */
|
||||
rxBody, /* body of received msg */
|
||||
NULL, /* do nothing on address match */
|
||||
twi2c_slave_message_process, /* Routine to process received messages */
|
||||
catchError /* Error hook */
|
||||
};
|
||||
|
||||
|
||||
// // 'Empty' reply when nothing to say, and no message received. In RAM, to allow update
|
||||
I2CSlaveMsg initialReply =
|
||||
{
|
||||
sizeof(initialReplyBody), /* trailing zero byte will be repeated as needed */
|
||||
(uint8_t *)initialReplyBody,
|
||||
NULL, /* do nothing on address match */
|
||||
NULL, /* do nothing after reply sent */
|
||||
catchError /* Error hook */
|
||||
};
|
||||
|
||||
// // 'Empty' reply when nothing to say, and no message received. In RAM, to allow update
|
||||
// I2CSlaveMsg initialReply =
|
||||
// {
|
||||
// 0, /* trailing zero byte will be repeated as needed */
|
||||
// NULL,
|
||||
// NULL, /* do nothing on address match */
|
||||
// NULL, /* do nothing after reply sent */
|
||||
// catchError /* Error hook */
|
||||
// };
|
||||
|
||||
|
||||
// Response to received messages
|
||||
I2CSlaveMsg echoReply = { /* this is in RAM so size may be updated */
|
||||
MATRIX_ROWS / 2, /* filled in with the length of the message to send */
|
||||
txBody, /* Response message */
|
||||
NULL, /* do nothing special on address match */
|
||||
clearAfterSend, /* Clear receive buffer once replied */
|
||||
catchError /* Error hook */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Track I2C errors
|
||||
*/
|
||||
uint8_t gotI2cError = 0;
|
||||
uint32_t lastI2cErrorFlags = 0;
|
||||
|
||||
// Called from ISR to log error
|
||||
void noteI2cError(uint32_t flags)
|
||||
{
|
||||
lastI2cErrorFlags = flags;
|
||||
gotI2cError = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Generic error handler
|
||||
*
|
||||
* Called in interrupt context, so need to watch what we do
|
||||
*/
|
||||
void catchError(I2CDriver *i2cp)
|
||||
{
|
||||
noteI2cError(i2cp->errors);
|
||||
}
|
||||
|
||||
extern void matrix_copy(matrix_row_t * copy);
|
||||
|
||||
const char hexString[16] = "0123456789abcdef";
|
||||
|
||||
/**
|
||||
* Message processor - looks at received message, determines reply as quickly as possible
|
||||
*
|
||||
* Responds with the value of the messageCounter (in hex), followed by the received message in [..]
|
||||
*
|
||||
* Note: Called in interrupt context, so need to be quick!
|
||||
*/
|
||||
void twi2c_slave_message_process(I2CDriver *i2cp) {
|
||||
|
||||
// size_t len = i2cSlaveBytes(i2cp); // Number of bytes received
|
||||
|
||||
// memset(txBody, 0, MATRIX_ROWS / 2 * sizeof(matrix_row_t));
|
||||
matrix_copy(txBody);
|
||||
|
||||
echoReply.size = MATRIX_ROWS / 2;
|
||||
i2cSlaveReplyI(i2cp, &echoReply);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Callback after sending of response complete - restores default reply in case polled
|
||||
*/
|
||||
void clearAfterSend(I2CDriver *i2cp)
|
||||
{
|
||||
// echoReply.size = 0; // Clear receive message
|
||||
// i2cSlaveReplyI(i2cp, &initialReply);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Start the I2C Slave port to accept comms from master CPU
|
||||
*
|
||||
* We then go into a loop checking for errors, and never return
|
||||
*/
|
||||
|
||||
void twi2c_slave_init(void) {
|
||||
|
||||
palSetGroupMode(GPIOB,8,9, PAL_MODE_INPUT); // Try releasing special pins for a short time
|
||||
chThdSleepMilliseconds(10);
|
||||
|
||||
/* I2C1 SCL on PF1, SDA on PF0 */
|
||||
palSetPadMode(GPIOB, 9, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
|
||||
palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
|
||||
|
||||
|
||||
i2cStart(&I2C_DRIVER, &slaveI2CConfig);
|
||||
#if HAL_USE_I2C_SLAVE
|
||||
I2C_DRIVER.slaveTimeout = MS2ST(100); // Time for complete message
|
||||
#endif
|
||||
|
||||
// i2cSlaveConfigure(&I2C_DRIVER, &echoRx, &initialReply);
|
||||
|
||||
memset(txBody, 0, MATRIX_ROWS / 2 * sizeof(matrix_row_t));
|
||||
|
||||
i2cSlaveConfigure(&I2C_DRIVER, &echoRx, &echoReply);
|
||||
|
||||
// Enable match address after everything else set up
|
||||
i2cMatchAddress(&I2C_DRIVER, slaveI2Caddress/2);
|
||||
// i2cMatchAddress(&I2C_DRIVER, myOtherI2Caddress/2);
|
||||
// i2cMatchAddress(&I2C_DRIVER, 0); /* "all call" */
|
||||
|
||||
printf("Slave I2C started\n\r");
|
||||
|
||||
}
|
||||
|
||||
void twi2c_slave_task(void) {
|
||||
if (gotI2cError) {
|
||||
gotI2cError = 0;
|
||||
printf("I2cError: %04x\r\n", lastI2cErrorFlags);
|
||||
}
|
||||
}
|
||||
|
||||
void twi2c_master_init(void) {
|
||||
|
||||
palSetGroupMode(GPIOB,8,9, PAL_MODE_INPUT); // Try releasing special pins for a short time
|
||||
chThdSleepMilliseconds(10);
|
||||
|
||||
palSetPadMode(GPIOB, 9, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
|
||||
palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP);
|
||||
|
||||
i2cStart(&I2C_DRIVER, &slaveI2CConfig);
|
||||
|
||||
// try high drive (from kiibohd)
|
||||
// I2C_DRIVER.i2c->C2 |= I2Cx_C2_HDRS;
|
||||
// try glitch fixing (from kiibohd)
|
||||
// I2C_DRIVER.i2c->FLT = 4;
|
||||
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2017 Cole Markham, WoodKeys.click
|
||||
/* Copyright 2018 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
|
||||
@@ -14,22 +14,18 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
#define MUSIC_MASK (keycode != KC_NO)
|
||||
#define C6_AUDIO
|
||||
#ifdef AUDIO_ENABLE
|
||||
#define STARTUP_SONG SONG(PLANCK_SOUND)
|
||||
// #define STARTUP_SONG SONG(NO_SOUND)
|
||||
|
||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||
SONG(COLEMAK_SOUND), \
|
||||
SONG(DVORAK_SOUND) \
|
||||
}
|
||||
#ifndef I2C_DRIVER
|
||||
#define I2C_DRIVER I2CD1
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#define slaveI2Caddress 0x30 /* Address in our terms - halved by later code */
|
||||
//#define myOtherI2Caddress 0x19
|
||||
|
||||
I2CSlaveMsgCB twi2c_slave_message_process, catchError, clearAfterSend;
|
||||
|
||||
void twi2c_slave_init(void);
|
||||
|
||||
void twi2c_master_init(void);
|
25
keyboards/_qmk_handwire/_qmk_handwire.c
Normal file
25
keyboards/_qmk_handwire/_qmk_handwire.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/* Copyright 2017 skully <skullydazed@gmail.com>
|
||||
* 2018 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/>.
|
||||
*/
|
||||
#include "_qmk_handwire.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
|
||||
}
|
59
keyboards/_qmk_handwire/_qmk_handwire.h
Normal file
59
keyboards/_qmk_handwire/_qmk_handwire.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* Copyright 2017 skully <skullydazed@gmail.com>
|
||||
* 2018 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/>.
|
||||
*/
|
||||
#ifndef QMK_HANDWIRE_H
|
||||
#define QMK_HANDWIRE_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
/*
|
||||
* These are shortcuts to help you work with the various layout options. If your
|
||||
* keymap works with one of the LAYOUT_...() macros you are encouraged to use that
|
||||
* and to contribute your keymap to the corresponding layout in
|
||||
* `qmk_firmware/layouts/community`.
|
||||
*/
|
||||
|
||||
/* The fully-featured KEYMAP() that has every single key available in the matrix.
|
||||
*/
|
||||
#define KEYMAP(\
|
||||
j00, j01, j02, j03, j04, j05, j06, \
|
||||
j10, j11, j12, j13, j14, j15, j16, \
|
||||
j20, j21, j22, j23, j24, j25, j26, \
|
||||
j30, j31, j32, j33, j34, j35, \
|
||||
j40, j41, j42, j43, j44, \
|
||||
j54, j55, j56, \
|
||||
k00, k01, k02, k03, k04, k05, k06, \
|
||||
k10, k11, k12, k13, k14, k15, k16, \
|
||||
k20, k21, k22, k23, k24, k25, k26, \
|
||||
k31, k32, k33, k34, k35, k36, \
|
||||
k42, k43, k44, k45, k46, \
|
||||
k50, k51, k52 \
|
||||
) { \
|
||||
{ j00, j01, j02, j03, j04, j05, j06 }, \
|
||||
{ j10, j11, j12, j13, j14, j15, j16 }, \
|
||||
{ j20, j21, j22, j23, j24, j25, j26 }, \
|
||||
{ j30, j31, j32, j33, j34, j35, 0 }, \
|
||||
{ j40, j41, j42, j43, j44, 0, 0 }, \
|
||||
{ 0, 0, 0, 0, j54, j55, j56 }, \
|
||||
{ k00, k01, k02, k03, k04, k05, k06 }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16 }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26 }, \
|
||||
{ 0, k31, k32, k33, k34, k35, k36 }, \
|
||||
{ 0, 0, k42, k43, k44, k45, k46 }, \
|
||||
{ k50, k51, k52, 0, 0, 0, 0 } \
|
||||
}
|
||||
|
||||
#endif
|
126
keyboards/_qmk_handwire/boards/GENERIC_STM32_F303XC/board.c
Normal file
126
keyboards/_qmk_handwire/boards/GENERIC_STM32_F303XC/board.c
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#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_SDC || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief SDC card detection.
|
||||
*/
|
||||
bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
|
||||
|
||||
(void)sdcp;
|
||||
/* TODO: Fill the implementation.*/
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SDC card write protection detection.
|
||||
*/
|
||||
bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
|
||||
|
||||
(void)sdcp;
|
||||
/* TODO: Fill the implementation.*/
|
||||
return false;
|
||||
}
|
||||
#endif /* HAL_USE_SDC */
|
||||
|
||||
#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) {
|
||||
}
|
1187
keyboards/_qmk_handwire/boards/GENERIC_STM32_F303XC/board.h
Normal file
1187
keyboards/_qmk_handwire/boards/GENERIC_STM32_F303XC/board.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
# List of all the board related files.
|
||||
BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
|
||||
|
||||
# Required include directories
|
||||
BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
|
7
keyboards/_qmk_handwire/bootloader_defs.h
Normal file
7
keyboards/_qmk_handwire/bootloader_defs.h
Normal file
@@ -0,0 +1,7 @@
|
||||
/* Address for jumping to bootloader on STM32 chips. */
|
||||
/* It is chip dependent, the correct number can be looked up here:
|
||||
* http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
|
||||
* This also requires a patch to chibios:
|
||||
* <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
|
||||
*/
|
||||
#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
|
520
keyboards/_qmk_handwire/chconf.h
Normal file
520
keyboards/_qmk_handwire/chconf.h
Normal file
@@ -0,0 +1,520 @@
|
||||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file templates/chconf.h
|
||||
* @brief Configuration file template.
|
||||
* @details A copy of this file must be placed in each project directory, it
|
||||
* contains the application specific kernel settings.
|
||||
*
|
||||
* @addtogroup config
|
||||
* @details Kernel related settings and hooks.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef CHCONF_H
|
||||
#define CHCONF_H
|
||||
|
||||
#define _CHIBIOS_RT_CONF_
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name System timers settings
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief System time counter resolution.
|
||||
* @note Allowed values are 16 or 32 bits.
|
||||
*/
|
||||
#define CH_CFG_ST_RESOLUTION 32
|
||||
|
||||
/**
|
||||
* @brief System tick frequency.
|
||||
* @details Frequency of the system timer that drives the system ticks. This
|
||||
* setting also defines the system tick time unit.
|
||||
*/
|
||||
#define CH_CFG_ST_FREQUENCY 10000
|
||||
|
||||
/**
|
||||
* @brief Time delta constant for the tick-less mode.
|
||||
* @note If this value is zero then the system uses the classic
|
||||
* periodic tick. This value represents the minimum number
|
||||
* of ticks that is safe to specify in a timeout directive.
|
||||
* The value one is not valid, timeouts are rounded up to
|
||||
* this value.
|
||||
*/
|
||||
#define CH_CFG_ST_TIMEDELTA 2
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name Kernel parameters and options
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Round robin interval.
|
||||
* @details This constant is the number of system ticks allowed for the
|
||||
* threads before preemption occurs. Setting this value to zero
|
||||
* disables the preemption for threads with equal priority and the
|
||||
* round robin becomes cooperative. Note that higher priority
|
||||
* threads can still preempt, the kernel is always preemptive.
|
||||
* @note Disabling the round robin preemption makes the kernel more compact
|
||||
* and generally faster.
|
||||
* @note The round robin preemption is not supported in tickless mode and
|
||||
* must be set to zero in that case.
|
||||
*/
|
||||
#define CH_CFG_TIME_QUANTUM 0
|
||||
|
||||
/**
|
||||
* @brief Managed RAM size.
|
||||
* @details Size of the RAM area to be managed by the OS. If set to zero
|
||||
* then the whole available RAM is used. The core memory is made
|
||||
* available to the heap allocator and/or can be used directly through
|
||||
* the simplified core memory allocator.
|
||||
*
|
||||
* @note In order to let the OS manage the whole RAM the linker script must
|
||||
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||
*/
|
||||
#define CH_CFG_MEMCORE_SIZE 0
|
||||
|
||||
/**
|
||||
* @brief Idle thread automatic spawn suppression.
|
||||
* @details When this option is activated the function @p chSysInit()
|
||||
* does not spawn the idle thread. The application @p main()
|
||||
* function becomes the idle thread and must implement an
|
||||
* infinite loop.
|
||||
*/
|
||||
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name Performance options
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief OS optimization.
|
||||
* @details If enabled then time efficient rather than space efficient code
|
||||
* is used when two possible implementations exist.
|
||||
*
|
||||
* @note This is not related to the compiler optimization options.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name Subsystem options
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Time Measurement APIs.
|
||||
* @details If enabled then the time measurement APIs are included in
|
||||
* the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_TM TRUE
|
||||
|
||||
/**
|
||||
* @brief Threads registry APIs.
|
||||
* @details If enabled then the registry APIs are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_REGISTRY TRUE
|
||||
|
||||
/**
|
||||
* @brief Threads synchronization APIs.
|
||||
* @details If enabled then the @p chThdWait() function is included in
|
||||
* the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_WAITEXIT TRUE
|
||||
|
||||
/**
|
||||
* @brief Semaphores APIs.
|
||||
* @details If enabled then the Semaphores APIs are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||
|
||||
/**
|
||||
* @brief Semaphores queuing mode.
|
||||
* @details If enabled then the threads are enqueued on semaphores by
|
||||
* priority rather than in FIFO order.
|
||||
*
|
||||
* @note The default is @p FALSE. Enable this if you have special
|
||||
* requirements.
|
||||
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||
*/
|
||||
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
|
||||
|
||||
/**
|
||||
* @brief Mutexes APIs.
|
||||
* @details If enabled then the mutexes APIs are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_MUTEXES TRUE
|
||||
|
||||
/**
|
||||
* @brief Enables recursive behavior on mutexes.
|
||||
* @note Recursive mutexes are heavier and have an increased
|
||||
* memory footprint.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||
*/
|
||||
#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
|
||||
|
||||
/**
|
||||
* @brief Conditional Variables APIs.
|
||||
* @details If enabled then the conditional variables APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||
*/
|
||||
#define CH_CFG_USE_CONDVARS TRUE
|
||||
|
||||
/**
|
||||
* @brief Conditional Variables APIs with timeout.
|
||||
* @details If enabled then the conditional variables APIs with timeout
|
||||
* specification are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||
*/
|
||||
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||
|
||||
/**
|
||||
* @brief Events Flags APIs.
|
||||
* @details If enabled then the event flags APIs are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_EVENTS TRUE
|
||||
|
||||
/**
|
||||
* @brief Events Flags APIs with timeout.
|
||||
* @details If enabled then the events APIs with timeout specification
|
||||
* are included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||
*/
|
||||
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||
|
||||
/**
|
||||
* @brief Synchronous Messages APIs.
|
||||
* @details If enabled then the synchronous messages APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_MESSAGES TRUE
|
||||
|
||||
/**
|
||||
* @brief Synchronous Messages queuing mode.
|
||||
* @details If enabled then messages are served by priority rather than in
|
||||
* FIFO order.
|
||||
*
|
||||
* @note The default is @p FALSE. Enable this if you have special
|
||||
* requirements.
|
||||
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||
*/
|
||||
#define CH_CFG_USE_MESSAGES_PRIORITY TRUE
|
||||
|
||||
/**
|
||||
* @brief Mailboxes APIs.
|
||||
* @details If enabled then the asynchronous messages (mailboxes) APIs are
|
||||
* included in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||
*/
|
||||
#define CH_CFG_USE_MAILBOXES TRUE
|
||||
|
||||
/**
|
||||
* @brief Core Memory Manager APIs.
|
||||
* @details If enabled then the core memory manager APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_MEMCORE TRUE
|
||||
|
||||
/**
|
||||
* @brief Heap Allocator APIs.
|
||||
* @details If enabled then the memory heap allocator APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||
* @p CH_CFG_USE_SEMAPHORES.
|
||||
* @note Mutexes are recommended.
|
||||
*/
|
||||
#define CH_CFG_USE_HEAP TRUE
|
||||
|
||||
/**
|
||||
* @brief Memory Pools Allocator APIs.
|
||||
* @details If enabled then the memory pools allocator APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||
|
||||
/**
|
||||
* @brief Dynamic Threads APIs.
|
||||
* @details If enabled then the dynamic threads creation APIs are included
|
||||
* in the kernel.
|
||||
*
|
||||
* @note The default is @p TRUE.
|
||||
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||
*/
|
||||
#define CH_CFG_USE_DYNAMIC TRUE
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name Debug options
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Debug option, kernel statistics.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#define CH_DBG_STATISTICS FALSE
|
||||
|
||||
/**
|
||||
* @brief Debug option, system state check.
|
||||
* @details If enabled the correct call protocol for system APIs is checked
|
||||
* at runtime.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#define CH_DBG_SYSTEM_STATE_CHECK FALSE
|
||||
|
||||
/**
|
||||
* @brief Debug option, parameters checks.
|
||||
* @details If enabled then the checks on the API functions input
|
||||
* parameters are activated.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#define CH_DBG_ENABLE_CHECKS FALSE
|
||||
|
||||
/**
|
||||
* @brief Debug option, consistency checks.
|
||||
* @details If enabled then all the assertions in the kernel code are
|
||||
* activated. This includes consistency checks inside the kernel,
|
||||
* runtime anomalies and port-defined checks.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#define CH_DBG_ENABLE_ASSERTS FALSE
|
||||
|
||||
/**
|
||||
* @brief Debug option, trace buffer.
|
||||
* @details If enabled then the trace buffer is activated.
|
||||
*
|
||||
* @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
|
||||
*/
|
||||
#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
|
||||
|
||||
/**
|
||||
* @brief Trace buffer entries.
|
||||
* @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
|
||||
* different from @p CH_DBG_TRACE_MASK_DISABLED.
|
||||
*/
|
||||
#define CH_DBG_TRACE_BUFFER_SIZE 128
|
||||
|
||||
/**
|
||||
* @brief Debug option, stack checks.
|
||||
* @details If enabled then a runtime stack check is performed.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
* @note The stack check is performed in a architecture/port dependent way.
|
||||
* It may not be implemented or some ports.
|
||||
* @note The default failure mode is to halt the system with the global
|
||||
* @p panic_msg variable set to @p NULL.
|
||||
*/
|
||||
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
||||
|
||||
/**
|
||||
* @brief Debug option, stacks initialization.
|
||||
* @details If enabled then the threads working area is filled with a byte
|
||||
* value when a thread is created. This can be useful for the
|
||||
* runtime measurement of the used stack.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
*/
|
||||
#define CH_DBG_FILL_THREADS FALSE
|
||||
|
||||
/**
|
||||
* @brief Debug option, threads profiling.
|
||||
* @details If enabled then a field is added to the @p thread_t structure that
|
||||
* counts the system ticks occurred while executing the thread.
|
||||
*
|
||||
* @note The default is @p FALSE.
|
||||
* @note This debug option is not currently compatible with the
|
||||
* tickless mode.
|
||||
*/
|
||||
#define CH_DBG_THREADS_PROFILING FALSE
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/**
|
||||
* @name Kernel hooks
|
||||
* @{
|
||||
*/
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Threads descriptor structure extension.
|
||||
* @details User fields added to the end of the @p thread_t structure.
|
||||
*/
|
||||
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||
/* Add threads custom fields here.*/
|
||||
|
||||
/**
|
||||
* @brief Threads initialization hook.
|
||||
* @details User initialization code added to the @p chThdInit() API.
|
||||
*
|
||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||
* the threads creation APIs.
|
||||
*/
|
||||
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||
/* Add threads initialization code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Threads finalization hook.
|
||||
* @details User finalization code added to the @p chThdExit() API.
|
||||
*/
|
||||
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||
/* Add threads finalization code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Context switch hook.
|
||||
* @details This hook is invoked just before switching between threads.
|
||||
*/
|
||||
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||
/* Context switch code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ISR enter hook.
|
||||
*/
|
||||
#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
|
||||
/* IRQ prologue code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ISR exit hook.
|
||||
*/
|
||||
#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
|
||||
/* IRQ epilogue code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Idle thread enter hook.
|
||||
* @note This hook is invoked within a critical zone, no OS functions
|
||||
* should be invoked from here.
|
||||
* @note This macro can be used to activate a power saving mode.
|
||||
*/
|
||||
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||
/* Idle-enter code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Idle thread leave hook.
|
||||
* @note This hook is invoked within a critical zone, no OS functions
|
||||
* should be invoked from here.
|
||||
* @note This macro can be used to deactivate a power saving mode.
|
||||
*/
|
||||
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||
/* Idle-leave code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Idle Loop hook.
|
||||
* @details This hook is continuously invoked by the idle thread loop.
|
||||
*/
|
||||
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||
/* Idle loop code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System tick event hook.
|
||||
* @details This hook is invoked in the system tick handler immediately
|
||||
* after processing the virtual timers queue.
|
||||
*/
|
||||
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||
/* System tick event code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System halt hook.
|
||||
* @details This hook is invoked in case to a system halting error before
|
||||
* the system is halted.
|
||||
*/
|
||||
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||
/* System halt code here.*/ \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Trace hook.
|
||||
* @details This hook is invoked each time a new record is written in the
|
||||
* trace buffer.
|
||||
*/
|
||||
#define CH_CFG_TRACE_HOOK(tep) { \
|
||||
/* Trace code here.*/ \
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port-specific settings (override port settings defaulted in chcore.h). */
|
||||
/*===========================================================================*/
|
||||
|
||||
#endif /* CHCONF_H */
|
||||
|
||||
/** @} */
|
134
keyboards/_qmk_handwire/config.h
Normal file
134
keyboards/_qmk_handwire/config.h
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright 2017 skully <skullydazed@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/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x125A
|
||||
#define PRODUCT_ID 0x1770
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER QMK
|
||||
#define PRODUCT Handwire
|
||||
#define DESCRIPTION "Handwire protoboard"
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 12
|
||||
#define MATRIX_COLS 7
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
/* Note: These are not used for arm boards. They're here purely as documentation.
|
||||
* #define MATRIX_ROW_PINS { PB0, PB1, PB2, PA15, PA10 }
|
||||
* #define MATRIX_COL_PINS { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC14, PC15, PC13, PB5, PB6 }
|
||||
* #define UNUSED_PINS
|
||||
*/
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 6
|
||||
|
||||
/* Prevent modifiers from being stuck on after layer changes. */
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/* key combination for magic key 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.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/* Backlight configuration
|
||||
*/
|
||||
#define BACKLIGHT_LEVELS 1
|
||||
|
||||
#define NO_USB_STARTUP_CHECK
|
||||
|
||||
#endif
|
||||
|
395
keyboards/_qmk_handwire/halconf.h
Normal file
395
keyboards/_qmk_handwire/halconf.h
Normal file
@@ -0,0 +1,395 @@
|
||||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file templates/halconf.h
|
||||
* @brief HAL configuration header.
|
||||
* @details HAL configuration file, this file allows to enable or disable the
|
||||
* various device drivers from your application. You may also use
|
||||
* this file in order to override the device drivers default settings.
|
||||
*
|
||||
* @addtogroup HAL_CONF
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef HALCONF_H
|
||||
#define HALCONF_H
|
||||
|
||||
#include "mcuconf.h"
|
||||
|
||||
/**
|
||||
* @brief Enables the PAL subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_PAL TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the ADC subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_ADC FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the CAN subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_CAN FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the DAC subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_DAC TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the EXT subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_EXT FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the GPT subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_GPT TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the I2C subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_I2C TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the I2C Slave subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_I2C_SLAVE) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_I2C_SLAVE TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the I2S subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_I2S FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the ICU subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_ICU FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the MAC subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_MAC FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the MMC_SPI subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_MMC_SPI FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the PWM subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_PWM FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the QSPI subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_QSPI FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the RTC subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_RTC FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the SDC subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_SDC FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the SERIAL subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_SERIAL FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the SERIAL over USB subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_SERIAL_USB TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the SPI subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_SPI FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the UART subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_UART FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the USB subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_USB TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the WDG subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_WDG FALSE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* ADC driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables synchronous APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
|
||||
#define ADC_USE_WAIT TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
|
||||
#define ADC_USE_MUTUAL_EXCLUSION TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* CAN driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Sleep mode related APIs inclusion switch.
|
||||
*/
|
||||
#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
|
||||
#define CAN_USE_SLEEP_MODE TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* I2C driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables the mutual exclusion APIs on the I2C bus.
|
||||
*/
|
||||
#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
|
||||
#define I2C_USE_MUTUAL_EXCLUSION TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* MAC driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables an event sources for incoming packets.
|
||||
*/
|
||||
#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
|
||||
#define MAC_USE_ZERO_COPY FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables an event sources for incoming packets.
|
||||
*/
|
||||
#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
|
||||
#define MAC_USE_EVENTS TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* MMC_SPI driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Delays insertions.
|
||||
* @details If enabled this options inserts delays into the MMC waiting
|
||||
* routines releasing some extra CPU time for the threads with
|
||||
* lower priority, this may slow down the driver a bit however.
|
||||
* This option is recommended also if the SPI driver does not
|
||||
* use a DMA channel and heavily loads the CPU.
|
||||
*/
|
||||
#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
|
||||
#define MMC_NICE_WAITING TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* SDC driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of initialization attempts before rejecting the card.
|
||||
* @note Attempts are performed at 10mS intervals.
|
||||
*/
|
||||
#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
|
||||
#define SDC_INIT_RETRY 100
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Include support for MMC cards.
|
||||
* @note MMC support is not yet implemented so this option must be kept
|
||||
* at @p FALSE.
|
||||
*/
|
||||
#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
|
||||
#define SDC_MMC_SUPPORT FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Delays insertions.
|
||||
* @details If enabled this options inserts delays into the MMC waiting
|
||||
* routines releasing some extra CPU time for the threads with
|
||||
* lower priority, this may slow down the driver a bit however.
|
||||
*/
|
||||
#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
|
||||
#define SDC_NICE_WAITING TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* SERIAL driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Default bit rate.
|
||||
* @details Configuration parameter, this is the baud rate selected for the
|
||||
* default configuration.
|
||||
*/
|
||||
#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
|
||||
#define SERIAL_DEFAULT_BITRATE 38400
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Serial buffers size.
|
||||
* @details Configuration parameter, you can change the depth of the queue
|
||||
* buffers depending on the requirements of your application.
|
||||
* @note The default is 16 bytes for both the transmission and receive
|
||||
* buffers.
|
||||
*/
|
||||
#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
|
||||
#define SERIAL_BUFFERS_SIZE 16
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* SERIAL_USB driver related setting. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Serial over USB buffers size.
|
||||
* @details Configuration parameter, the buffer size must be a multiple of
|
||||
* the USB data endpoint maximum packet size.
|
||||
* @note The default is 256 bytes for both the transmission and receive
|
||||
* buffers.
|
||||
*/
|
||||
#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
|
||||
#define SERIAL_USB_BUFFERS_SIZE 256
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Serial over USB number of buffers.
|
||||
* @note The default is 2 buffers.
|
||||
*/
|
||||
#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
|
||||
#define SERIAL_USB_BUFFERS_NUMBER 2
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* SPI driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables synchronous APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
|
||||
#define SPI_USE_WAIT TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
|
||||
#define SPI_USE_MUTUAL_EXCLUSION TRUE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* UART driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables synchronous APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
|
||||
#define UART_USE_WAIT FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
|
||||
#define UART_USE_MUTUAL_EXCLUSION FALSE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* USB driver related settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Enables synchronous APIs.
|
||||
* @note Disabling this option saves both code and data space.
|
||||
*/
|
||||
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
|
||||
#define USB_USE_WAIT TRUE
|
||||
#endif
|
||||
|
||||
#endif /* HALCONF_H */
|
||||
|
||||
/** @} */
|
126
keyboards/_qmk_handwire/keymaps/default/keymap.c
Normal file
126
keyboards/_qmk_handwire/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,126 @@
|
||||
#include "_qmk_handwire.h"
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL,
|
||||
_FL,
|
||||
_CL
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
S_BSKTC = SAFE_RANGE,
|
||||
S_ODEJY,
|
||||
S_RCKBY,
|
||||
S_DOEDR,
|
||||
S_SCALE,
|
||||
S_ONEUP,
|
||||
S_COIN,
|
||||
S_SONIC,
|
||||
S_ZELDA
|
||||
};
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
float song_basketcase[][2] = SONG(BASKET_CASE);
|
||||
float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
|
||||
float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
|
||||
float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
|
||||
float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||
float song_coin[][2] = SONG(COIN_SOUND);
|
||||
float song_one_up[][2] = SONG(ONE_UP_SOUND);
|
||||
float song_sonic_ring[][2] = SONG(SONIC_RING);
|
||||
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
|
||||
#endif
|
||||
|
||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
|
||||
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_END,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_N,
|
||||
KC_NO, KC_LCTL, KC_LALT, KC_LGUI, MO(1),
|
||||
KC_SPC, MO(1), RESET,
|
||||
|
||||
KC_INS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
|
||||
KC_PGDN, KC_H, KC_J, KC_K, KC_L, KC_COLN, KC_QUOT,
|
||||
KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_RCTL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||
RESET, MO(2), KC_SPC
|
||||
)
|
||||
// [0] = KEYMAP(
|
||||
// KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL,
|
||||
// KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_HOME,
|
||||
// KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_END,
|
||||
// KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
||||
// KC_NO, KC_LCTL, KC_LALT, KC_LGUI, MO(1),
|
||||
// KC_SPC, MO(1), RESET,
|
||||
|
||||
// KC_INS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
// KC_PGUP, KC_J, KC_L, KC_U, KC_Y, KC_COLN, KC_DEL,
|
||||
// KC_PGDN, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
// KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
// KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
|
||||
// RESET, MO(2), KC_SPC
|
||||
// )
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case S_BSKTC:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_basketcase);
|
||||
}
|
||||
return false;
|
||||
case S_ODEJY:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_ode_to_joy);
|
||||
}
|
||||
return false;
|
||||
case S_RCKBY:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_rock_a_bye_baby);
|
||||
}
|
||||
return false;
|
||||
case S_DOEDR:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_doe_a_deer);
|
||||
}
|
||||
return false;
|
||||
case S_SCALE:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_scale);
|
||||
}
|
||||
return false;
|
||||
case S_ONEUP:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_one_up);
|
||||
}
|
||||
return false;
|
||||
case S_COIN:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_coin);
|
||||
}
|
||||
return false;
|
||||
case S_SONIC:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_sonic_ring);
|
||||
}
|
||||
return false;
|
||||
case S_ZELDA:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_zelda_puzzle);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
1
keyboards/_qmk_handwire/keymaps/default/readme.md
Normal file
1
keyboards/_qmk_handwire/keymaps/default/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default keymap for clueboard 60%
|
53
keyboards/_qmk_handwire/led.c
Normal file
53
keyboards/_qmk_handwire/led.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 2017 skully <skullydazed@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "hal.h"
|
||||
#include "backlight.h"
|
||||
#include "led.h"
|
||||
#include "printf.h"
|
||||
|
||||
void backlight_init_ports(void) {
|
||||
printf("backlight_init_ports()\n");
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
// palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
// palSetPad(GPIOB, 8);
|
||||
#endif
|
||||
}
|
||||
|
||||
void backlight_set(uint8_t level) {
|
||||
printf("backlight_set(%d)\n", level);
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
if (level == 0) {
|
||||
// Turn backlight off
|
||||
// palSetPad(GPIOB, 8);
|
||||
} else {
|
||||
// Turn backlight on
|
||||
// palClearPad(GPIOB, 8);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
printf("led_set_kb(%d)\n", usb_led);
|
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||
// Turn capslock on
|
||||
// palSetPad(GPIOB, 7);
|
||||
} else {
|
||||
// Turn capslock off
|
||||
// palClearPad(GPIOB, 7);
|
||||
}
|
||||
}
|
222
keyboards/_qmk_handwire/matrix.c
Normal file
222
keyboards/_qmk_handwire/matrix.c
Normal file
@@ -0,0 +1,222 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "hal.h"
|
||||
#include "timer.h"
|
||||
#include "wait.h"
|
||||
#include "printf.h"
|
||||
#include "backlight.h"
|
||||
#include "matrix.h"
|
||||
|
||||
#include "usb_main.h"
|
||||
#include "twi2c.h"
|
||||
|
||||
/* QMK Handwire
|
||||
*
|
||||
* Column pins are input with internal pull-down.
|
||||
* Row pins are output and strobe with high.
|
||||
* Key is high or 1 when it turns on.
|
||||
*
|
||||
* col: { A13, A14, A15, B3, B4, B5, B6 }
|
||||
* row: { B10, B2, B1, B0, A7, A6 }
|
||||
*/
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
static bool debouncing = false;
|
||||
static uint16_t debouncing_time = 0;
|
||||
|
||||
static bool master = false;
|
||||
static bool right_hand = false;
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_user(void) {}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_user(void) {}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_kb(void) {
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
void matrix_init(void) {
|
||||
printf("matrix init\n");
|
||||
// debug_matrix = true;
|
||||
|
||||
// C13 is connected to VCC on the right hand
|
||||
palSetPadMode(GPIOC, 13, PAL_MODE_INPUT);
|
||||
wait_us(20);
|
||||
right_hand = palReadPad(GPIOC, 13);
|
||||
|
||||
// if USB is active, this is the master
|
||||
// master = usbGetDriverStateI(&USB_DRIVER) == USB_ACTIVE;
|
||||
master = right_hand;
|
||||
|
||||
if (master) {
|
||||
twi2c_master_init();
|
||||
} else {
|
||||
twi2c_slave_init();
|
||||
}
|
||||
|
||||
/* Column(sense) */
|
||||
palSetPadMode(GPIOA, 13, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOA, 14, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOA, 15, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOB, 3, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOB, 4, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOB, 5, PAL_MODE_INPUT_PULLDOWN);
|
||||
palSetPadMode(GPIOB, 6, PAL_MODE_INPUT_PULLDOWN);
|
||||
|
||||
/* Row(strobe) */
|
||||
palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||
memset(matrix_debouncing, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||
|
||||
// palClearPad(GPIOB, 7); // Turn off capslock
|
||||
matrix_init_quantum();
|
||||
}
|
||||
|
||||
matrix_row_t matrix_scan_common(uint8_t row) {
|
||||
matrix_row_t data;
|
||||
|
||||
// strobe row { A6, A7, B0, B1, B2, B10 }
|
||||
switch (row) {
|
||||
case 5: palSetPad(GPIOA, 6); break;
|
||||
case 4: palSetPad(GPIOA, 7); break;
|
||||
case 3: palSetPad(GPIOB, 0); break;
|
||||
case 2: palSetPad(GPIOB, 1); break;
|
||||
case 1: palSetPad(GPIOB, 2); break;
|
||||
case 0: palSetPad(GPIOB, 10); break;
|
||||
}
|
||||
|
||||
// need wait to settle pin state
|
||||
wait_us(20);
|
||||
|
||||
// read col data { B6, B5, B4, B3, A15, A14, A13 }
|
||||
data = (
|
||||
(palReadPad(GPIOB, 6) << 6 ) |
|
||||
(palReadPad(GPIOB, 5) << 5 ) |
|
||||
(palReadPad(GPIOB, 4) << 4 ) |
|
||||
(palReadPad(GPIOB, 3) << 3 ) |
|
||||
(palReadPad(GPIOA, 15) << 2 ) |
|
||||
(palReadPad(GPIOA, 14) << 1 ) |
|
||||
(palReadPad(GPIOA, 13) << 0 )
|
||||
);
|
||||
|
||||
// unstrobe row { A6, A7, B0, B1, B2, B10 }
|
||||
switch (row) {
|
||||
case 5: palClearPad(GPIOA, 6); break;
|
||||
case 4: palClearPad(GPIOA, 7); break;
|
||||
case 3: palClearPad(GPIOB, 0); break;
|
||||
case 2: palClearPad(GPIOB, 1); break;
|
||||
case 1: palClearPad(GPIOB, 2); break;
|
||||
case 0: palClearPad(GPIOB, 10); break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
const uint8_t command[2] = { 0x01, 0x00 };
|
||||
uint8_t other_matrix[MATRIX_ROWS] = { 0 };
|
||||
|
||||
void matrix_scan_master(void) {
|
||||
|
||||
msg_t resp;
|
||||
// resp = twi2c_master_send(slaveI2Caddress/2, command, 2, other_matrix, US2ST(100));
|
||||
resp = i2cMasterTransmitTimeout(&I2C_DRIVER, slaveI2Caddress/2, command, 2, other_matrix, MATRIX_ROWS / 2, MS2ST(100));
|
||||
// resp = i2cMasterReceiveTimeout(&I2C_DRIVER, slaveI2Caddress/2, other_matrix, MATRIX_ROWS / 2, US2ST(100));
|
||||
// printf("%x\n", resp);
|
||||
// if (resp != MSG_OK) {
|
||||
// for (i = 0; i < MATRIX_ROWS / 2; i++) {
|
||||
// resp = i2cMasterReceiveTimeout(&I2C_DRIVER, slaveI2Caddress/2, other_matrix, MATRIX_ROWS / 2, US2ST(100));
|
||||
// }
|
||||
// }
|
||||
|
||||
if (resp == MSG_OK) {
|
||||
uint8_t * matrix_pointer;
|
||||
if (right_hand) {
|
||||
matrix_pointer = matrix;
|
||||
} else {
|
||||
matrix_pointer = matrix + (MATRIX_ROWS / 2);
|
||||
}
|
||||
|
||||
memcpy(matrix_pointer, other_matrix, MATRIX_ROWS / 2);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void) {
|
||||
|
||||
for (int row = 0; row < MATRIX_ROWS; row++) {
|
||||
matrix_row_t data = 0;
|
||||
|
||||
if ((right_hand && row >= 6) || (!right_hand && row < 6)) {
|
||||
data = matrix_scan_common(row % 6);
|
||||
}
|
||||
|
||||
if (matrix_debouncing[row] != data) {
|
||||
matrix_debouncing[row] = data;
|
||||
debouncing = true;
|
||||
debouncing_time = timer_read();
|
||||
}
|
||||
}
|
||||
|
||||
if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
|
||||
for (int row = 0; row < MATRIX_ROWS; row++) {
|
||||
matrix[row] = matrix_debouncing[row];
|
||||
}
|
||||
debouncing = false;
|
||||
}
|
||||
|
||||
if (master) {
|
||||
matrix_scan_master();
|
||||
}
|
||||
|
||||
matrix_scan_quantum();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool matrix_is_on(uint8_t row, uint8_t col) {
|
||||
return (matrix[row] & (1<<col));
|
||||
}
|
||||
|
||||
matrix_row_t matrix_get_row(uint8_t row) {
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_copy(matrix_row_t * copy) {
|
||||
uint8_t * matrix_pointer;
|
||||
if (right_hand) {
|
||||
matrix_pointer = matrix + (MATRIX_ROWS / 2);
|
||||
} else {
|
||||
matrix_pointer = matrix;
|
||||
}
|
||||
memcpy(copy, matrix_pointer, MATRIX_ROWS / 2);
|
||||
}
|
||||
|
||||
void matrix_print(void) {
|
||||
printf("\nr/c 01234567\n");
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
printf("%X0: ", row);
|
||||
matrix_row_t data = matrix_get_row(row);
|
||||
for (int col = 0; col < MATRIX_COLS; col++) {
|
||||
if (data & (1<<col))
|
||||
printf("1");
|
||||
else
|
||||
printf("0");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
257
keyboards/_qmk_handwire/mcuconf.h
Normal file
257
keyboards/_qmk_handwire/mcuconf.h
Normal file
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef MCUCONF_H
|
||||
#define MCUCONF_H
|
||||
|
||||
/*
|
||||
* STM32F3xx drivers configuration.
|
||||
* The following settings override the default settings present in
|
||||
* the various device driver implementation headers.
|
||||
* Note that the settings for each driver only have effect if the whole
|
||||
* driver is enabled in halconf.h.
|
||||
*
|
||||
* IRQ priorities:
|
||||
* 15...0 Lowest...Highest.
|
||||
*
|
||||
* DMA priorities:
|
||||
* 0...3 Lowest...Highest.
|
||||
*/
|
||||
|
||||
#define STM32F3xx_MCUCONF
|
||||
|
||||
/*
|
||||
* HAL driver system settings.
|
||||
*/
|
||||
#define STM32_NO_INIT FALSE
|
||||
#define STM32_PVD_ENABLE FALSE
|
||||
#define STM32_PLS STM32_PLS_LEV0
|
||||
#define STM32_HSI_ENABLED TRUE
|
||||
#define STM32_LSI_ENABLED TRUE
|
||||
#define STM32_HSE_ENABLED TRUE
|
||||
#define STM32_LSE_ENABLED FALSE
|
||||
#define STM32_SW STM32_SW_PLL
|
||||
#define STM32_PLLSRC STM32_PLLSRC_HSE
|
||||
#define STM32_PREDIV_VALUE 1
|
||||
#define STM32_PLLMUL_VALUE 9
|
||||
#define STM32_HPRE STM32_HPRE_DIV1
|
||||
#define STM32_PPRE1 STM32_PPRE1_DIV2
|
||||
#define STM32_PPRE2 STM32_PPRE2_DIV2
|
||||
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
|
||||
#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
|
||||
#define STM32_ADC34PRES STM32_ADC34PRES_DIV1
|
||||
#define STM32_USART1SW STM32_USART1SW_PCLK
|
||||
#define STM32_USART2SW STM32_USART2SW_PCLK
|
||||
#define STM32_USART3SW STM32_USART3SW_PCLK
|
||||
#define STM32_UART4SW STM32_UART4SW_PCLK
|
||||
#define STM32_UART5SW STM32_UART5SW_PCLK
|
||||
#define STM32_I2C1SW STM32_I2C1SW_SYSCLK
|
||||
#define STM32_I2C2SW STM32_I2C2SW_SYSCLK
|
||||
#define STM32_TIM1SW STM32_TIM1SW_PCLK2
|
||||
#define STM32_TIM8SW STM32_TIM8SW_PCLK2
|
||||
#define STM32_RTCSEL STM32_RTCSEL_LSI
|
||||
#define STM32_USB_CLOCK_REQUIRED TRUE
|
||||
#define STM32_USBPRE STM32_USBPRE_DIV1P5
|
||||
|
||||
#undef STM32_HSE_BYPASS
|
||||
// #error "oh no"
|
||||
// #endif
|
||||
|
||||
/*
|
||||
* ADC driver system settings.
|
||||
*/
|
||||
#define STM32_ADC_DUAL_MODE FALSE
|
||||
#define STM32_ADC_COMPACT_SAMPLES FALSE
|
||||
#define STM32_ADC_USE_ADC1 FALSE
|
||||
#define STM32_ADC_USE_ADC2 FALSE
|
||||
#define STM32_ADC_USE_ADC3 FALSE
|
||||
#define STM32_ADC_USE_ADC4 FALSE
|
||||
#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
|
||||
#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
|
||||
#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
|
||||
#define STM32_ADC_ADC4_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
|
||||
#define STM32_ADC_ADC1_DMA_PRIORITY 2
|
||||
#define STM32_ADC_ADC2_DMA_PRIORITY 2
|
||||
#define STM32_ADC_ADC3_DMA_PRIORITY 2
|
||||
#define STM32_ADC_ADC4_DMA_PRIORITY 2
|
||||
#define STM32_ADC_ADC12_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC3_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC4_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY 5
|
||||
#define STM32_ADC_ADC12_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
|
||||
#define STM32_ADC_ADC34_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
|
||||
|
||||
/*
|
||||
* CAN driver system settings.
|
||||
*/
|
||||
#define STM32_CAN_USE_CAN1 FALSE
|
||||
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
|
||||
|
||||
/*
|
||||
* DAC driver system settings.
|
||||
*/
|
||||
#define STM32_DAC_DUAL_MODE FALSE
|
||||
#define STM32_DAC_USE_DAC1_CH1 TRUE
|
||||
#define STM32_DAC_USE_DAC1_CH2 TRUE
|
||||
#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
|
||||
#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
|
||||
#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
|
||||
#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
|
||||
|
||||
/*
|
||||
* EXT driver system settings.
|
||||
*/
|
||||
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6
|
||||
#define STM32_EXT_EXTI33_IRQ_PRIORITY 6
|
||||
|
||||
/*
|
||||
* GPT driver system settings.
|
||||
*/
|
||||
#define STM32_GPT_USE_TIM1 FALSE
|
||||
#define STM32_GPT_USE_TIM2 FALSE
|
||||
#define STM32_GPT_USE_TIM3 FALSE
|
||||
#define STM32_GPT_USE_TIM4 FALSE
|
||||
#define STM32_GPT_USE_TIM6 TRUE
|
||||
#define STM32_GPT_USE_TIM7 TRUE
|
||||
#define STM32_GPT_USE_TIM8 TRUE
|
||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM6_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM7_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
|
||||
|
||||
/*
|
||||
* I2C driver system settings.
|
||||
*/
|
||||
#define STM32_I2C_USE_I2C1 TRUE
|
||||
#define STM32_I2C_USE_I2C2 FALSE
|
||||
#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_I2C1_DMA_PRIORITY 1
|
||||
#define STM32_I2C_I2C2_DMA_PRIORITY 1
|
||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||
|
||||
/*
|
||||
* ICU driver system settings.
|
||||
*/
|
||||
#define STM32_ICU_USE_TIM1 FALSE
|
||||
#define STM32_ICU_USE_TIM2 FALSE
|
||||
#define STM32_ICU_USE_TIM3 FALSE
|
||||
#define STM32_ICU_USE_TIM4 FALSE
|
||||
#define STM32_ICU_USE_TIM8 FALSE
|
||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
|
||||
|
||||
/*
|
||||
* PWM driver system settings.
|
||||
*/
|
||||
#define STM32_PWM_USE_ADVANCED FALSE
|
||||
#define STM32_PWM_USE_TIM1 FALSE
|
||||
#define STM32_PWM_USE_TIM2 FALSE
|
||||
#define STM32_PWM_USE_TIM3 FALSE
|
||||
#define STM32_PWM_USE_TIM4 FALSE
|
||||
#define STM32_PWM_USE_TIM8 FALSE
|
||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
|
||||
|
||||
/*
|
||||
* SERIAL driver system settings.
|
||||
*/
|
||||
#define STM32_SERIAL_USE_USART1 FALSE
|
||||
#define STM32_SERIAL_USE_USART2 FALSE
|
||||
#define STM32_SERIAL_USE_USART3 FALSE
|
||||
#define STM32_SERIAL_USE_UART4 FALSE
|
||||
#define STM32_SERIAL_USE_UART5 FALSE
|
||||
#define STM32_SERIAL_USART1_PRIORITY 12
|
||||
#define STM32_SERIAL_USART2_PRIORITY 12
|
||||
#define STM32_SERIAL_USART3_PRIORITY 12
|
||||
#define STM32_SERIAL_UART4_PRIORITY 12
|
||||
#define STM32_SERIAL_UART5_PRIORITY 12
|
||||
|
||||
/*
|
||||
* SPI driver system settings.
|
||||
*/
|
||||
#define STM32_SPI_USE_SPI1 FALSE
|
||||
#define STM32_SPI_USE_SPI2 FALSE
|
||||
#define STM32_SPI_USE_SPI3 FALSE
|
||||
#define STM32_SPI_SPI1_DMA_PRIORITY 1
|
||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||
#define STM32_SPI_SPI3_DMA_PRIORITY 1
|
||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
|
||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||
|
||||
/*
|
||||
* ST driver system settings.
|
||||
*/
|
||||
#define STM32_ST_IRQ_PRIORITY 8
|
||||
#define STM32_ST_USE_TIMER 2
|
||||
|
||||
/*
|
||||
* UART driver system settings.
|
||||
*/
|
||||
#define STM32_UART_USE_USART1 FALSE
|
||||
#define STM32_UART_USE_USART2 FALSE
|
||||
#define STM32_UART_USE_USART3 FALSE
|
||||
#define STM32_UART_USART1_IRQ_PRIORITY 12
|
||||
#define STM32_UART_USART2_IRQ_PRIORITY 12
|
||||
#define STM32_UART_USART3_IRQ_PRIORITY 12
|
||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||
|
||||
/*
|
||||
* USB driver system settings.
|
||||
*/
|
||||
#define STM32_USB_USE_USB1 TRUE
|
||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||
|
||||
/*
|
||||
* WDG driver system settings.
|
||||
*/
|
||||
#define STM32_WDG_USE_IWDG FALSE
|
||||
|
||||
#endif /* MCUCONF_H */
|
14
keyboards/_qmk_handwire/readme.md
Normal file
14
keyboards/_qmk_handwire/readme.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# QMK Handwire
|
||||
|
||||
An Arm-based handwire board.
|
||||
|
||||
* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
|
||||
* Hardware Supported: QMK Handwire
|
||||
* rev1 (1.0)
|
||||
* Hardware Availability: [qmk.fm](https://qmk.fm/)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make _qmk_handwire: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.
|
56
keyboards/_qmk_handwire/rules.mk
Normal file
56
keyboards/_qmk_handwire/rules.mk
Normal file
@@ -0,0 +1,56 @@
|
||||
# project specific files
|
||||
SRC = matrix.c \
|
||||
led.c
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F3xx
|
||||
|
||||
# Linker script to use
|
||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||
# or <this_dir>/ld/
|
||||
MCU_LDSCRIPT = STM32F303xC
|
||||
|
||||
# Startup code to use
|
||||
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
|
||||
MCU_STARTUP = stm32f3xx
|
||||
|
||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
||||
# or <this_dir>/boards
|
||||
BOARD = GENERIC_STM32_F303XC
|
||||
|
||||
# Cortex version
|
||||
MCU = cortex-m4
|
||||
|
||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||
ARMV = 7
|
||||
|
||||
USE_FPU = yes
|
||||
|
||||
# Vector table for application
|
||||
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
|
||||
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
|
||||
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
|
||||
OPT_DEFS =
|
||||
|
||||
# Options to pass to dfu-util when flashing
|
||||
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BACKLIGHT_ENABLE = no
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
CUSTOM_MATRIX = yes # Custom matrix file
|
||||
AUDIO_ENABLE = yes
|
||||
# SERIAL_LINK_ENABLE = yes
|
||||
I2C_SLAVE_ENABLE = yes
|
@@ -14,19 +14,6 @@
|
||||
|
||||
static bool mouse_lock = false;
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
|
||||
// Cloud9 macros
|
||||
CLOUD9_TAB_LEFT,
|
||||
CLOUD9_TAB_RIGHT,
|
||||
CLOUD9_TAB_CLOSE,
|
||||
CLOUD9_GOTO_SYMBOL,
|
||||
CLOUD9_GOTO_LINE,
|
||||
CLOUD9_NAVIGATE,
|
||||
|
||||
};
|
||||
|
||||
// building instructions:
|
||||
// make atreus:dvorak_42_key
|
||||
|
||||
@@ -43,9 +30,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
},
|
||||
|
||||
[KEYNAV] = {
|
||||
{KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, },
|
||||
{MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A), KC_TRNS, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), },
|
||||
{MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, },
|
||||
{KC_ESC, MEH(KC_F9), RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, },
|
||||
{MEH(KC_F11), MEH(KC_F12), RSFT(KC_TAB), KC_TAB, MEH(KC_A), KC_TRNS, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), },
|
||||
{MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, },
|
||||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), }
|
||||
},
|
||||
|
||||
@@ -77,40 +64,6 @@ const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if(record->event.pressed) {
|
||||
switch (keycode) {
|
||||
// Cloud9 macros
|
||||
case CLOUD9_TAB_LEFT:
|
||||
SEND_STRING(SS_LCTRL("["));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_TAB_RIGHT:
|
||||
SEND_STRING(SS_LCTRL("]"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_TAB_CLOSE:
|
||||
SEND_STRING(SS_LALT("w"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_GOTO_SYMBOL:
|
||||
SEND_STRING(SS_LSFT(SS_LCTRL("e")));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_GOTO_LINE:
|
||||
SEND_STRING(SS_LCTRL("g"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_NAVIGATE:
|
||||
SEND_STRING(SS_LCTRL("e"));
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
|
@@ -1,134 +0,0 @@
|
||||
#include "60.h"
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL,
|
||||
_FL,
|
||||
_CL,
|
||||
_YF
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
S_BSKTC = SAFE_RANGE,
|
||||
S_ODEJY,
|
||||
S_RCKBY,
|
||||
S_DOEDR,
|
||||
S_SCALE,
|
||||
S_ONEUP,
|
||||
S_COIN,
|
||||
S_SONIC,
|
||||
S_ZELDA
|
||||
};
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
float song_basketcase[][2] = SONG(BASKET_CASE);
|
||||
float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
|
||||
float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
|
||||
float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
|
||||
float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
|
||||
float song_coin[][2] = SONG(COIN_SOUND);
|
||||
float song_one_up[][2] = SONG(ONE_UP_SOUND);
|
||||
float song_sonic_ring[][2] = SONG(SONIC_RING);
|
||||
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
|
||||
#endif
|
||||
|
||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Layer 0: Default Layer
|
||||
* ,-----------------------------------------------------------------.
|
||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
|
||||
* |-----------------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
* |-----------------------------------------------------------------|
|
||||
* |MT(CTL, ESC)| A| S| D| F| G| H| J| K| L| ;| '|Enter |
|
||||
* |-----------------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
|
||||
* |-----------------------------------------------------------------'
|
||||
* |Ctrl |Alt|Gui | Space |Alt |Gui|Fn |Ctrl |
|
||||
* `-----------------------------------------------------------------'
|
||||
*/
|
||||
[_BL] = KEYMAP(
|
||||
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_GRV, KC_BSPC,\
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, \
|
||||
MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \
|
||||
KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(_YF), \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
|
||||
[_FL] = KEYMAP(
|
||||
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, _______,_______,\
|
||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, MO(_YF), \
|
||||
_______,_______,_______, _______, _______, _______, MO(_FL), _______),
|
||||
[_CL] = KEYMAP(
|
||||
BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
|
||||
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
|
||||
_______, _______, _______, _______, _______, _______, MO(_FL), _______),
|
||||
[_YF] = KEYMAP(
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
|
||||
_______,_______,KC_UP ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||
_______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
|
||||
_______, _______, _______, _______, _______, _______, MO(_FL), _______)
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case S_BSKTC:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_basketcase);
|
||||
}
|
||||
return false;
|
||||
case S_ODEJY:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_ode_to_joy);
|
||||
}
|
||||
return false;
|
||||
case S_RCKBY:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_rock_a_bye_baby);
|
||||
}
|
||||
return false;
|
||||
case S_DOEDR:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_doe_a_deer);
|
||||
}
|
||||
return false;
|
||||
case S_SCALE:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_scale);
|
||||
}
|
||||
return false;
|
||||
case S_ONEUP:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_one_up);
|
||||
}
|
||||
return false;
|
||||
case S_COIN:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_coin);
|
||||
}
|
||||
return false;
|
||||
case S_SONIC:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_sonic_ring);
|
||||
}
|
||||
return false;
|
||||
case S_ZELDA:
|
||||
if (record->event.pressed) {
|
||||
stop_all_notes();
|
||||
PLAY_SONG(song_zelda_puzzle);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
@@ -1,14 +0,0 @@
|
||||
# /u/yanfali keymap for clueboard 60%
|
||||
|
||||
Almost the same as default but differs in the following ways
|
||||
|
||||
1. `Caps Lock` -> `MT(KC_LCTL, KC_ESC)`.
|
||||
I'm a heavy vim user and I prefer escape to be closer than default. I also move `Control` to this key if you hold it.
|
||||
1. Switch Alt and GUI.
|
||||
I spend most of my time on OSX, so I reverse Alt and GUI to be
|
||||
more comfortable on OSX.
|
||||
1. Added a custom layer.
|
||||
I use this to map the cursor keys to WASD, the familiar directional
|
||||
gaming keys. As I use a split right shift, this naturally leads
|
||||
to the left hand being used for navigation. This is also the
|
||||
best place to add custom mappings, macros and combo keys.
|
@@ -1,9 +1,5 @@
|
||||
#include "66.h"
|
||||
|
||||
enum custom_keycodes {
|
||||
M_SHRUG = SAFE_RANGE
|
||||
};
|
||||
|
||||
// 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
|
||||
@@ -34,20 +30,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _CL: Control layer
|
||||
*/
|
||||
[_CL] = LAYOUT(
|
||||
M_SHRUG, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
|
||||
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
|
||||
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
|
||||
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
|
||||
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
|
||||
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
switch(keycode) {
|
||||
case M_SHRUG:
|
||||
SEND_STRING("/shrug"SS_TAP(X_ENTER));
|
||||
return false; break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0002
|
||||
#define MANUFACTURER Exclusive / E-Team
|
||||
#define PRODUCT E6-V2
|
||||
#define DESCRIPTION E6-V2 QMK PCB (Mid-Port)
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
/* QMK E6-V2 PCB default pin-out */
|
||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
|
||||
#define MATRIX_COL_PINS { C7, C6, B5, B4, D7, D6, D4, F6, F7, F5, F4, F1, F0, B0, B1 }
|
||||
#define UNUSED_PINS { E6, B2, B3, B7 }
|
||||
|
||||
#define RGB_DI_PIN E2
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8
|
||||
#define RGBLIGHT_HUE_STEP 12
|
||||
#define RGBLIGHT_SAT_STEP 12
|
||||
#define RGBLIGHT_VAL_STEP 12
|
||||
#endif
|
||||
|
||||
#define BACKLIGHT_PIN B6
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 5
|
||||
#define BACKLIGHT_BREAHTING
|
||||
#define BREATHING_PERIOD 3
|
||||
#endif
|
||||
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
#endif
|
@@ -1,53 +0,0 @@
|
||||
#include "e6v2.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
DDRB |= (1<<6);
|
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||
// output low
|
||||
DDRB |= (1<<2);
|
||||
PORTB &= ~(1<<2);
|
||||
} else {
|
||||
// Hi-Z
|
||||
DDRB &= ~(1<<2);
|
||||
PORTB &= ~(1<<2);
|
||||
}
|
||||
// DDRB |= (1<<7);
|
||||
// DDRB |= (1<<1);
|
||||
// DDRB |= (1<<3);
|
||||
// DDRE |= (1<<6);
|
||||
if (usb_led == 0){
|
||||
PORTB |= (1<<6);
|
||||
// PORTB |= (1<<7);
|
||||
// PORTB |= (1<<1);
|
||||
// PORTB |= (1<<3);
|
||||
// PORTE |= (1<<6);
|
||||
}
|
||||
else{
|
||||
PORTB &= ~(1<<6);
|
||||
// PORTB &= ~(1<<7);
|
||||
}
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
@@ -1,66 +0,0 @@
|
||||
#ifndef E6V2_H
|
||||
#define E6V2_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define KEYMAP( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K40, K41, K42, K46, K4A, K4B, K4C, K4D \
|
||||
)\
|
||||
{\
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
|
||||
}
|
||||
|
||||
#define KEYMAP_ANSI( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
|
||||
K40, K41, K42, K46, K4A, K4B, K4C, K4D \
|
||||
)\
|
||||
{\
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
|
||||
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO, KC_NO }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
|
||||
}
|
||||
|
||||
#define KEYMAP_HHKB( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K41, K42, K46, K4B, K4C \
|
||||
)\
|
||||
{\
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
|
||||
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
|
||||
{ KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, KC_NO }, \
|
||||
}
|
||||
|
||||
#define KEYMAP_HHKB_SPLITS( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K41, K42, K46, K4B, K4C \
|
||||
)\
|
||||
{\
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
|
||||
{ KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, KC_NO }, \
|
||||
}
|
||||
|
||||
#endif
|
@@ -1 +0,0 @@
|
||||
#include "../../config.h"
|
@@ -1,79 +0,0 @@
|
||||
#include "e6v2.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.
|
||||
#define _BL 0
|
||||
#define _HLa 1
|
||||
#define _HLb 2
|
||||
#define _HL 3
|
||||
#define _XL 4
|
||||
|
||||
enum hype_keycodes {
|
||||
FN_HLa = SAFE_RANGE,
|
||||
FN_HLb
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BL] = KEYMAP_HHKB(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_HLb,
|
||||
KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, FN_HLa
|
||||
),
|
||||
[_HLa] = KEYMAP_HHKB(
|
||||
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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS
|
||||
),
|
||||
[_HLb] = KEYMAP_HHKB(
|
||||
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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS
|
||||
),
|
||||
[_HL] = KEYMAP_HHKB(
|
||||
RGB_TOG, RGB_M_P, RGB_RMOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, BL_BRTG, BL_OFF, BL_STEP, BL_ON, BL_DEC, BL_INC, LALT(KC_F4),
|
||||
RESET, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case FN_HLa:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
layer_on(_HLa);
|
||||
update_tri_layer(_HLa, _HLb, _HL);
|
||||
}
|
||||
else
|
||||
{
|
||||
layer_off(_HLa);
|
||||
update_tri_layer(_HLa, _HLb, _HL);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case FN_HLb:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
layer_on(_HLb);
|
||||
update_tri_layer(_HLa, _HLb, _HL);
|
||||
}
|
||||
else
|
||||
{
|
||||
layer_off(_HLb);
|
||||
update_tri_layer(_HLa, _HLb, _HL);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
amnesia0287's Keymap
|
||||
===
|
||||
|
||||
Keymap Maintainer: [Jason Gorman](https://github.com/amnesia0287)
|
||||
|
||||
Difference from base layout: Primarily the HHKB-ness
|
||||
|
||||
Intended usage: Daily driver for programming
|
@@ -1 +0,0 @@
|
||||
#include "../../config.h"
|
@@ -1,18 +0,0 @@
|
||||
#include "e6v2.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP_ANSI(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, MO(1), KC_MENU, KC_RCTL
|
||||
),
|
||||
[1] = KEYMAP_ANSI(
|
||||
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,
|
||||
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
@@ -1,8 +0,0 @@
|
||||
Default Keymap
|
||||
===
|
||||
|
||||
Super simple default keymap with only a base layer.
|
||||
|
||||
Keymap Maintainer: [Jason Gorman](https://github.com/amnesia0287)
|
||||
|
||||
Intended usage: This is mostly provided for testing before you build your own keymap and as a reference to a stock(ish) configuration
|
@@ -1,18 +0,0 @@
|
||||
E6-V2
|
||||
===
|
||||
|
||||
These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/)
|
||||
|
||||
Keyboard Maintainer: [Jason Gorman](https://github.com/amnesia0287)
|
||||
Hardware Supported: E6-V2 Mid Port rev.qmk
|
||||
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make e6v2:default
|
||||
|
||||
Or to make and flash:
|
||||
|
||||
make e6v2:default:dfu
|
||||
|
||||
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.
|
@@ -1,68 +0,0 @@
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
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
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
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 = 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 = yes # Enable keyboard backlight functionality on B7 by default
|
||||
RGBLIGHT_ENABLE = yes
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
@@ -7,12 +7,6 @@
|
||||
// to build this keymap
|
||||
// make ergodox_ez:dvorak_42_key:teensy
|
||||
|
||||
// keeping fork up to date:
|
||||
// https://help.github.com/articles/configuring-a-remote-for-a-fork/
|
||||
// https://help.github.com/articles/syncing-a-fork/
|
||||
// pushing dev branch
|
||||
// git push origin dev:dev
|
||||
|
||||
static bool mouse_lock = false;
|
||||
|
||||
enum custom_keycodes {
|
||||
@@ -23,7 +17,6 @@ enum custom_keycodes {
|
||||
// shell nav macros
|
||||
SHELL_LS,
|
||||
SHELL_LSLTR,
|
||||
SHELL_LSLA,
|
||||
SHELL_CDPRE,
|
||||
SHELL_LESS,
|
||||
SHELL_PLESS,
|
||||
@@ -38,15 +31,6 @@ enum custom_keycodes {
|
||||
SHELL_SCREEN_LIST,
|
||||
SHELL_MKE,
|
||||
SHELL_HTCSTATUS,
|
||||
|
||||
// Cloud9 macros
|
||||
CLOUD9_TAB_LEFT,
|
||||
CLOUD9_TAB_RIGHT,
|
||||
CLOUD9_TAB_CLOSE,
|
||||
CLOUD9_GOTO_SYMBOL,
|
||||
CLOUD9_GOTO_LINE,
|
||||
CLOUD9_NAVIGATE,
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -55,11 +39,8 @@ enum custom_keycodes {
|
||||
#define KEYSEL 2 // arrow navigation + shift (allow text selection)
|
||||
#define SHELL_NAV 3 // bash shortcuts
|
||||
#define SHELL_SCREEN 4 // linux screen shortcuts
|
||||
#define SCREEN_NAV 5 // navigate between linux screen tabs
|
||||
#define MOUSE 6 // mouse layer (can be locked with lock key), unmapped for now
|
||||
#define BROWSER_CONTROL 7 // control browser and mouse
|
||||
#define COMBINED 8 // combined numbers and symbols layer
|
||||
|
||||
#define MOUSE 5 // mouse layer (can be locked with lock key)
|
||||
#define COMBINED 6 // combined numbers and symbols layer
|
||||
|
||||
// macros
|
||||
#define MOUSE_TOGGLE 1
|
||||
@@ -83,18 +64,7 @@ enum custom_keycodes {
|
||||
#define SCREEN_8 20
|
||||
#define SCREEN_9 21
|
||||
#define SCREEN_DETACH 22
|
||||
#define SCREEN_UP_JUMP 23
|
||||
#define SCREEN_DOWN_JUMP 24
|
||||
#define SCREEN_READREG_1 25
|
||||
#define SCREEN_READREG_2 26
|
||||
#define SCREEN_READREG_3 27
|
||||
#define SCREEN_PASTEREG_1 28
|
||||
#define SCREEN_PASTEREG_2 29
|
||||
#define SCREEN_PASTEREG_3 30
|
||||
#define SHELL_WRITE_LOGPATTERN 31
|
||||
#define SHELL_WRITE_TRANPATTERN 32
|
||||
#define SHELL_EXPAND_PATTERN 33
|
||||
|
||||
#define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 30
|
||||
|
||||
|
||||
#define MACRO_SCREEN_NUM(MACRO_NAME,NUM) \
|
||||
@@ -104,49 +74,15 @@ enum custom_keycodes {
|
||||
}\
|
||||
break;\
|
||||
|
||||
#define MACRO_SCREEN_REG(MACRO_NAME,NUM) \
|
||||
case MACRO_NAME:\
|
||||
if (record->event.pressed) {\
|
||||
return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
|
||||
T(R),\
|
||||
T(E),\
|
||||
T(A),\
|
||||
T(D),\
|
||||
T(R),\
|
||||
T(E),\
|
||||
T(G),\
|
||||
T(SPC),\
|
||||
T(NUM),\
|
||||
T(ENTER),\
|
||||
END);\
|
||||
}\
|
||||
break;\
|
||||
|
||||
#define MACRO_SCREEN_PASTE(MACRO_NAME,NUM)\
|
||||
case MACRO_NAME:\
|
||||
if (record->event.pressed) {\
|
||||
return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
|
||||
T(P),\
|
||||
T(A),\
|
||||
T(S),\
|
||||
T(T),\
|
||||
T(E),\
|
||||
T(SPC),\
|
||||
T(NUM),\
|
||||
T(ENTER),\
|
||||
END);\
|
||||
}\
|
||||
break;\
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[BASE] = KEYMAP(
|
||||
// left hand
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||
OSL(SCREEN_NAV), KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
|
||||
KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
|
||||
OSL(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I,
|
||||
OSL(SHELL_SCREEN), KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MEH(KC_3),
|
||||
MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL),
|
||||
MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), M(MOUSE_TOGGLE), MO(KEYSEL),
|
||||
|
||||
// left thumb cluster
|
||||
MEH(KC_4), MEH(KC_5),
|
||||
@@ -155,8 +91,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
// right hand
|
||||
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MEH(KC_9),
|
||||
MEH(KC_7), KC_F, KC_G, KC_C, KC_R, KC_L, KC_TAB,
|
||||
KC_D, KC_H, KC_T, KC_N, KC_S, RCTL(KC_BSPC),
|
||||
MEH(KC_7), KC_F, KC_G, KC_C, KC_R, KC_L, MEH(KC_F1),
|
||||
KC_D, KC_H, KC_T, KC_N, KC_S, MEH(KC_F2),
|
||||
MEH(KC_8), KC_B, KC_M, KC_W, KC_V, KC_Z, MEH(KC_F3),
|
||||
KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT),MEH(KC_F4),
|
||||
|
||||
@@ -168,9 +104,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[KEYNAV] = KEYMAP(
|
||||
// left hand
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
|
||||
KC_TRNS,KC_LSFT, CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A),
|
||||
KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
|
||||
KC_TRNS,KC_ESC, MEH(KC_F9), RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
|
||||
KC_TRNS,MEH(KC_F11), MEH(KC_F12), RSFT(KC_TAB), KC_TAB, MEH(KC_A),
|
||||
KC_TRNS,MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// left thumb cluster
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,TO(MOUSE),KC_TRNS,KC_TRNS,
|
||||
@@ -194,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TRNS,MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),
|
||||
KC_TRNS,MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,
|
||||
// bottom row
|
||||
RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
// thumb cluster
|
||||
KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,
|
||||
@@ -215,9 +151,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// shell navigation layer
|
||||
[SHELL_NAV] = KEYMAP(
|
||||
// left hand
|
||||
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, KC_TRNS, SHELL_H3,
|
||||
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
|
||||
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_PWD,
|
||||
KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
|
||||
// bottom row
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
@@ -226,10 +162,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SHELL_WRITE_TRANPATTERN),
|
||||
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, M(SHELL_WRITE_LOGPATTERN),
|
||||
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
|
||||
RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), M(SHELL_EXPAND_PATTERN),
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SWITCH_NDS),
|
||||
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, RCTL(KC_R),
|
||||
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), LALT(KC_DOT),
|
||||
RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND),
|
||||
// bottom row (match functionality of base layer)
|
||||
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
|
||||
// thumb cluster
|
||||
@@ -242,7 +178,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// linux screen layer
|
||||
[SHELL_SCREEN] = KEYMAP(
|
||||
// left hand
|
||||
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
@@ -265,35 +201,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
// navigation within screen (for copy/paste)
|
||||
[SCREEN_NAV] = KEYMAP(
|
||||
// left hand
|
||||
// left hand
|
||||
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, M(SCREEN_READREG_3), M(SCREEN_READREG_2), M(SCREEN_READREG_1), KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, M(SCREEN_PASTEREG_3), M(SCREEN_PASTEREG_2), M(SCREEN_PASTEREG_1), KC_TRNS,
|
||||
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// bottom row
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
// thumb cluster
|
||||
KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_0, KC_UP, KC_DLR, M(SCREEN_UP_JUMP), KC_TRNS,
|
||||
KC_B, KC_LEFT, KC_DOWN, KC_RIGHT, KC_W, M(SCREEN_COPY_MODE),
|
||||
KC_TRNS, KC_TRNS, S(KC_W), S(KC_Y), M(SCREEN_PASTE), M(SCREEN_DOWN_JUMP), MEH(KC_V),
|
||||
// bottom row (match functionality of base layer)
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// thumb cluster
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
[COMBINED] = KEYMAP(
|
||||
|
||||
@@ -315,9 +222,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// bottom row
|
||||
KC_0, KC_DOT, KC_PIPE, KC_BSLS, MEH(KC_P),
|
||||
// thumb cluster
|
||||
KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TAB),
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||
|
||||
|
||||
[MOUSE] = KEYMAP(
|
||||
@@ -342,30 +247,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_TRNS, KC_BTN1, KC_BTN2
|
||||
),
|
||||
|
||||
[BROWSER_CONTROL] = KEYMAP(
|
||||
// left hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// bottom row
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, KC_TRNS,
|
||||
KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, KC_TRNS,
|
||||
// bottom row
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, RCTL(KC_W), RCTL(KC_T)
|
||||
),
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -436,14 +317,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
}
|
||||
break;
|
||||
|
||||
MACRO_SCREEN_REG(SCREEN_READREG_1,1);
|
||||
MACRO_SCREEN_REG(SCREEN_READREG_2,2);
|
||||
MACRO_SCREEN_REG(SCREEN_READREG_3,3);
|
||||
|
||||
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_1,1);
|
||||
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_2,2);
|
||||
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_3,3);
|
||||
|
||||
MACRO_SCREEN_NUM(SCREEN_0,0);
|
||||
MACRO_SCREEN_NUM(SCREEN_1,1);
|
||||
MACRO_SCREEN_NUM(SCREEN_2,2);
|
||||
@@ -455,18 +328,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
MACRO_SCREEN_NUM(SCREEN_8,8);
|
||||
MACRO_SCREEN_NUM(SCREEN_9,9);
|
||||
|
||||
case SCREEN_UP_JUMP:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( T(5), T(UP), END);
|
||||
}
|
||||
break;
|
||||
|
||||
case SCREEN_DOWN_JUMP:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( T(5), T(DOWN), END);
|
||||
}
|
||||
break;
|
||||
|
||||
case SCREEN_COPY_MODE:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
|
||||
@@ -477,39 +338,23 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
|
||||
}
|
||||
break;
|
||||
|
||||
case SHELL_WRITE_LOGPATTERN:
|
||||
case SWITCH_NDS:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( D(LSFT),
|
||||
T(8),
|
||||
T(8),
|
||||
T(F11),
|
||||
U(LSFT),
|
||||
T(L),
|
||||
T(O),
|
||||
T(G),
|
||||
T(LEFT),
|
||||
T(LEFT),
|
||||
T(LEFT),
|
||||
T(LEFT),
|
||||
W(255),
|
||||
D(LALT),
|
||||
T(TAB),
|
||||
U(LALT),
|
||||
END);
|
||||
}
|
||||
break;
|
||||
|
||||
case SHELL_WRITE_TRANPATTERN:
|
||||
case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( D(LSFT),
|
||||
T(8),
|
||||
T(8),
|
||||
U(LSFT), T(T), T(R), T(A), T(N), T(LEFT), T(LEFT), T(LEFT), T(LEFT), T(LEFT), END);
|
||||
return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END);
|
||||
}
|
||||
break;
|
||||
|
||||
case SHELL_EXPAND_PATTERN:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( D(LALT), T(F), U(LALT), D(LCTL), T(X), U(LCTL), D(LSFT), T(8), D(LSFT), END);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
@@ -548,10 +393,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
SEND_STRING("ls -ltr\n");
|
||||
return true;
|
||||
break;
|
||||
case SHELL_LSLA:
|
||||
SEND_STRING("ls -la\n");
|
||||
return true;
|
||||
break;
|
||||
case SHELL_CDPRE:
|
||||
SEND_STRING("cd ..\n");
|
||||
return true;
|
||||
@@ -604,32 +445,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
SEND_STRING("htcStatus -j ");
|
||||
return true;
|
||||
break;
|
||||
// Cloud9 macros
|
||||
case CLOUD9_TAB_LEFT:
|
||||
SEND_STRING(SS_LCTRL("["));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_TAB_RIGHT:
|
||||
SEND_STRING(SS_LCTRL("]"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_TAB_CLOSE:
|
||||
SEND_STRING(SS_LALT("w"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_GOTO_SYMBOL:
|
||||
SEND_STRING(SS_LSFT(SS_LCTRL("e")));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_GOTO_LINE:
|
||||
SEND_STRING(SS_LCTRL("g"));
|
||||
return true;
|
||||
break;
|
||||
case CLOUD9_NAVIGATE:
|
||||
SEND_STRING(SS_LCTRL("e"));
|
||||
return true;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -659,11 +474,9 @@ void matrix_scan_user(void) {
|
||||
case SHELL_SCREEN:
|
||||
case KEYNAV:
|
||||
case KEYSEL:
|
||||
case SCREEN_NAV:
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case MOUSE:
|
||||
case BROWSER_CONTROL:
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
|
@@ -1,228 +0,0 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
|
||||
#define BASE 0 // default layer
|
||||
#define MDIA 1 // media keys
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
EPRM,
|
||||
VRSN,
|
||||
RGB_SLD
|
||||
};
|
||||
|
||||
bool capsOn = false;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | Bksp |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* |HyperCaps| A | S | D | F | G |------| |------| H | J | K | L |; / L1| Enter |
|
||||
* |--------+------+------+------+------+------| Alt | | L1 |------+------+------+------+------+--------|
|
||||
* | LShift | Z/L1 | X | C | V | B | | | | N | M | , | . | ? | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* |lCrtr | [ | ] | ` | ' | | Left | Up | Down | Right| PlayWin |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* |PRTSRN| Win | | Home | End |
|
||||
* ,------|------|------| |------+--------+------.
|
||||
* | | | Ins | | PgUp | | |
|
||||
* | Space|Backsp|------| |------| Enter |Space |
|
||||
* | |ace | Del | | PgDn | | |
|
||||
* `--------------------' `----------------------'
|
||||
*/
|
||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||
// Otherwise, it needs KC_*
|
||||
[BASE] = LAYOUT_ergodox( // layer 0 : default
|
||||
// left hand
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LCBR,
|
||||
ALL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT, LT(MDIA,KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
|
||||
KC_LCTRL, KC_LBRC, KC_RBRC, KC_GRV, KC_QUOT,
|
||||
KC_PSCR, KC_LGUI,
|
||||
KC_INS,
|
||||
KC_SPC,KC_BSPC,KC_DEL,
|
||||
// right hand
|
||||
KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_RCBR, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_ENT,
|
||||
TG(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LEFT, KC_UP,KC_DOWN,KC_RGHT, GUI_T(KC_MPLY),
|
||||
KC_HOME, KC_END,
|
||||
KC_PGUP,
|
||||
KC_PGDN,KC_ENT, KC_SPC
|
||||
),
|
||||
/* Keymap 1: Media and mouse keys
|
||||
*
|
||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||
* |Version | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
|
||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||
* |BootLoad | | Lclk | MsUp | Rclk | | | | | | | Up | | | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | |MsLeft|MsDown|MsRght| |------| |------| | Left | Down | Right| | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | Mute | Mute | | |
|
||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | Prev |VolUp |VolDn | Next | |
|
||||
* `-----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// Functions
|
||||
[MDIA] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
|
||||
RESET,_______,KC_BTN1,KC_MS_U,KC_BTN2,_______,_______,
|
||||
_______,_______,KC_MS_L,KC_MS_D,KC_MS_R,_______,
|
||||
_______,_______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,
|
||||
_______,_______,_______,_______,_______,
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,_______,
|
||||
// right hand
|
||||
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,
|
||||
_______,_______,_______, KC_UP ,_______,_______,_______,
|
||||
_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,
|
||||
_______,_______,_______,KC_MUTE,KC_MUTE,_______,_______,
|
||||
KC_MPRV,KC_VOLU,KC_VOLD,KC_MNXT,_______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(MDIA) // FN1 - Momentary Layer 1 (Symbols)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) { // For resetting EEPROM
|
||||
eeconfig_init();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case EPRM:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_init();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case VRSN:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
#ifdef RGBLIGHT_COLOR_LAYER_0
|
||||
rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
|
||||
#endif
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
if(layer == 1)
|
||||
{
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
|
||||
ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
|
||||
ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
|
||||
}
|
||||
|
||||
if(capsOn)
|
||||
{
|
||||
ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
|
||||
ergodox_right_led_1_on ();
|
||||
}
|
||||
|
||||
if(keyboard_report->mods & MOD_BIT(KC_LSFT))
|
||||
{
|
||||
ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
|
||||
ergodox_right_led_1_on ();
|
||||
} else {
|
||||
ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
|
||||
|
||||
if(!capsOn)
|
||||
{
|
||||
ergodox_right_led_1_off ();
|
||||
}
|
||||
}
|
||||
|
||||
if(keyboard_report->mods & MOD_BIT(KC_LALT))
|
||||
{
|
||||
ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
|
||||
ergodox_right_led_2_on ();
|
||||
} else {
|
||||
ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
|
||||
if(layer != 1)
|
||||
{
|
||||
ergodox_right_led_2_off ();
|
||||
}
|
||||
}
|
||||
|
||||
if(keyboard_report->mods & MOD_BIT(KC_LCTRL))
|
||||
{
|
||||
ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
|
||||
ergodox_right_led_3_on ();
|
||||
} else {
|
||||
ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
|
||||
if(layer != 1)
|
||||
{
|
||||
ergodox_right_led_3_off ();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void led_set_user(uint8_t usb_led){
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK))
|
||||
{
|
||||
capsOn = true;
|
||||
}else {
|
||||
capsOn = false;
|
||||
}
|
||||
}
|
@@ -1,3 +0,0 @@
|
||||
# Truly Ergonomic like layout
|
||||
|
||||
A basic ErgoDox layout that imitates the Truly Ergonomic keyboard layout.
|
@@ -1,177 +0,0 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
|
||||
#define BASE 0 // default layer
|
||||
#define EXTRA 1 // extra
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
EPRM,
|
||||
VRSN,
|
||||
RGB_SLD
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ESC | 1 | 2 | 3 | 4 | 5 | LGui | | LGui | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | Del | | Tab | Y | U | I | O | P | = |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | RShift |
|
||||
* |--------+------+------+------+------+------| Back | | Back |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | C | V | B | space| | space| N | M | , | . | ' | RCtrl |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | LAlt | Home | PgUp | PgDn | End | | Left | Up | Down | Rigth| RAlt |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | ~ | | | | [ | ] |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | L1 | | Grv | | |
|
||||
* | Space|Enter |------| |------| Enter|Space |
|
||||
* | | | / | | \ | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||
// Otherwise, it needs KC_*
|
||||
[BASE] = LAYOUT_ergodox( // layer 0 : default
|
||||
// left hand
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DELT,
|
||||
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC,
|
||||
KC_LALT, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
|
||||
KC_TILD, KC_PIPE,
|
||||
TG(EXTRA),
|
||||
KC_SPC, KC_ENT, KC_SLSH,
|
||||
// right hand
|
||||
KC_LGUI, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_TAB, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
|
||||
KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_RCTL,
|
||||
KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_RALT,
|
||||
KC_LBRC, KC_RBRC,
|
||||
KC_GRV,
|
||||
KC_BSLS, KC_ENT, KC_SPC
|
||||
),
|
||||
/* Keymap 1: Extra Layer
|
||||
*
|
||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | F1 | F2 | F3 | F4 | F5 | | | PSCR | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Caps | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | 0 | , | . | = | |
|
||||
* `-----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* |VolUp |VolDn | | Prev | Next |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | Stop |Bright|Bright|
|
||||
* | Mute |Pause |------| |------|ness- |ness+ |
|
||||
* | | | | | Play | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[EXTRA] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||
KC_CAPS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
KC_VOLU,KC_VOLD,
|
||||
KC_TRNS,
|
||||
KC_MUTE,KC_PAUS,KC_TRNS,
|
||||
// right hand
|
||||
KC_PSCR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||
KC_0, KC_COMM, KC_DOT, KC_EQL, KC_TRNS,
|
||||
KC_MPRV, KC_MNXT,
|
||||
KC_STOP,
|
||||
KC_MPLY, RGB_VAD, RGB_VAI
|
||||
),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) { // For resetting EEPROM
|
||||
eeconfig_init();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case EPRM:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_init();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case VRSN:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
// TODO: Make this relevant to the ErgoDox EZ.
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
@@ -49,13 +49,6 @@
|
||||
/*tap dance definition */
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
//Mousekeys Settings
|
||||
#define MOUSEKEY_INTERVAL 1
|
||||
#define MOUSEKEY_DELAY 0
|
||||
#define MOUSEKEY_TIME_TO_MAX 1
|
||||
#define MOUSEKEY_MAX_SPEED 15
|
||||
#define MOUSEKEY_WHEEL_DELAY 0
|
||||
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
@@ -173,14 +173,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
// * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
|
||||
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
// * | P-Brk | | | | | | | RGUI | ALT | / |
|
||||
// * | | | | | | | | | ALT | / |
|
||||
// * '-----------------------------------------------------------------------------------------'
|
||||
// */
|
||||
//
|
||||
[DIR] = KEYMAP( /* Directional Modifiers */
|
||||
KC_TAB, KC_UP, KC_TRNS, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL ,
|
||||
KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC ,
|
||||
KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_LALT, KC_SLSH
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_SLSH
|
||||
),
|
||||
//
|
||||
// /*
|
||||
@@ -205,17 +205,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// /*
|
||||
// * ETC
|
||||
// * .-----------------------------------------------------------------------------------------.
|
||||
// * | ` | mUP | | | | SHIFT | mUp | mDown | | \ |
|
||||
// * | ` | | | | | | | | | \ |
|
||||
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
// * | mLeft | mDown | mRight | | SHIFT | | mBtn1 | mBtn2 | ; | ' |
|
||||
// * | CAPS | P-Brk | | | | | | | ; | ' |
|
||||
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
// * | Sft//Cp| | | | | C-A-D | | | ALT | DEL |
|
||||
// * | SHIFT | | | | | C-A-D | | GUI | | DEL |
|
||||
// * '-----------------------------------------------------------------------------------------'
|
||||
// */
|
||||
//
|
||||
[ETC] = KEYMAP( /* ETC */
|
||||
KC_GRV, KC_MS_U, _______, _______, _______, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS ,
|
||||
KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_LSFT, KC_TRNS, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT ,
|
||||
TD(TD_SFT_CAPS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LALT(LCTL(KC_DEL)), KC_TRNS, KC_TRNS, KC_LALT, KC_DEL
|
||||
KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS ,
|
||||
KC_CAPS, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT ,
|
||||
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LALT(LCTL(KC_DEL)), KC_TRNS, KC_RGUI, KC_TRNS, KC_DEL
|
||||
),
|
||||
};
|
||||
|
@@ -1,47 +1,12 @@
|
||||

|
||||

|
||||
|
||||
# Gherkin Wanleg Layout
|
||||
|
||||
Here is the layout I came up with to preserve a standard QWERTY layout as much as possible, in as few layers as possible for a 30 key board.
|
||||
I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions, since in actual use, they tended to impede typing speed more than their (current) two-key versions.
|
||||
I originally set up a few Tap Dance keys, but eventually dropped most of them in favor of chorded versions, since in actual use, they tended to impede typing speed more than their (current) two-key versions.
|
||||
I've left them in my layout ready for use if anyone wants to try them out:
|
||||
|
||||
Legend Name | Single Tap | Double Tap | Hold
|
||||
--- | --- | --- | ---
|
||||
*null* | space | enter | shift
|
||||
*null* | backspace | delete | control
|
||||
Sft//Cp | shift | caps lock | *null*
|
||||
Q//Esc | KC_Q | escape | *null*
|
||||
|
||||
# Gherkin Flashing
|
||||
## Linux
|
||||
The ProMicro doesn't like dfu-programmer, so we have to use AVRdude. What follows below are instructions for Linux taken from https://deskthority.net/workshop-f7/how-to-use-a-pro-micro-as-a-cheap-controller-converter-like-soarer-s-t8448.html
|
||||
|
||||
`ls /dev/tty*`
|
||||
|
||||
Next, plug in your device and re-run the command, the same as before:
|
||||
|
||||
`ls /dev/tty*`
|
||||
|
||||
There should be one more output device than was seen previously. For me, it's /dev/ttyACM0.
|
||||
To flash the device, you need to have AVRdude installed. On Linux, you can do this with your normal package manager.
|
||||
Once you have AVRdude set up, navigate to the directory with your .hex file in it. Then, run the following:
|
||||
|
||||
`avrdude -p atmega32u4 -P YOUR_SERIAL_PORT -c avr109 -U flash:w:YOUR_FILENAME.hex`
|
||||
|
||||
Of course, replace YOUR_SERIAL_PORT with your serial port's device name, and YOUR_FILENAME.hex with the appropriate filename. For me, this line looks like this:
|
||||
|
||||
`avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:Soarer_at2usb_v1.12_atmega32u4.hex`
|
||||
|
||||
If it says ''device not in sync'' or similar, your device is no longer in bootloader mode. Unplug it, and get it back into bootloader mode like you did in the previous step (or short the reset pin), and try again.
|
||||
If this still doesn't work, try running the command again as root
|
||||
|
||||
`sudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:Soarer_at2usb_v1.12_atmega32u4.hex`
|
||||
|
||||
## Windows
|
||||
1. Install the latest version of AVRdude for Windows from http://savannah.nongnu.org/projects/avrdude/
|
||||
Test that it installed correctly by running "avrdude" from Command Prompt. It should display a usage message with version information at the end
|
||||
2. Open Device Manager and take a look at your "Ports (COM & LPT)" section
|
||||
3. Plug in the Gherkin and short the RESET pin on the microcontroller to Ground to put it into bootloader mode. Take note of the new COM device that shows up. After 8 seconds or so the microcontroller will leave bootloader mode and it will disappear from that section
|
||||
4. Open Command Prompt and run the following (substituting "com7" with whatever port you saw earlier)
|
||||
|
||||
`avrdude -p atmega32u4 -P com7 -c avr109 -U flash:w:YOURHEX.hex`
|
||||
Single tap - Double tap - Hold
|
||||
space - enter - shift
|
||||
backspace - delete - control
|
||||
shift - caps lock - XXXX
|
||||
KC_Q - escape - XXXX
|
@@ -1 +0,0 @@
|
||||
#include "../../config.h"
|
@@ -1,35 +0,0 @@
|
||||
#include "v32u4.h"
|
||||
// How long (in ms) to wait between animation steps for the breathing mode
|
||||
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
|
||||
|
||||
// How long (in ms) to wait between animation steps for the rainbow mode
|
||||
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
|
||||
|
||||
// How long (in ms) to wait between animation steps for the swirl mode
|
||||
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {30, 20, 3};
|
||||
|
||||
// How long (in ms) to wait between animation steps for the snake mode
|
||||
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
|
||||
|
||||
// How long (in ms) to wait between animation steps for the knight modes
|
||||
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
|
||||
|
||||
// These control which colors are selected for the gradient mode
|
||||
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP(
|
||||
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_GRV, KC_PSCR,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = KEYMAP(
|
||||
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_PAUS, KC_TRNS,
|
||||
KC_TRNS, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_MOD, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS,
|
||||
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, RGB_HUD, RGB_SAD, RGB_VAD, KC_DOWN, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MPLY, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
@@ -1,10 +0,0 @@
|
||||
Dead's Keymap
|
||||
===
|
||||
|
||||
Split backspace, 6.25u space, 2 Function Layers, reset + rgb controls on layer(2)
|
||||
|
||||
Intended usage: This is my daily driver keymap
|
||||
|
||||
===
|
||||
|
||||
Encryption Complete
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
#endif
|
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
|
||||
*/
|
||||
|
||||
#ifndef KEYMAP_COMMON_H
|
||||
#define KEYMAP_COMMON_H
|
||||
|
||||
#include "quantum.h"
|
||||
// #include "keycode.h"
|
||||
// #include "action.h"
|
||||
|
||||
#define KEYMAP_GRID( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
|
||||
K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312 \
|
||||
) \
|
||||
{ \
|
||||
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
|
||||
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
|
||||
{ K312, K311, K310, K39, K35, K36, K37, K38, K34, K33, K32, K31 } \
|
||||
}
|
||||
|
||||
#define KEYMAP_MIT( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
|
||||
K31, K32, K33, K34, K35, K3X, K38, K39, K310, K311, K312 \
|
||||
) \
|
||||
{ \
|
||||
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
|
||||
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
|
||||
{ K312, K311, K310, K39, K35, K3X, KC_NO, K38, K34, K33, K32, K31 } \
|
||||
}
|
||||
|
||||
#define KEYMAP_OFFSET( \
|
||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
|
||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
|
||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
|
||||
K31, K32, K33, K34, K35, K36, K3X, K39, K310, K311, K312 \
|
||||
) \
|
||||
{ \
|
||||
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
|
||||
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
|
||||
{ K312, K311, K310, K39, K35, K36, K3X, KC_NO, K34, K33, K32, K31 } \
|
||||
}
|
||||
|
||||
#define KEYMAP KEYMAP_GRID
|
||||
#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
|
||||
|
||||
#endif
|
@@ -1,206 +0,0 @@
|
||||
#include "jj40.h"
|
||||
#include "action_layer.h"
|
||||
#include "eeconfig.h"
|
||||
#include "keymap_uk.h"
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
||||
// 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.
|
||||
#define _QWERTY 0
|
||||
#define _LOWER 1
|
||||
#define _RAISE 2
|
||||
#define _FUNC 3
|
||||
#define _ADJUST 16
|
||||
#define _DYN 6
|
||||
|
||||
enum planck_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
FUNC,
|
||||
LOWER,
|
||||
RAISE,
|
||||
DYNAMIC_MACRO_RANGE
|
||||
};
|
||||
|
||||
#include "dynamic_macro.h"
|
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = KEYMAP(\
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,\
|
||||
MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,\
|
||||
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,\
|
||||
MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC) \
|
||||
),
|
||||
|
||||
/* Function
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | MENU | Alt | Ctrl | Fn |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_FUNC] = KEYMAP(\
|
||||
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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, UK_TILD, KC_INSERT ,\
|
||||
KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = KEYMAP(\
|
||||
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,\
|
||||
LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,\
|
||||
KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
|
||||
_______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | { | } | | |< | LEFT | DOWN |RIGHT | >| |ZOOM -|
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | Alt | Enter|Raise | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = KEYMAP(\
|
||||
KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,\
|
||||
KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,\
|
||||
_______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,\
|
||||
_______, _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______ \
|
||||
),
|
||||
|
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ???? | Reset|Qwerty| | | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | CAPS | | | | | | | Mute | Vol+ | Play | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | | | Prev | Vol- | Next | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | DYN | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = KEYMAP(\
|
||||
M(0), RESET, QWERTY, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,\
|
||||
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,\
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,\
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, MO(_DYN), _______, _______, _______ \
|
||||
),
|
||||
|
||||
/* DYN: Macro Recording and Playback
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | | | | | | REC1 | REC2 | | | | | |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | | | | PLAY1| PLAY2| | | | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | STOP | STOP | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DYN]= KEYMAP(\
|
||||
_______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, _______,\
|
||||
_______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______,\
|
||||
_______, _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, _______, _______, _______, _______, _______,\
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
|
||||
void persistant_default_layer_set(uint16_t default_layer) {
|
||||
eeconfig_update_default_layer(default_layer);
|
||||
default_layer_set(default_layer);
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
persistant_default_layer_set(1UL<<_QWERTY);
|
||||
}
|
||||
return false;
|
||||
case LOWER:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_LOWER);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_LOWER);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
return false;
|
||||
case RAISE:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_RAISE);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_RAISE);
|
||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch(id) {
|
||||
// These would trigger when you hit a key mapped as M(0)
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
return MACRO(
|
||||
// SENSITIVE
|
||||
END
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 1: // Word Select
|
||||
if (record->event.pressed) {
|
||||
return MACRO(
|
||||
DOWN(KC_LCTL), DOWN(KC_RIGHT), UP(KC_RIGHT), DOWN(KC_LSFT), DOWN(KC_LEFT), UP(KC_LEFT), UP(KC_LSFT), UP(KC_LCTL),
|
||||
END
|
||||
);
|
||||
}
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
@@ -1,91 +0,0 @@
|
||||
# AJP10304 Custom JJ40 Layout
|
||||
###Based on my Planck layout of the same name.
|
||||
|
||||
**Note:** In the tables below where there are two characters on a key,
|
||||
the second is the output when shift is applied.
|
||||
|
||||
**Note:** The below tables assume a UK layout.
|
||||
|
||||
##### Main Qwerty Layer
|
||||
|
||||
* Tab: when held, operates as shift.
|
||||
* Enter: when held, operates as shift.
|
||||
* MENU: perform right-click
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
|
||||
| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||
| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
|
||||
| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
|
||||
| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn |
|
||||
|
||||
##### Function Layer
|
||||
Activated when `fn` held in the above `qwerty` layer.
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
|
||||
| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||
| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
|
||||
| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
|
||||
| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | MENU | Alt | Ctrl | Fn |
|
||||
|
||||
##### Lower Layer
|
||||
Activated when `Lower` is held in the above `qwerty` layer.
|
||||
|
||||
* Numbers are along the top row, their shifted counterparts are on row 2.
|
||||
* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
|
||||
* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
|
||||
| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
|
||||
| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
|
||||
| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
|
||||
| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
|
||||
|
||||
##### Raise Layer
|
||||
Activated when `Raise` is held in the above `qwerty` layer.
|
||||
|
||||
* Preferred layer for typing brackets.
|
||||
* Allows for cursor navigation to be used solely with the right hand.
|
||||
* WRDSEL: Select the word where the cursor is.
|
||||
* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
|
||||
| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
|
||||
| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
|
||||
| | | | { | } | ||<| LEFT | DOWN |RIGHT |>||ZOOM -|
|
||||
| | | | | | Alt | Enter |Raise | | | | |
|
||||
|
||||
##### Lower + Raise
|
||||
Activated when `Lower` and `Raise` are held together the above `qwerty` layer.
|
||||
|
||||
* Audio controls in the same position as cursor keys from the `Raise` layer.
|
||||
* ????: Runs a macro for outputting a text string. Do not use this store passwords.
|
||||
* Reset: Enter bootloader for flashing firmware to the keyboard.
|
||||
* CAPS: Toggle caps lock.
|
||||
* DYN: Enter `DYN` layer.
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
|
||||
| ???? | Reset|Qwerty| | | | | | | | | Del |
|
||||
| CAPS | | | | | | | Mute | Vol+ | Play | | |
|
||||
| | | | | | | | Prev | Vol- | Next | | |
|
||||
| | | | | | | | | DYN | | | |
|
||||
|
||||
##### DYN
|
||||
Activated when `DYN` held along with `Lower` and `Raise`
|
||||
Allows recording of macros. To start recording the macro, press either REC1 or REC2.
|
||||
To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
|
||||
|
||||
| | | | | | | | | | | | |
|
||||
| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
|
||||
| | | | | | REC1 | REC2 | | | | | |
|
||||
| | | | | | PLAY1| PLAY2| | | | | |
|
||||
| | | | | | STOP | STOP | | | | | |
|
||||
| | | | | | | | | | | | |
|
||||
|
||||
|
||||
####Manual Flashing of hex file
|
||||
`bootloadHID -r .build/jj40_ajp10304.hex`
|
@@ -1,5 +0,0 @@
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
AUDIO_ENABLE = no
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,197 +0,0 @@
|
||||
#include "lfk78.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
#include "process_tap_dance.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
CS_GO, // 0x08
|
||||
FUNC, // 0x10
|
||||
SETTINGS, // 0x20
|
||||
};
|
||||
|
||||
enum {
|
||||
TD_ESC_FUNC = 0,
|
||||
TD_ESC_CTRL,
|
||||
TD_SPC_SPAM
|
||||
};
|
||||
|
||||
bool spam_space = false;
|
||||
|
||||
|
||||
// {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
|
||||
// {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
|
||||
// {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
|
||||
// {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
|
||||
// {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
|
||||
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
|
||||
{0x00000002, 0xFFFFFFFE, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
|
||||
{0x00000004, 0xFFFFFFFC, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
|
||||
{0x00000008, 0xFFFFFFE8, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap BASE: (Base Layer) Default Layer
|
||||
* ,---------. ,------------------------------------------------------------. ,---------.
|
||||
* |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
|
||||
* |---------| |------------------------------------------------------------| |---------|
|
||||
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn|
|
||||
* |---------| |------------------------------------------------------------| `---------'
|
||||
* | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |---------| |------------------------------------------------------------| ,----.
|
||||
* | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up |
|
||||
* |---------| |-------------------------------------------------------------------------.
|
||||
* | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[VANILLA] = SPLIT_SHIFT_KEYMAP(
|
||||
KC_VOLD, KC_VOLU, 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, LALT(KC_F5), KC_PGUP,
|
||||
KC_F3, KC_F4, 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_PGDN,
|
||||
KC_F5, KC_F6, TD(TD_ESC_FUNC), 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_F7, KC_F8, 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(CS_GO), KC_UP,
|
||||
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[CS_GO] = SPLIT_SHIFT_KEYMAP(
|
||||
KC_TR, KC_TR, KC_GESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_FN0, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_LCTL, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,---------. ,-------------------------------------------------------------. ,---------.
|
||||
* | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
|
||||
* |---------| |-------------------------------------------------------------| |---------|
|
||||
* | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End |
|
||||
* |---------| |-------------------------------------------------------------| `---------'
|
||||
* | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
|
||||
* |---------| |-------------------------------------------------------------| ,----.
|
||||
* | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |---------| |--------------------------------------------------------------------------.
|
||||
* | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = SPLIT_SHIFT_KEYMAP(
|
||||
KC_TR, KC_TR, 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, TO(CS_GO), KC_HOME,
|
||||
KC_TR, KC_TR, KC_NO,KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
|
||||
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO,
|
||||
KC_TR, KC_TR, KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_NO, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,---------. ,-----------------------------------------------------------. ,-------------.
|
||||
* | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |---------| |-----------------------------------------------------------| |-------------|
|
||||
* | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-|
|
||||
* |---------| |-----------------------------------------------------------| `-------------'
|
||||
* | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST |
|
||||
* |---------| |-----------------------------------------------------------| ,----.
|
||||
* | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
|
||||
* |---------| |------------------------------------------------------------------------.
|
||||
* | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
|
||||
* `---------' `------------------------------------------------------' `--------------'
|
||||
*/
|
||||
[SETTINGS] = SPLIT_SHIFT_KEYMAP(
|
||||
KC_NO, KC_NO, KC_FN0,KC_FN3,KC_FN4,KC_FN5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
|
||||
KC_NO, KC_NO, DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MOD, RGB_VAD,
|
||||
KC_NO, KC_NO, KC_FN0, KC_FN6,KC_FN8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
|
||||
KC_NO, KC_NO, KC_FN10, KC_FN7,KC_FN9, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN0, KC_NO, RGB_HUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_FN0, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
|
||||
void tap_space_spam_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(get_mods() & (MOD_BIT(KC_LGUI))){
|
||||
return;
|
||||
}
|
||||
if(state->pressed){
|
||||
spam_space = true;
|
||||
}
|
||||
register_code(KC_SPC);
|
||||
unregister_code(KC_SPC);
|
||||
}
|
||||
|
||||
void tap_space_spam_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
spam_space = false;
|
||||
unregister_code(KC_SPC);
|
||||
}
|
||||
|
||||
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(state->pressed){
|
||||
layer_on(FUNC);
|
||||
}else{
|
||||
register_code(KC_ESC);
|
||||
unregister_code(KC_ESC);
|
||||
}
|
||||
}
|
||||
|
||||
void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
layer_off(FUNC);
|
||||
}
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
|
||||
[TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset),
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
|
||||
ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN4 - set base layer to 1 and save
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN5 - set base layer to 2 and save
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
|
||||
ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
|
||||
ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
if(spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))){
|
||||
register_code(KC_SPC);
|
||||
unregister_code(KC_SPC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if((layer_state & (1 << CS_GO)) && (keycode == 44)){
|
||||
if(get_mods() & (MOD_BIT(KC_LGUI))){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
@@ -1 +0,0 @@
|
||||
# The default keymap for bluepad
|
@@ -1,53 +0,0 @@
|
||||
# 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 = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # 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 # Disable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = no # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = yes
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -21,7 +21,6 @@ TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
@@ -35,10 +34,6 @@ ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(CAPSLOCK_LED)), yes)
|
||||
TMK_COMMON_DEFS += -DCAPSLOCK_LED
|
||||
endif
|
||||
|
||||
# Override the LFK78 hardware version:
|
||||
#
|
||||
# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,125 +0,0 @@
|
||||
#include "lfk78.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
FUNC, // 0x02
|
||||
SETTINGS, // 0x04
|
||||
};
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
|
||||
{0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
|
||||
{0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = ISO_KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,---------. ,------------------------------------------------------------. ,---------.
|
||||
* | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
|
||||
* |---------| |------------------------------------------------------------| |---------|
|
||||
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del|PgDn|
|
||||
* |---------| |--------------------------------------------------------. | `---------'
|
||||
* | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |
|
||||
* |---------| |-----------------------------------------------------------| ,----.
|
||||
* | F7 | F8 | |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |---------| |-------------------------------------------------------------------------.
|
||||
* | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
KC_F1, KC_F2, KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
|
||||
KC_F3, KC_F4, 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_ENT, KC_DEL, KC_PGDN,
|
||||
KC_F5, KC_F6, 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_F7, KC_F8, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,---------. ,-------------------------------------------------------------. ,---------.
|
||||
* | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
|
||||
* |---------| |-------------------------------------------------------------| |---------|
|
||||
* | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
|
||||
* |---------| |-------------------------------------------------------------| `---------'
|
||||
* | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
|
||||
* |---------| |-------------------------------------------------------------| ,----.
|
||||
* | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |---------| |--------------------------------------------------------------------------.
|
||||
* | | | |Ctrl|Win |Alt | PgD |Alt |Func |CTRL | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = KEYMAP(
|
||||
KC_TR, KC_TR, 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_TR, KC_HOME,
|
||||
KC_TR, KC_TR, KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
|
||||
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_NO,
|
||||
KC_TR, KC_TR, KC_TR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,---------. ,-------------------------------------------------------------. ,-------------.
|
||||
* | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |---------| |-------------------------------------------------------------| |-------------|
|
||||
* | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
|
||||
* |---------| |-------------------------------------------------------------| `-------------'
|
||||
* | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |---------| |-------------------------------------------------------------| ,----.
|
||||
* | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
|
||||
* |---------| |-------------------------------------------------------------------------.
|
||||
* | | | | | | | | | | | |Sat-|Hue-|Sat+|
|
||||
* `---------' `--------------------------------------------------------' `--------------'
|
||||
*/
|
||||
[SETTINGS] = KEYMAP(
|
||||
KC_NO, KC_NO, KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
|
||||
KC_NO, KC_NO, MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MOD, RGB_VAD,
|
||||
KC_NO, KC_NO, AU_TOG, KC_FN1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
|
||||
KC_NO, KC_NO, KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1 +0,0 @@
|
||||
# The default keymap for bluepad
|
@@ -1,53 +0,0 @@
|
||||
# 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 = 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,123 +0,0 @@
|
||||
#include "lfk78.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
FUNC, // 0x02
|
||||
SETTINGS, // 0x04
|
||||
};
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
|
||||
{0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
|
||||
{0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = SPLIT_BS_KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,---------. ,------------------------------------------------------------. ,---------.
|
||||
* | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = | / | ` | | Ins|PgUp|
|
||||
* |---------| |------------------------------------------------------------| |---------|
|
||||
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backsp| | Del|PgDn|
|
||||
* |---------| |------------------------------------------------------------| `---------'
|
||||
* | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |---------| |------------------------------------------------------------| ,----.
|
||||
* | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |---------| |-------------------------------------------------------------------------.
|
||||
* | F9 | F10| |Ctrl|Alt |Cmd | Space |Cmd |Ctrl|Func | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
KC_F1, KC_F2, 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_GRV, KC_INS, KC_PGUP,
|
||||
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, KC_PGDN,
|
||||
KC_F5, KC_F6, 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_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,---------. ,-------------------------------------------------------------. ,---------.
|
||||
* | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del | | Ins|Home|
|
||||
* |---------| |-------------------------------------------------------------| |---------|
|
||||
* | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
|
||||
* |---------| |-------------------------------------------------------------| `---------'
|
||||
* | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
|
||||
* |---------| |-------------------------------------------------------------| ,----.
|
||||
* | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |---------| |--------------------------------------------------------------------------.
|
||||
* | | | |Ctrl|Alt |Cmd | Enter |Alt |Func |CTRL | |Lft| Dn |Rig |
|
||||
* `---------' `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = SPLIT_BS_KEYMAP(
|
||||
KC_TR, KC_TR, 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_INS, KC_DEL, KC_TR, KC_HOME,
|
||||
KC_TR, KC_TR, KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
|
||||
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_NO,
|
||||
KC_TR, KC_TR, KC_TR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_ENT, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,---------. ,-------------------------------------------------------------. ,-------------.
|
||||
* | | | |LayClr| | | | | | | | | | |BL-|BL+| | | |RGB Tog |Val+|
|
||||
* |---------| |-------------------------------------------------------------| |-------------|
|
||||
* | | | |MuMode | | | | | | | | | | | | |BLTogl| |RGB Mode|Val-|
|
||||
* |---------| |-------------------------------------------------------------| `-------------'
|
||||
* | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |---------| |-------------------------------------------------------------| ,----.
|
||||
* | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
|
||||
* |---------| |-------------------------------------------------------------------------.
|
||||
* | | | | | | | | | | | |Sat-|Hue-|Sat+|
|
||||
* `---------' `--------------------------------------------------------' `--------------'
|
||||
*/
|
||||
[SETTINGS] = SPLIT_BS_KEYMAP(
|
||||
KC_NO, KC_NO, KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, KC_NO, KC_NO, RGB_TOG, RGB_VAI,
|
||||
KC_NO, KC_NO, MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_TOGG, RGB_MOD, RGB_VAD,
|
||||
KC_NO, KC_NO, AU_TOG, KC_FN1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
|
||||
KC_NO, KC_NO, KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
}
|
@@ -1 +0,0 @@
|
||||
# The split bs keymap for LFK78
|
@@ -1,47 +0,0 @@
|
||||
# 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 = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(CAPSLOCK_LED)), yes)
|
||||
TMK_COMMON_DEFS += -DCAPSLOCK_LED
|
||||
endif
|
||||
|
||||
# Override the LFK78 hardware version:
|
||||
#
|
||||
# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# J - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# LFK_REV = J
|
@@ -200,15 +200,7 @@ void reset_keyboard_kb(){
|
||||
void led_set_kb(uint8_t usb_led)
|
||||
{
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
#ifdef ISSI_ENABLE
|
||||
#ifdef CAPSLOCK_LED
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
activateLED(0, 3, 7, 255);
|
||||
}else{
|
||||
activateLED(0, 3, 7, 0);
|
||||
}
|
||||
#endif // CAPSLOCK_LED
|
||||
#endif // ISS_ENABLE
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
||||
|
||||
|
@@ -91,7 +91,7 @@ void click(uint16_t freq, uint16_t duration);
|
||||
{ k90, k91, k92, k93, k94, k95, k96, k97, }, \
|
||||
}
|
||||
#else
|
||||
/* RevC+ Keymap */
|
||||
/* RevC/D Keymap */
|
||||
// This a shortcut to help you visually see your layout.
|
||||
/*
|
||||
* ,---------. ,-----------------------------------------------------------------------. ,---------.
|
||||
@@ -122,20 +122,6 @@ void click(uint16_t freq, uint16_t duration);
|
||||
{k51, k52, k53, k54, k55, KC_NO, KC_NO, KC_NO, k59, KC_NO, KC_NO, KC_NO, k5D, k5E, k5F, k5G, k5H, k5I} \
|
||||
}
|
||||
|
||||
#define SPLIT_BS_KEYMAP( \
|
||||
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G, k1H, k1I, \
|
||||
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
|
||||
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
|
||||
k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
|
||||
k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
|
||||
) { \
|
||||
{k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I}, \
|
||||
{k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I}, \
|
||||
{k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, KC_NO, KC_NO}, \
|
||||
{k41, k42, k43, KC_NO, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, KC_NO, k4H, KC_NO}, \
|
||||
{k51, k52, k53, k54, k55, KC_NO, KC_NO, KC_NO, k59, KC_NO, KC_NO, KC_NO, k5D, k5E, k5F, k5G, k5H, k5I} \
|
||||
}
|
||||
|
||||
#define SPLIT_SHIFT_KEYMAP( \
|
||||
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
|
||||
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
|
||||
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,223 +0,0 @@
|
||||
#include "lfk87.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
#include "process_tap_dance.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
DEFAULT_WKL, // 0x02 Function in CapsLock location, gui key disabled
|
||||
DEFAULT_OSX, // 0x04 Function in CapsLock location, gui/alt swapped for OSX
|
||||
CS_GO, // 0x08 Function in CapsLock location, gui/alt swapped for OSX
|
||||
FUNC, // 0x10
|
||||
SETTINGS, // 0x20
|
||||
};
|
||||
|
||||
enum {
|
||||
TD_ESC_FUNC = 0,
|
||||
};
|
||||
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFF8, {0x00, 0xFF, 0x00}}, // base layers (VANILLA, DEFAULT_WKL, DEFAULT_OSX) - green
|
||||
{0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
|
||||
{0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
|
||||
{0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, \
|
||||
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_DELETE, 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, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
/* Keymap DEFAULT_TKL: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[DEFAULT_WKL] = KEYMAP(
|
||||
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_DELETE, 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, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* Keymap DEFAULT_OSX: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[DEFAULT_OSX] = KEYMAP(
|
||||
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_SLCK, KC_PAUS, LALT(KC_F5), \
|
||||
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_DELETE, KC_END, KC_PGDN, \
|
||||
TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC),MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
[CS_GO] = KEYMAP(
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_FN0, KC_TR, KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
|
||||
KC_LCTL, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,-------------------------------------------------------------. ,--------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
|
||||
* |-------------------------------------------------------------| `--------------'
|
||||
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
|
||||
* |-------------------------------------------------------------| ,----.
|
||||
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |-------------------------------------------------------------' ,-------------.
|
||||
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
|
||||
* `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = KEYMAP(
|
||||
KC_ESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_DEL, TO(CS_GO), KC_TR, KC_TR, \
|
||||
KC_NO,KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, \
|
||||
KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, \
|
||||
KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,-----------------------------------------------------------. ,-------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |-----------------------------------------------------------| |-------------|
|
||||
* |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
|
||||
* |-----------------------------------------------------------| `-------------'
|
||||
* |AU_TOG |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
|
||||
* |------------------------------------------------------------------------.
|
||||
* | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
|
||||
* `------------------------------------------------------' `--------------'
|
||||
*/
|
||||
[SETTINGS] = KEYMAP(
|
||||
KC_FN13, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, KC_NO, KC_NO, KC_NO,
|
||||
KC_FN0,KC_FN3,KC_FN4,KC_FN5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO,
|
||||
MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN2, RGB_MOD, RGB_VAD, KC_NO,
|
||||
AU_TOG, KC_FN6,KC_FN8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
|
||||
KC_FN10, KC_FN7,KC_FN9, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_FN0, RGB_HUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(state->pressed){
|
||||
layer_on(FUNC);
|
||||
}else{
|
||||
register_code(KC_ESC);
|
||||
unregister_code(KC_ESC);
|
||||
}
|
||||
}
|
||||
|
||||
void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
layer_off(FUNC);
|
||||
}
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
|
||||
ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_WKL), // FN4 - set base layer to 1 and save
|
||||
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_OSX), // FN5 - set base layer to 2 and save
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
|
||||
ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
|
||||
ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
|
||||
ACTION_FUNCTION(LFK_PLAY_ONEUP),
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if((layer_state & (1 << CS_GO)) && (keycode == 44)){
|
||||
if(get_mods() & (MOD_BIT(KC_LGUI))){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
@@ -1 +0,0 @@
|
||||
# The default keymap for LFK87
|
@@ -1,53 +0,0 @@
|
||||
# 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 = 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Disable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = yes
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,133 +0,0 @@
|
||||
#include "lfk87.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
FUNC, // 0x08
|
||||
SETTINGS, // 0x10
|
||||
};
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x00, 0x00, 0x00}}, // base layers - off
|
||||
{0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
|
||||
{0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_D), KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 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_DELETE, 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, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,-------------------------------------------------------------. ,--------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
|
||||
* |-------------------------------------------------------------| `--------------'
|
||||
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
|
||||
* |-------------------------------------------------------------| ,----.
|
||||
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |-------------------------------------------------------------' ,-------------.
|
||||
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
|
||||
* `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = KEYMAP(
|
||||
KC_ESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_DEL, KC_TR, KC_TR, KC_TR, \
|
||||
KC_NO,KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, \
|
||||
KC_TR, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, \
|
||||
KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, \
|
||||
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,-----------------------------------------------------------. ,-------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |-----------------------------------------------------------| |-------------|
|
||||
* |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
|
||||
* |-----------------------------------------------------------| `-------------'
|
||||
* |AudTgl |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
|
||||
* |--------------------------------------------------------------------------.
|
||||
* | | | | | | | | | |Sat-|Hue-|Sat+|
|
||||
* `----------------------------------------------------------------------------'
|
||||
*/
|
||||
[SETTINGS] = KEYMAP(
|
||||
KC_FN0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, KC_NO, KC_NO, KC_NO,
|
||||
KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO,
|
||||
MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN2, RGB_MOD, RGB_VAD, KC_NO,
|
||||
AU_TOG, KC_F1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
|
||||
KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1,54 +0,0 @@
|
||||
# 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 = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# Override the LFK87 hardware version.
|
||||
#
|
||||
# A - Green PCB. at90usb1286 Only 3 exist
|
||||
# B - We don't talk about RevB
|
||||
# C-D - Black PCB. at90usb646 First public release
|
||||
#
|
||||
# LFK_REV = C
|
||||
|
||||
# ifeq ($(LFK_REV), A)
|
||||
# MCU = at90usb1286
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=8192
|
||||
# else
|
||||
# MCU = at90usb646
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_TKL_REV_$(LFK_REV)
|
@@ -1,151 +0,0 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER LFKeyboards
|
||||
#define PRODUCT LFKPad 21
|
||||
#define DESCRIPTION QMK keyboard firmware for LFKPad LFK_REV_STRING
|
||||
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 4
|
||||
#define MATRIX_ROW_PINS { D5, F4, F6, F7, C7, C6}
|
||||
#define MATRIX_COL_PINS { F1, F0, D4, D6}
|
||||
#define UNUSED_PINS { }
|
||||
#define RGBLED_NUM 28 // Number of LEDs
|
||||
|
||||
#define RGB_DI_PIN C7 // Have to set it to something to get the ws2812 code to compile
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
#define RGBLIGHT_VAL_STEP 17
|
||||
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,52 +0,0 @@
|
||||
#include "lfkpad.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP( /* Base */
|
||||
KC_ESC, KC_TAB, KC_PEQL, MO(1), \
|
||||
KC_LNUM, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||
KC_P4, KC_P5, KC_P6, \
|
||||
KC_P1, KC_P2, KC_P3, KC_PENT, \
|
||||
KC_P0, KC_PDOT),
|
||||
|
||||
[1] = KEYMAP( /* RGB */
|
||||
RGB_SAI, RGB_VAI, RGB_HUI, KC_TRNS, \
|
||||
RGB_SAD, RGB_VAD, RGB_HUD, KC_TRNS, \
|
||||
RGB_M_X, RGB_M_G, RGB_MOD, RGB_RMOD, \
|
||||
RGB_M_SW, RGB_M_SN, RGB_M_K, \
|
||||
RGB_M_P, RGB_M_B, RGB_M_R, RGB_TOG, \
|
||||
KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1 +0,0 @@
|
||||
# The default keymap LFKPad 21
|
@@ -1,53 +0,0 @@
|
||||
# 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 = yes # 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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -1,176 +0,0 @@
|
||||
#include <avr/sfr_defs.h>
|
||||
#include <avr/timer_avr.h>
|
||||
#include <avr/wdt.h>
|
||||
#include "lfkpad.h"
|
||||
#include "keymap.h"
|
||||
#include "issi.h"
|
||||
#include "TWIlib.h"
|
||||
#include "lighting.h"
|
||||
#include "debug.h"
|
||||
#include "quantum.h"
|
||||
|
||||
uint16_t click_hz = CLICK_HZ;
|
||||
uint16_t click_time = CLICK_MS;
|
||||
uint8_t click_toggle = CLICK_ENABLED;
|
||||
|
||||
|
||||
void matrix_init_kb(void)
|
||||
{
|
||||
matrix_init_user();
|
||||
#ifndef AUDIO_ENABLE
|
||||
// If we're not using the audio pin, drive it low
|
||||
sbi(DDRC, 6);
|
||||
cbi(PORTC, 6);
|
||||
#endif
|
||||
|
||||
#ifdef ISSI_ENABLE
|
||||
issi_init();
|
||||
#endif
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
// This is done after turning the layer LED red, if we're caught in a loop
|
||||
// we should get a flashing red light
|
||||
wdt_enable(WDTO_500MS);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void)
|
||||
{
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
wdt_reset();
|
||||
#endif
|
||||
#ifdef ISSI_ENABLE
|
||||
// switch/underglow lighting update
|
||||
static uint32_t issi_device = 0;
|
||||
static uint32_t twi_last_ready = 0;
|
||||
if(twi_last_ready > 1000){
|
||||
// Its been way too long since the last ISSI update, reset the I2C bus and start again
|
||||
dprintf("TWI failed to recover, TWI re-init\n");
|
||||
twi_last_ready = 0;
|
||||
TWIInit();
|
||||
force_issi_refresh();
|
||||
}
|
||||
if(isTWIReady()){
|
||||
twi_last_ready = 0;
|
||||
// If the i2c bus is available, kick off the issi update, alternate between devices
|
||||
update_issi(issi_device, issi_device);
|
||||
if(issi_device){
|
||||
issi_device = 0;
|
||||
}else{
|
||||
issi_device = 3;
|
||||
}
|
||||
}else{
|
||||
twi_last_ready++;
|
||||
}
|
||||
#endif
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
void click(uint16_t freq, uint16_t duration){
|
||||
#ifdef AUDIO_ENABLE
|
||||
if(freq >= 100 && freq <= 20000 && duration < 100){
|
||||
play_note(freq, 10);
|
||||
for (uint16_t i = 0; i < duration; i++){
|
||||
_delay_ms(1);
|
||||
}
|
||||
stop_all_notes();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t* record)
|
||||
{
|
||||
if (click_toggle && record->event.pressed){
|
||||
click(click_hz, click_time);
|
||||
}
|
||||
if (keycode == RESET) {
|
||||
reset_keyboard_kb();
|
||||
} else {
|
||||
}
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
#ifdef AUDIO_ENABLE
|
||||
int8_t sign = 1;
|
||||
#endif
|
||||
if(id == LFK_ESC_TILDE){
|
||||
// Send ~ on shift-esc
|
||||
void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
|
||||
uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
|
||||
if(layer_state == 0){
|
||||
method(shifted ? KC_GRAVE : KC_ESCAPE);
|
||||
}else{
|
||||
method(shifted ? KC_ESCAPE : KC_GRAVE);
|
||||
}
|
||||
send_keyboard_report();
|
||||
}else if(event->event.pressed){
|
||||
switch(id){
|
||||
case LFK_SET_DEFAULT_LAYER:
|
||||
// set/save the current base layer to eeprom, falls through to LFK_CLEAR
|
||||
eeconfig_update_default_layer(1UL << opt);
|
||||
default_layer_set(1UL << opt);
|
||||
case LFK_CLEAR:
|
||||
// Go back to default layer
|
||||
layer_clear();
|
||||
break;
|
||||
#ifdef AUDIO_ENABLE
|
||||
case LFK_CLICK_FREQ_LOWER:
|
||||
sign = -1; // continue to next statement
|
||||
case LFK_CLICK_FREQ_HIGHER:
|
||||
click_hz += sign * 100;
|
||||
click(click_hz, click_time);
|
||||
break;
|
||||
case LFK_CLICK_TOGGLE:
|
||||
if(click_toggle){
|
||||
click_toggle = 0;
|
||||
click(4000, 100);
|
||||
click(1000, 100);
|
||||
}else{
|
||||
click_toggle = 1;
|
||||
click(1000, 100);
|
||||
click(4000, 100);
|
||||
}
|
||||
break;
|
||||
case LFK_CLICK_TIME_SHORTER:
|
||||
sign = -1; // continue to next statement
|
||||
case LFK_CLICK_TIME_LONGER:
|
||||
click_time += sign;
|
||||
click(click_hz, click_time);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void reset_keyboard_kb(){
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
MCUSR = 0;
|
||||
wdt_disable();
|
||||
wdt_reset();
|
||||
#endif
|
||||
reset_keyboard();
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led)
|
||||
{
|
||||
led_set_user(usb_led);
|
||||
}
|
||||
|
||||
// LFK lighting info
|
||||
const uint8_t rgb_matrices[] = {0, 1};
|
||||
const uint8_t rgb_sequence[] = {
|
||||
32, 1, 2, 3,
|
||||
31, 30, 5, 6,
|
||||
28, 27, 7, 8,
|
||||
17, 18, 9,
|
||||
19, 21, 11, 12,
|
||||
22, 14,
|
||||
|
||||
16, 26,
|
||||
4, 25,
|
||||
13, 24,
|
||||
20
|
||||
|
||||
};
|
@@ -1,73 +0,0 @@
|
||||
#ifndef LFKPAD_H
|
||||
#define LFKPAD_H
|
||||
|
||||
/* if the kb.h file exists (because we're running from qmkbuilder) include it */
|
||||
#if __has_include("kb.h")
|
||||
#include "kb.h"
|
||||
#endif
|
||||
|
||||
#include "quantum.h"
|
||||
#include "matrix.h"
|
||||
#include <avr/sfr_defs.h>
|
||||
|
||||
#ifndef cbi
|
||||
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
||||
#endif
|
||||
|
||||
#ifndef sbi
|
||||
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct RGB_Color {
|
||||
uint16_t red;
|
||||
uint16_t green;
|
||||
uint16_t blue;
|
||||
} RGB_Color;
|
||||
|
||||
typedef struct Layer_Info {
|
||||
uint32_t layer;
|
||||
uint32_t mask;
|
||||
RGB_Color color;
|
||||
} Layer_Info;
|
||||
|
||||
extern const uint32_t layer_count;
|
||||
extern const Layer_Info layer_info[];
|
||||
|
||||
enum action_functions {
|
||||
LFK_CLEAR = 0, // Resets all layers
|
||||
LFK_ESC_TILDE, // esc+lshift = ~
|
||||
LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
|
||||
LFK_CLICK_TOGGLE, // Adjusts click duration
|
||||
LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
|
||||
LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
|
||||
LFK_CLICK_TIME_LONGER, // Adjusts click duration
|
||||
LFK_CLICK_TIME_SHORTER, // Adjusts click duration
|
||||
LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
|
||||
LFK_LED_TEST // cycles through switch and RGB LEDs
|
||||
};
|
||||
|
||||
#define CLICK_HZ 500
|
||||
#define CLICK_MS 2
|
||||
#define CLICK_ENABLED 0
|
||||
|
||||
void reset_keyboard_kb(void);
|
||||
void click(uint16_t freq, uint16_t duration);
|
||||
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03,\
|
||||
k10, k11, k12, k13,\
|
||||
k20, k21, k22, k23,\
|
||||
k30, k31, k32,\
|
||||
k40, k41, k42, k43,\
|
||||
k50, k52\
|
||||
) { \
|
||||
{ k00, k01, k02, k03 }, \
|
||||
{ k10, k11, k12, k13 }, \
|
||||
{ k20, k21, k22, k23 }, \
|
||||
{ k30, k31, k32, KC_NO }, \
|
||||
{ k40, k41, k42, k43 }, \
|
||||
{ k50, KC_NO, k52, KC_NO } \
|
||||
}
|
||||
|
||||
#endif //LFKPAD_H
|
@@ -1,28 +0,0 @@
|
||||
bluepad keyboard firmware
|
||||
======================
|
||||
|
||||
## Quantum MK Firmware
|
||||
|
||||
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
|
||||
|
||||
## Building
|
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/bluepad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||
|
||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||
|
||||
### Default
|
||||
|
||||
To build with the default keymap, simply run `make`.
|
||||
|
||||
### Other Keymaps
|
||||
|
||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
|
||||
|
||||
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
|
||||
|
||||
```
|
||||
$ make keymap=[default|jack|<name>]
|
||||
```
|
||||
|
||||
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
@@ -1,14 +0,0 @@
|
||||
SRC = TWIlib.c issi.c lighting.c
|
||||
|
||||
MCU = atmega32u4
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
F_CPU = 16000000
|
||||
F_USB = $(F_CPU)
|
||||
ARCH = AVR8
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../Makefile
|
||||
endif
|
@@ -16,9 +16,7 @@
|
||||
|
||||
extern rgblight_config_t rgblight_config; // Declared in rgblight.c
|
||||
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
const uint8_t backlight_pwm_map[BACKLIGHT_LEVELS] = BACKLIGHT_PWM_MAP;
|
||||
#endif
|
||||
|
||||
// RGB# to ISSI matrix, this is the same across all revisions
|
||||
const uint8_t rgb_leds[][3][2] = {
|
||||
|
@@ -1,159 +0,0 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER LFKeyboards
|
||||
#define PRODUCT LFK87
|
||||
#define DESCRIPTION QMK keyboard firmware for LFK87
|
||||
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Matrix config */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 19
|
||||
#define MATRIX_ROW_PINS {D7, E1, F2, F0, F1}
|
||||
#define MATRIX_COL_PINS {E6, E0, A3, A4, A5, A6, A7, C7, C5, C4, C3, C2, C1, C0, D6, A2, A1, A0, F3}
|
||||
#define UNUSED_PINS {}
|
||||
#define RGBLED_NUM 26 // Number of LEDs
|
||||
|
||||
#define AUDIO_VOICES
|
||||
#define C6_AUDIO
|
||||
|
||||
#define BACKLIGHT_LEVELS 10
|
||||
#define BACKLIGHT_PWM_MAP {2, 4, 8, 16, 40, 55, 70, 128, 200, 255}
|
||||
|
||||
#define RGB_DI_PIN F4 // Have to set it to something to get the ws2812 code to compile
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
#define RGBLIGHT_VAL_STEP 17
|
||||
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,154 +0,0 @@
|
||||
#include "mini1800.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
#include "process_tap_dance.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
FUNC, // 0x08
|
||||
SETTINGS, // 0x10
|
||||
};
|
||||
|
||||
enum {
|
||||
TD_ESC_FUNC = 0,
|
||||
TD_ESC_CTRL,
|
||||
TD_SPC_SPAM
|
||||
};
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x00, 0xFF, 0x00}}, // base layers - green
|
||||
{0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
|
||||
{0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
||||
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_P7, KC_P8, KC_P9, KC_PPLS,
|
||||
TD(TD_ESC_FUNC), 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_P4, KC_P5, KC_P6, LALT(KC_F5),
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,-------------------------------------------------------------. ,--------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
|
||||
* |-------------------------------------------------------------| `--------------'
|
||||
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
|
||||
* |-------------------------------------------------------------| ,----.
|
||||
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |-------------------------------------------------------------' ,-------------.
|
||||
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
|
||||
* `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = KEYMAP(
|
||||
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_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO,KC_NO, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,-----------------------------------------------------------. ,-------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |-----------------------------------------------------------| |-------------|
|
||||
* |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
|
||||
* |-----------------------------------------------------------| `-------------'
|
||||
* |AudTgl |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
|
||||
* |--------------------------------------------------------------------------.
|
||||
* | | | | | | | | | |Sat-|Hue-|Sat+|
|
||||
* `----------------------------------------------------------------------------'
|
||||
*/
|
||||
[SETTINGS] = KEYMAP(
|
||||
KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO, KC_NO,
|
||||
MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN2, RGB_MOD, RGB_VAD, KC_NO, KC_NO,
|
||||
AU_TOG, KC_F1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI, KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(state->pressed){
|
||||
layer_on(FUNC);
|
||||
}else{
|
||||
register_code(KC_ESC);
|
||||
unregister_code(KC_ESC);
|
||||
}
|
||||
}
|
||||
|
||||
void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
layer_off(FUNC);
|
||||
}
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1,53 +0,0 @@
|
||||
# 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 = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = yes
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,130 +0,0 @@
|
||||
#include "mini1800.h"
|
||||
#include "issi.h"
|
||||
#include "lighting.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0, // matches MF68 layout
|
||||
FUNC, // 0x08
|
||||
SETTINGS, // 0x10
|
||||
};
|
||||
|
||||
// Colors of the layer indicator LED
|
||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
|
||||
const Layer_Info layer_info[] = {
|
||||
// Layer Mask Red Green Blue
|
||||
{0x00000000, 0xFFFFFFFF, {0x00, 0xFF, 0x00}}, // base layers - green
|
||||
{0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
|
||||
{0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
|
||||
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,-----------------------------------------------------------------------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
|
||||
* |-----------------------------------------------------------| |--------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
|
||||
* |-----------------------------------------------------------| `--------------'
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
|
||||
* |-----------------------------------------------------------| ,-------------.
|
||||
* |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------' `-------------'
|
||||
*/
|
||||
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_NLCK, KC_PSLS, KC_PAST, KC_PEQL,
|
||||
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_P7, KC_P8, KC_P9, KC_PMNS,
|
||||
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_P4, KC_P5, KC_P6, KC_PPLS,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
|
||||
/* Keymap FUNCTION: Function Layer
|
||||
* ,-------------------------------------------------------------. ,--------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
|
||||
* |-------------------------------------------------------------| `--------------'
|
||||
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
|
||||
* |-------------------------------------------------------------| ,----.
|
||||
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
|
||||
* |-------------------------------------------------------------' ,-------------.
|
||||
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
|
||||
* `------------------------------------------------------' `-------------'
|
||||
*/
|
||||
[FUNC] = KEYMAP(
|
||||
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_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO,KC_NO, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
|
||||
/* Keymap SETTINGS: Settings Layer
|
||||
* ,-----------------------------------------------------------. ,-------------.
|
||||
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
|
||||
* |-------------------------------------------------------------| |--------------|
|
||||
* |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
|
||||
* |-----------------------------------------------------------| |-------------|
|
||||
* |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
|
||||
* |-----------------------------------------------------------| `-------------'
|
||||
* |AudTgl |Hz+|MS+| | | | | | | | | | RST |
|
||||
* |-----------------------------------------------------------| ,----.
|
||||
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
|
||||
* |--------------------------------------------------------------------------.
|
||||
* | | | | | | | | | |Sat-|Hue-|Sat+|
|
||||
* `----------------------------------------------------------------------------'
|
||||
*/
|
||||
[SETTINGS] = KEYMAP(
|
||||
KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO, KC_NO,
|
||||
MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN2, RGB_MOD, RGB_VAD, KC_NO, KC_NO,
|
||||
AU_TOG, KC_F1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI, KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
// This keymap only has a single base layer, so reset the default if needed
|
||||
if(eeconfig_read_default_layer() > 1){
|
||||
eeconfig_update_default_layer(1);
|
||||
default_layer_set(1);
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1,53 +0,0 @@
|
||||
# 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 = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # 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 = yes # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
@@ -1,223 +0,0 @@
|
||||
|
||||
#include <avr/sfr_defs.h>
|
||||
#include <avr/timer_avr.h>
|
||||
#include <avr/wdt.h>
|
||||
#include "mini1800.h"
|
||||
#include "keymap.h"
|
||||
#include "issi.h"
|
||||
#include "TWIlib.h"
|
||||
#include "lighting.h"
|
||||
#include "debug.h"
|
||||
|
||||
#define BACKLIGHT_BREATHING
|
||||
#include "quantum.h"
|
||||
|
||||
uint16_t click_hz = CLICK_HZ;
|
||||
uint16_t click_time = CLICK_MS;
|
||||
uint8_t click_toggle = CLICK_ENABLED;
|
||||
float my_song[][2] = SONG(ZELDA_PUZZLE);
|
||||
|
||||
|
||||
void matrix_init_kb(void)
|
||||
{
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user();
|
||||
set_rgb(31, 0x00, 0x00, 0x00); // Caps lock
|
||||
set_rgb(32, 0xFF, 0x00, 0x00); // Layer indicator, start red
|
||||
#ifndef AUDIO_ENABLE
|
||||
// If we're not using the audio pin, drive it low
|
||||
sbi(DDRC, 6);
|
||||
cbi(PORTC, 6);
|
||||
#endif
|
||||
_delay_ms(500);
|
||||
#ifdef ISSI_ENABLE
|
||||
issi_init();
|
||||
#endif
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
// This is done after turning the layer LED red, if we're caught in a loop
|
||||
// we should get a flashing red light
|
||||
wdt_enable(WDTO_500MS);
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void)
|
||||
{
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
wdt_reset();
|
||||
#endif
|
||||
#ifdef ISSI_ENABLE
|
||||
// switch/underglow lighting update
|
||||
static uint32_t issi_device = 0;
|
||||
static uint32_t twi_last_ready = 0;
|
||||
if(twi_last_ready > 1000){
|
||||
// Its been way too long since the last ISSI update, reset the I2C bus and start again
|
||||
twi_last_ready = 0;
|
||||
TWIInit();
|
||||
force_issi_refresh();
|
||||
}
|
||||
if(isTWIReady()){
|
||||
twi_last_ready = 0;
|
||||
// If the i2c bus is available, kick off the issi update, alternate between devices
|
||||
update_issi(issi_device, issi_device);
|
||||
if(issi_device){
|
||||
issi_device = 0;
|
||||
}else{
|
||||
issi_device = 3;
|
||||
}
|
||||
}else{
|
||||
twi_last_ready++;
|
||||
}
|
||||
#endif
|
||||
// Update layer indicator LED
|
||||
//
|
||||
// Not sure how else to reliably do this... TMK has the 'hook_layer_change'
|
||||
// but can't find QMK equiv
|
||||
static uint32_t layer_indicator = -1;
|
||||
if(layer_indicator != layer_state){
|
||||
for(uint32_t i=0;; i++){
|
||||
// the layer_info list should end with layer 0xFFFF
|
||||
// it will break this out of the loop and define the unknown layer color
|
||||
if((layer_info[i].layer == (layer_state & layer_info[i].mask)) || (layer_info[i].layer == 0xFFFFFFFF)){
|
||||
set_rgb(32, layer_info[i].color.red, layer_info[i].color.green, layer_info[i].color.blue);
|
||||
layer_indicator = layer_state;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
void click(uint16_t freq, uint16_t duration){
|
||||
#ifdef AUDIO_ENABLE
|
||||
if(freq >= 100 && freq <= 20000 && duration < 100){
|
||||
play_note(freq, 10);
|
||||
for (uint16_t i = 0; i < duration; i++){
|
||||
_delay_ms(1);
|
||||
}
|
||||
stop_all_notes();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t* record)
|
||||
{
|
||||
if (click_toggle && record->event.pressed){
|
||||
click(click_hz, click_time);
|
||||
}
|
||||
if (keycode == RESET) {
|
||||
reset_keyboard_kb();
|
||||
} else {
|
||||
}
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
#ifdef AUDIO_ENABLE
|
||||
int8_t sign = 1;
|
||||
#endif
|
||||
if(id == LFK_ESC_TILDE){
|
||||
// Send ~ on shift-esc
|
||||
void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
|
||||
uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
|
||||
method(shifted ? KC_GRAVE : KC_ESCAPE);
|
||||
send_keyboard_report();
|
||||
}else if(event->event.pressed){
|
||||
switch(id){
|
||||
case LFK_SET_DEFAULT_LAYER:
|
||||
// set/save the current base layer to eeprom, falls through to LFK_CLEAR
|
||||
eeconfig_update_default_layer(1UL << opt);
|
||||
default_layer_set(1UL << opt);
|
||||
case LFK_CLEAR:
|
||||
// Go back to default layer
|
||||
layer_clear();
|
||||
break;
|
||||
#ifdef ISSI_ENABLE
|
||||
case LFK_LED_TEST:
|
||||
led_test();
|
||||
break;
|
||||
#endif
|
||||
#ifdef AUDIO_ENABLE
|
||||
case LFK_CLICK_FREQ_LOWER:
|
||||
sign = -1; // continue to next statement
|
||||
case LFK_CLICK_FREQ_HIGHER:
|
||||
click_hz += sign * 100;
|
||||
click(click_hz, click_time);
|
||||
break;
|
||||
case LFK_CLICK_TOGGLE:
|
||||
if(click_toggle){
|
||||
click_toggle = 0;
|
||||
click(4000, 100);
|
||||
click(1000, 100);
|
||||
}else{
|
||||
click_toggle = 1;
|
||||
click(1000, 100);
|
||||
click(4000, 100);
|
||||
}
|
||||
break;
|
||||
case LFK_CLICK_TIME_SHORTER:
|
||||
sign = -1; // continue to next statement
|
||||
case LFK_CLICK_TIME_LONGER:
|
||||
click_time += sign;
|
||||
click(click_hz, click_time);
|
||||
break;
|
||||
#endif
|
||||
case LFK_PLAY_ONEUP:
|
||||
PLAY_SONG(my_song);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void reset_keyboard_kb(){
|
||||
#ifdef WATCHDOG_ENABLE
|
||||
MCUSR = 0;
|
||||
wdt_disable();
|
||||
wdt_reset();
|
||||
#endif
|
||||
set_rgb(31, 0x00, 0xFF, 0xFF);
|
||||
set_rgb(32, 0x00, 0xFF, 0xFF);
|
||||
force_issi_refresh();
|
||||
reset_keyboard();
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led)
|
||||
{
|
||||
// Set capslock LED to Blue
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
set_rgb(31, 0x00, 0x00, 0x7F);
|
||||
}else{
|
||||
set_rgb(31, 0x00, 0x00, 0x00);
|
||||
}
|
||||
led_set_user(usb_led);
|
||||
}
|
||||
|
||||
// Lighting info, see lighting.h for details
|
||||
const uint8_t switch_matrices[] = {0, 1};
|
||||
const uint8_t rgb_matrices[] = {6, 7};
|
||||
|
||||
// RGB Map:
|
||||
// 27 29 10 9 8 7 6
|
||||
// 26 5
|
||||
// 25 4
|
||||
// 24 3
|
||||
// 23 22 21 20 14 15 11 1 2
|
||||
const uint8_t rgb_sequence[] = {
|
||||
30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 1, 2, 3, 4, 5, 6, 7, 8, 13, 14, 15, 16
|
||||
};
|
||||
|
||||
// Maps switch LEDs from Row/Col to ISSI matrix.
|
||||
// Value breakdown:
|
||||
// Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
||||
// | | ISSI Col | ISSI Row |
|
||||
// / |
|
||||
// Device
|
||||
const uint8_t switch_leds[MATRIX_ROWS][MATRIX_COLS] =
|
||||
KEYMAP(
|
||||
0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91,
|
||||
0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0xA9, 0xA8, 0xA7, 0xA6, 0xA5, 0xA4, 0xA3, 0xA2, 0xA1,
|
||||
0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0xB9, 0xB8, 0xB7, 0xB6, 0xB5, 0xB3,
|
||||
0x49, 0x48, 0x47, 0x45, 0x44, 0x43, 0x42, 0x41, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, 0xC4, 0xC2,
|
||||
0x59, 0x58, 0x57, 0x56, 0x55, 0x51, 0xD6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE1,
|
||||
0x00, 0x00, 0x00, 0x00);
|
@@ -1,89 +0,0 @@
|
||||
#ifndef LFK87_H
|
||||
#define LFK87_H
|
||||
|
||||
/* if the kb.h file exists (because we're running from qmkbuilder) include it */
|
||||
#if __has_include("kb.h")
|
||||
#include "kb.h"
|
||||
#endif
|
||||
|
||||
#include "quantum.h"
|
||||
#include "matrix.h"
|
||||
#include <avr/sfr_defs.h>
|
||||
|
||||
#ifndef cbi
|
||||
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
||||
#endif
|
||||
|
||||
#ifndef sbi
|
||||
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct RGB_Color {
|
||||
uint16_t red;
|
||||
uint16_t green;
|
||||
uint16_t blue;
|
||||
} RGB_Color;
|
||||
|
||||
typedef struct Layer_Info {
|
||||
uint32_t layer;
|
||||
uint32_t mask;
|
||||
RGB_Color color;
|
||||
} Layer_Info;
|
||||
|
||||
extern const uint32_t layer_count;
|
||||
extern const Layer_Info layer_info[];
|
||||
|
||||
enum action_functions {
|
||||
LFK_CLEAR = 0, // Resets all layers
|
||||
LFK_ESC_TILDE, // esc+lshift = ~
|
||||
LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
|
||||
LFK_CLICK_TOGGLE, // Adjusts click duration
|
||||
LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
|
||||
LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
|
||||
LFK_CLICK_TIME_LONGER, // Adjusts click duration
|
||||
LFK_CLICK_TIME_SHORTER, // Adjusts click duration
|
||||
LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
|
||||
LFK_LED_TEST, // cycles through switch and RGB LEDs
|
||||
LFK_PLAY_ONEUP
|
||||
};
|
||||
|
||||
#define CLICK_HZ 500
|
||||
#define CLICK_MS 2
|
||||
#define CLICK_ENABLED 0
|
||||
|
||||
void reset_keyboard_kb(void);
|
||||
void click(uint16_t freq, uint16_t duration);
|
||||
|
||||
#define k00 KC_NO
|
||||
|
||||
// a = 10
|
||||
// b = 11
|
||||
// c = 12
|
||||
// d = 13
|
||||
// e = 14
|
||||
// f = 15
|
||||
// g = 16
|
||||
// h = 17
|
||||
// i = 18
|
||||
// j = 19
|
||||
|
||||
#ifndef KEYMAP
|
||||
#define KEYMAP( \
|
||||
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1f, k1g, k1h, k1i, k1j,\
|
||||
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2g, k2h, k2i, k2j,\
|
||||
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k2f, k3g, k3h, k3i, k3j,\
|
||||
k41, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4f, k4g, k4h, k4i, k4j,\
|
||||
k51, k52, k53, k56, k5b, k5c, k5d, k5f, k5g, k5h, k5i, k5j \
|
||||
) \
|
||||
{ \
|
||||
{k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k00, k1f, k1g, k1h, k1i, k1j}, \
|
||||
{k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, k2h, k2i, k2j}, \
|
||||
{k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k00, k00, k00, k3g, k3h, k3i, k3j}, \
|
||||
{k41, k00, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k00, k4f, k4g, k4h, k4i, k4j}, \
|
||||
{k51, k52, k53, k00, k00, k56, k00, k00, k00, k00, k5b, k5c, k5d, k00, k5f, k5g, k5h, k5i, k5j}, \
|
||||
}
|
||||
|
||||
#endif //!KEYMAP#endif
|
||||
|
||||
#endif //LFK87_H
|
@@ -1,62 +0,0 @@
|
||||
# Set the LFK87 hardware version.
|
||||
#
|
||||
# RevA - Green PCB. at90usb1286 Only 3 exist
|
||||
# RevB - We don't talk about RevB
|
||||
# RevC - Black PCB. at90usb646 First public release
|
||||
#
|
||||
# Set to A or C
|
||||
LFK_REV = C
|
||||
|
||||
ifeq ($(LFK_REV), A)
|
||||
MCU = at90usb1286
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=8192
|
||||
else
|
||||
MCU = at90usb646
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
endif
|
||||
OPT_DEFS += -DLFK_TKL_REV_$(LFK_REV)
|
||||
|
||||
# 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
|
||||
|
||||
# ifndef QUANTUM_DIR
|
||||
# include ../../Makefile
|
||||
# endif
|
||||
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
# TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
@@ -37,29 +37,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* ,------------------------------------------------------------.----.
|
||||
* |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| \| Del|
|
||||
* |AudTgl| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| Del|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '|Return |PgUp|
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |ClickTgl|Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
|
||||
* |-----------------------------------------------------------------|
|
||||
* |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------------'
|
||||
*/
|
||||
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_F13, KC_F14,
|
||||
MU_MOD, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_TOG,
|
||||
AU_TOG, KC_FN1,KC_FN3, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RESET, RGB_MOD,
|
||||
KC_FN5, KC_FN2,KC_FN4, KC_TR, KC_TR, KC_TR, KC_TR, MU_TOG, RGB_VAD, RGB_VAI, KC_TR, KC_TR, RGB_HUI, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
AU_TOG, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
|
||||
};
|
||||
|
||||
|
||||
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1,89 +0,0 @@
|
||||
#include "smk65.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
//Define a shorter 'transparent' key code to make the keymaps more compact
|
||||
#define KC_TR KC_TRNS
|
||||
|
||||
enum keymap_layout {
|
||||
VANILLA = 0,
|
||||
FUNC,
|
||||
SETTINGS,
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[VANILLA] = ISO_KEYMAP(
|
||||
/* Keymap VANILLA: (Base Layer) Default Layer
|
||||
* ,------------------------------------------------------------.----.
|
||||
* |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret | Del|
|
||||
* |--------------------------------------------------------. |----|
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |PgUp|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | Up |PgDn|
|
||||
* |-----------------------------------------------------------------|
|
||||
* |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------------'
|
||||
*/
|
||||
KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, 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_PGUP,
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[FUNC] = ISO_KEYMAP(
|
||||
/* Keymap VANILLA: Function Layer
|
||||
* ,------------------------------------------------------------.----.
|
||||
* |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| Ins|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |MuMode | | | |E| R| T| Y| U| I| O| P| [| ]| RESET| Del|
|
||||
* |--------------------------------------------------------. |----|
|
||||
* |AudTgl|Hz+|MS+| | D| F| G| H| J| K| L| ;| '| | |PgUp|
|
||||
* |------------------------------------------------------------|----|
|
||||
* |CTgl| |Hz-|MS-|| C| V| B| N|MuTgl| ,| .| /|Shift |Up |PgDn|
|
||||
* |-----------------------------------------------------------------|
|
||||
* |Ctrl|Win |Alt | Space |Alt |Ctrl|Func|Lft| Dn |Rig |
|
||||
* `-----------------------------------------------------------------'
|
||||
*/
|
||||
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_F13, KC_F14,
|
||||
MU_MOD, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RESET, RGB_TOG,
|
||||
AU_TOG, KC_FN1,KC_FN3, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_MOD,
|
||||
KC_FN5, KC_TR, KC_FN2,KC_FN4, KC_TR, KC_TR, KC_TR, KC_TR, MU_TOG, RGB_VAD, RGB_VAI, KC_TR, KC_TR, RGB_HUI, KC_TR,
|
||||
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
|
||||
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
|
||||
};
|
||||
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
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) {
|
||||
|
||||
}
|
@@ -1,53 +0,0 @@
|
||||
# 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 = 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 = no # Disable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Disable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Disable RGB underlight
|
||||
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
TAP_DANCE_ENABLE = no
|
||||
|
||||
ISSI_ENABLE = no # If the I2C pullup resistors aren't install this must be disabled
|
||||
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
|
||||
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DISSI_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
|
||||
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
|
||||
endif
|
||||
|
||||
|
||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
|
||||
# #
|
||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
|
||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
|
||||
# #
|
||||
# # Set to B, C or D
|
||||
# LFK_REV = D
|
||||
|
||||
# ifeq ($(LFK_REV), B)
|
||||
# MCU = atmega32u4
|
||||
# else
|
||||
# MCU = at90usb1286
|
||||
# endif
|
||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
|
||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user