From 2758158a4bb15b0f5ec30de92760133248afe1f8 Mon Sep 17 00:00:00 2001 From: alex-ong Date: Sun, 12 Aug 2018 17:23:58 +1000 Subject: [PATCH 0001/1763] Added xeal60 via clone of lets split --- keyboards/handwired/xeal60/config.h | 24 + keyboards/handwired/xeal60/i2c.c | 162 ++++++ keyboards/handwired/xeal60/i2c.h | 49 ++ keyboards/handwired/xeal60/info.json | 12 + .../xeal60/keymaps/DE_simple/config.h | 37 ++ .../xeal60/keymaps/DE_simple/keymap.c | 155 ++++++ .../xeal60/keymaps/DE_simple/readme.md | 59 +++ .../xeal60/keymaps/DE_simple/rules.mk | 0 .../xeal60/keymaps/OLED_sample/config.h | 60 +++ .../xeal60/keymaps/OLED_sample/keymap.c | 441 ++++++++++++++++ .../xeal60/keymaps/OLED_sample/readme.md | 25 + .../xeal60/keymaps/OLED_sample/rules.mk | 25 + .../handwired/xeal60/keymaps/adam/config.h | 50 ++ .../handwired/xeal60/keymaps/adam/keymap.c | 78 +++ .../xeal60/keymaps/bbaserdem/README.md | 27 + .../xeal60/keymaps/bbaserdem/config.h | 27 + .../xeal60/keymaps/bbaserdem/keymap.c | 36 ++ .../xeal60/keymaps/bbaserdem/rules.mk | 11 + .../xeal60/keymaps/bbaserdem_right/README.md | 5 + .../xeal60/keymaps/bbaserdem_right/config.h | 9 + .../xeal60/keymaps/bbaserdem_right/keymap.c | 31 ++ .../xeal60/keymaps/bbaserdem_right/rules.mk | 26 + .../xeal60/keymaps/cpeters1982/config.h | 54 ++ .../xeal60/keymaps/cpeters1982/keymap.c | 221 ++++++++ .../xeal60/keymaps/cpeters1982/rules.mk | 8 + .../handwired/xeal60/keymaps/default/config.h | 37 ++ .../handwired/xeal60/keymaps/default/keymap.c | 211 ++++++++ .../handwired/xeal60/keymaps/default/rules.mk | 3 + .../handwired/xeal60/keymaps/dlaroe/config.h | 37 ++ .../handwired/xeal60/keymaps/dlaroe/keymap.c | 255 ++++++++++ .../handwired/xeal60/keymaps/dlaroe/rules.mk | 0 .../handwired/xeal60/keymaps/drashna/config.h | 80 +++ .../handwired/xeal60/keymaps/drashna/keymap.c | 98 ++++ .../handwired/xeal60/keymaps/drashna/rules.mk | 25 + .../xeal60/keymaps/drashna_old/config.h | 86 ++++ .../xeal60/keymaps/drashna_old/keymap.c | 1 + .../xeal60/keymaps/drashna_old/rules.mk | 28 ++ .../xeal60/keymaps/dwallace/config.h | 43 ++ .../xeal60/keymaps/dwallace/keymap.c | 224 +++++++++ .../xeal60/keymaps/dwallace/rules.mk | 1 + .../handwired/xeal60/keymaps/fabian/config.h | 34 ++ .../handwired/xeal60/keymaps/fabian/keymap.c | 271 ++++++++++ .../handwired/xeal60/keymaps/fabian/rules.mk | 9 + .../handwired/xeal60/keymaps/fido/config.h | 45 ++ .../handwired/xeal60/keymaps/fido/keymap.c | 74 +++ .../handwired/xeal60/keymaps/fido/rules.mk | 1 + .../xeal60/keymaps/heartrobotninja/config.h | 58 +++ .../xeal60/keymaps/heartrobotninja/keymap.c | 180 +++++++ .../xeal60/keymaps/heartrobotninja/rules.mk | 26 + .../xeal60/keymaps/henxing/Readme.md | 51 ++ .../handwired/xeal60/keymaps/henxing/config.h | 37 ++ .../handwired/xeal60/keymaps/henxing/keymap.c | 113 +++++ .../xeal60/keymaps/hexwire/README.md | 116 +++++ .../handwired/xeal60/keymaps/hexwire/config.h | 43 ++ .../handwired/xeal60/keymaps/hexwire/keymap.c | 218 ++++++++ .../handwired/xeal60/keymaps/hexwire/rules.mk | 1 + .../handwired/xeal60/keymaps/khord/config.h | 44 ++ .../handwired/xeal60/keymaps/khord/keymap.c | 170 +++++++ .../handwired/xeal60/keymaps/khord/rules.mk | 7 + .../handwired/xeal60/keymaps/kris/keymap.c | 213 ++++++++ .../handwired/xeal60/keymaps/krusli/keymap.c | 238 +++++++++ .../handwired/xeal60/keymaps/krusli/readme.md | 2 + .../xeal60/keymaps/mbsurfer/config.h | 43 ++ .../xeal60/keymaps/mbsurfer/keymap.c | 274 ++++++++++ .../xeal60/keymaps/mbsurfer/rules.mk | 7 + .../handwired/xeal60/keymaps/mike808/config.h | 43 ++ .../handwired/xeal60/keymaps/mike808/keymap.c | 158 ++++++ .../handwired/xeal60/keymaps/mike808/rules.mk | 1 + .../handwired/xeal60/keymaps/mjt/config.h | 38 ++ .../handwired/xeal60/keymaps/mjt/keymap.c | 213 ++++++++ .../handwired/xeal60/keymaps/mjt/rules.mk | 25 + .../handwired/xeal60/keymaps/mtdjr/config.h | 43 ++ .../handwired/xeal60/keymaps/mtdjr/keymap.c | 55 ++ .../handwired/xeal60/keymaps/mtdjr/rules.mk | 5 + .../xeal60/keymaps/normacos/config.h | 37 ++ .../xeal60/keymaps/normacos/keymap.c | 213 ++++++++ .../xeal60/keymaps/normacos/readme.md | 86 ++++ .../handwired/xeal60/keymaps/piemod/README.md | 31 ++ .../handwired/xeal60/keymaps/piemod/config.h | 49 ++ .../handwired/xeal60/keymaps/piemod/keymap.c | 99 ++++ .../handwired/xeal60/keymaps/piemod/rules.mk | 13 + .../handwired/xeal60/keymaps/pitty/README.md | 91 ++++ .../handwired/xeal60/keymaps/pitty/config.h | 26 + .../handwired/xeal60/keymaps/pitty/keymap.c | 169 +++++++ .../handwired/xeal60/keymaps/pitty/rules.mk | 6 + .../handwired/xeal60/keymaps/poker/config.h | 37 ++ .../handwired/xeal60/keymaps/poker/keymap.c | 240 +++++++++ .../handwired/xeal60/keymaps/poker/rules.mk | 3 + .../handwired/xeal60/keymaps/smt/config.h | 37 ++ .../handwired/xeal60/keymaps/smt/keymap.c | 218 ++++++++ .../handwired/xeal60/keymaps/smt/readme.md | 88 ++++ .../xeal60/keymaps/that_canadian/config.h | 32 ++ .../xeal60/keymaps/that_canadian/keymap.c | 163 ++++++ .../handwired/xeal60/keymaps/waples/README.md | 58 +++ .../handwired/xeal60/keymaps/waples/config.h | 17 + .../handwired/xeal60/keymaps/waples/keymap.c | 131 +++++ .../handwired/xeal60/keymaps/waples/rules.mk | 3 + .../handwired/xeal60/keymaps/xk/config.h | 44 ++ .../handwired/xeal60/keymaps/xk/keymap.c | 370 ++++++++++++++ .../handwired/xeal60/keymaps/xk/rules.mk | 19 + .../handwired/xeal60/keymaps/zer09/config.h | 59 +++ .../handwired/xeal60/keymaps/zer09/keymap.c | 38 ++ .../handwired/xeal60/keymaps/zer09/keymap.h | 32 ++ .../handwired/xeal60/keymaps/zer09/rules.mk | 6 + keyboards/handwired/xeal60/lets_split.c | 16 + keyboards/handwired/xeal60/lets_split.h | 31 ++ keyboards/handwired/xeal60/matrix.c | 470 ++++++++++++++++++ keyboards/handwired/xeal60/readme.md | 187 +++++++ keyboards/handwired/xeal60/rev1/config.h | 86 ++++ keyboards/handwired/xeal60/rev1/rev1.c | 15 + keyboards/handwired/xeal60/rev1/rev1.h | 30 ++ keyboards/handwired/xeal60/rev1/rules.mk | 1 + keyboards/handwired/xeal60/rules.mk | 77 +++ keyboards/handwired/xeal60/serial.c | 228 +++++++++ keyboards/handwired/xeal60/serial.h | 26 + keyboards/handwired/xeal60/split_util.c | 86 ++++ keyboards/handwired/xeal60/split_util.h | 20 + 117 files changed, 9305 insertions(+) create mode 100644 keyboards/handwired/xeal60/config.h create mode 100644 keyboards/handwired/xeal60/i2c.c create mode 100644 keyboards/handwired/xeal60/i2c.h create mode 100644 keyboards/handwired/xeal60/info.json create mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/adam/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/adam/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/default/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/default/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/default/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/drashna/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/drashna/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/drashna/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/fabian/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/fabian/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/fabian/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/fido/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/fido/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/fido/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/henxing/Readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/henxing/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/henxing/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/khord/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/khord/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/khord/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/kris/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/krusli/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/krusli/readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/mike808/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/mike808/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/mike808/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/mjt/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/mjt/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/mjt/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/normacos/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/normacos/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/normacos/readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/piemod/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/piemod/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/piemod/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/piemod/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/pitty/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/pitty/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/pitty/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/pitty/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/poker/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/poker/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/poker/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/smt/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/smt/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/smt/readme.md create mode 100644 keyboards/handwired/xeal60/keymaps/that_canadian/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/waples/README.md create mode 100644 keyboards/handwired/xeal60/keymaps/waples/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/waples/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/waples/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/xk/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/xk/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/xk/rules.mk create mode 100644 keyboards/handwired/xeal60/keymaps/zer09/config.h create mode 100644 keyboards/handwired/xeal60/keymaps/zer09/keymap.c create mode 100644 keyboards/handwired/xeal60/keymaps/zer09/keymap.h create mode 100644 keyboards/handwired/xeal60/keymaps/zer09/rules.mk create mode 100644 keyboards/handwired/xeal60/lets_split.c create mode 100644 keyboards/handwired/xeal60/lets_split.h create mode 100644 keyboards/handwired/xeal60/matrix.c create mode 100644 keyboards/handwired/xeal60/readme.md create mode 100644 keyboards/handwired/xeal60/rev1/config.h create mode 100644 keyboards/handwired/xeal60/rev1/rev1.c create mode 100644 keyboards/handwired/xeal60/rev1/rev1.h create mode 100644 keyboards/handwired/xeal60/rev1/rules.mk create mode 100644 keyboards/handwired/xeal60/rules.mk create mode 100644 keyboards/handwired/xeal60/serial.c create mode 100644 keyboards/handwired/xeal60/serial.h create mode 100644 keyboards/handwired/xeal60/split_util.c create mode 100644 keyboards/handwired/xeal60/split_util.h diff --git a/keyboards/handwired/xeal60/config.h b/keyboards/handwired/xeal60/config.h new file mode 100644 index 0000000000..c910d8f24f --- /dev/null +++ b/keyboards/handwired/xeal60/config.h @@ -0,0 +1,24 @@ +/* +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +#endif diff --git a/keyboards/handwired/xeal60/i2c.c b/keyboards/handwired/xeal60/i2c.c new file mode 100644 index 0000000000..084c890c40 --- /dev/null +++ b/keyboards/handwired/xeal60/i2c.c @@ -0,0 +1,162 @@ +#include +#include +#include +#include +#include +#include +#include "i2c.h" + +#ifdef USE_I2C + +// Limits the amount of we wait for any one i2c transaction. +// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is +// 9 bits, a single transaction will take around 90μs to complete. +// +// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit +// poll loop takes at least 8 clock cycles to execute +#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 + +#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) + +volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +static volatile uint8_t slave_buffer_pos; +static volatile bool slave_has_register_set = false; + +// Wait for an i2c operation to finish +inline static +void i2c_delay(void) { + uint16_t lim = 0; + while(!(TWCR & (1<10. + // Check datasheets for more info. + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// Start a transaction with the given i2c slave address. The direction of the +// transfer is set with I2C_READ and I2C_WRITE. +// returns: 0 => success +// 1 => error +uint8_t i2c_master_start(uint8_t address) { + TWCR = (1< slave ACK +// 1 => slave NACK +uint8_t i2c_master_write(uint8_t data) { + TWDR = data; + TWCR = (1<= SLAVE_BUFFER_SIZE ) { + ack = 0; + slave_buffer_pos = 0; + } + slave_has_register_set = true; + } else { + i2c_slave_buffer[slave_buffer_pos] = TWDR; + BUFFER_POS_INC(); + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // master has addressed this device as a slave transmitter and is + // requesting data. + TWDR = i2c_slave_buffer[slave_buffer_pos]; + BUFFER_POS_INC(); + break; + + case TW_BUS_ERROR: // something went wrong, reset twi state + TWCR = 0; + default: + break; + } + // Reset everything, so we are ready for the next TWI interrupt + TWCR |= (1< + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#define I2C_READ 1 +#define I2C_WRITE 0 + +#define I2C_ACK 1 +#define I2C_NACK 0 + +#define SLAVE_BUFFER_SIZE 0x10 + +// i2c SCL clock frequency +#define SCL_CLOCK 400000L + +extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +void i2c_master_init(void); +uint8_t i2c_master_start(uint8_t address); +void i2c_master_stop(void); +uint8_t i2c_master_write(uint8_t data); +uint8_t i2c_master_read(int); +void i2c_reset_state(void); +void i2c_slave_init(uint8_t address); + + +static inline unsigned char i2c_start_read(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_READ); +} + +static inline unsigned char i2c_start_write(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_WRITE); +} + +// from SSD1306 scrips +extern unsigned char i2c_rep_start(unsigned char addr); +extern void i2c_start_wait(unsigned char addr); +extern unsigned char i2c_readAck(void); +extern unsigned char i2c_readNak(void); +extern unsigned char i2c_read(unsigned char ack); + +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + +#endif diff --git a/keyboards/handwired/xeal60/info.json b/keyboards/handwired/xeal60/info.json new file mode 100644 index 0000000000..aa1c3b8efc --- /dev/null +++ b/keyboards/handwired/xeal60/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Let's Split", + "url": "", + "maintainer": "qmk", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}] + } + } +} diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/config.h b/keyboards/handwired/xeal60/keymaps/DE_simple/config.h new file mode 100644 index 0000000000..5a6261c4f7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/DE_simple/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c b/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c new file mode 100644 index 0000000000..d329bea4c0 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c @@ -0,0 +1,155 @@ +#include QMK_KEYBOARD_H +#include "keymap_german.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 _QWERTZ 0 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTZ = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwertz + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | + | # | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTZ] = LAYOUT( \ + KC_ESC, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, \ + KC_TAB, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_PLUS, DE_HASH, \ + KC_LSFT, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_ENT , \ + KC_LCTL, KC_LALT, DE_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ° | ! | " | § | $ | % | & | / | ( | ) | = | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | @ | € | ü | ? | ´ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | ö | ä | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + DE_CIRC, DE_EXLM, DE_DQOT, DE_PARA, DE_DLR, DE_PERC, DE_AMPR, DE_SLSH, DE_LPRN, DE_RPRN, DE_EQL, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_AT , DE_EURO, KC_LBRC, DE_QST, DE_QUOT, \ + KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DE_PIPE , KC_SCLN, KC_QUOT, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ° | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | { | [ | ] | } | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_LCBR, DE_LBRC, DE_RBRC, DE_RCBR , DE_BSLS, \ + KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_ENT, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwertz| | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTZ, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwertz[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTZ: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwertz); + #endif + persistent_default_layer_set(1UL<<_QWERTZ); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md b/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md new file mode 100644 index 0000000000..972cd6c398 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md @@ -0,0 +1,59 @@ +De_Simple Keymap +====== + +Features +-------- + +Changed Keymap to reasamble German Layout. + +Layout +-------- + + Qwertz + ,-----------------------------------------------------------------------------------. + | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | + |------+------+------+------+------+-------------+------+------+------+------+------| + | Tab | A | S | D | F | G | H | J | K | L | + | # | + |------+------+------+------+------+------|------+------+------+------+------+------| + | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------| + | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + `-----------------------------------------------------------------------------------' + + + Qwerty + ,-----------------------------------------------------------------------------------. + | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | + |------+------+------+------+------+-------------+------+------+------+------+------| + | Tab | A | S | D | F | G | H | J | K | L | + | # | + |------+------+------+------+------+------|------+------+------+------+------+------| + | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------| + | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + `-----------------------------------------------------------------------------------' + + + Raise + ,-----------------------------------------------------------------------------------. + | ° | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + |------+------+------+------+------+-------------+------+------+------+------+------| + | Del | F1 | F2 | F3 | F4 | F5 | F6 | { | [ | ] | } | \ | + |------+------+------+------+------+------|------+------+------+------+------+------| + | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | Next | Vol- | Vol+ | Play | + `-----------------------------------------------------------------------------------' + + + Adjust (Lower + Raise) + ,-----------------------------------------------------------------------------------. + | | Reset| | | | | | | | | | Del | + |------+------+------+------+------+-------------+------+------+------+------+------| + | | | |Aud on|Audoff|AGnorm|AGswap|Qwertz| | | | | + |------+------+------+------+------+------|------+------+------+------+------+------| + | | | | | | | | | | | | | + |------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | | + `-----------------------------------------------------------------------------------' + + diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk b/keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h b/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h new file mode 100644 index 0000000000..e8632fe61d --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h @@ -0,0 +1,60 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_I2C +//#define USE_SERIAL + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS +#define FLIP_HALF + +#define SSD1306OLED +//#define OLED_ROTATE180 + + +#define PREVENT_STUCK_MODIFIERS +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM 100 + +#ifdef SUBPROJECT_rev1 + #include "../../rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "../../rev2/config.h" +#endif + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 6 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c b/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c new file mode 100644 index 0000000000..5eccbcf1ac --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c @@ -0,0 +1,441 @@ +#include QMK_KEYBOARD_H +#include "LUFA/Drivers/Peripheral/TWI.h" +#ifdef SSD1306OLED + #include "ssd1306.h" +#endif + +extern keymap_config_t keymap_config; + +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, + BACKLIT, + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +enum macro_keycodes { + KC_SAMPLEMACRO, +}; + + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +//Macros +#define M_SAMPLE M(KC_SAMPLEMACRO) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, M_SAMPLE, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = SONG(STARTUP_SOUND); +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +// define variables for reactive RGB +bool TOG_STATUS = false; +int RGB_current_mode; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +// Setting ADJUST layer RGB back to default +void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { + rgblight_mode(RGB_current_mode); + layer_on(layer3); + } else { + layer_off(layer3); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(16); + } + layer_on(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + TOG_STATUS = false; + layer_off(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(15); + } + layer_on(_RAISE); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + layer_off(_RAISE); + TOG_STATUS = false; + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released + case RGB_MOD: + if (record->event.pressed) { + rgblight_mode(RGB_current_mode); + rgblight_step(); + RGB_current_mode = rgblight_config.mode; + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + RGB_current_mode = rgblight_config.mode; +} + +//SSD1306 OLED init and update loop, make sure to add #define SSD1306OLED in config.h +#ifdef SSD1306OLED +void matrix_master_OLED_init (void) { + TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000)); + iota_gfx_init(); // turns on the display +} + +void matrix_scan_user(void) { + iota_gfx_task(); // this is what updates the display continuously +} +#endif + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_SONG(tone_startup); +} + +void shutdown_user() +{ + PLAY_SONG(tone_goodbye); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_SONG(music_scale); +} + +#endif + +/* + * Macro definition + */ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + switch (id) { + case KC_SAMPLEMACRO: + if (record->event.pressed){ + return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END); + } + + } + + return MACRO_NONE; +} + + +void matrix_update(struct CharacterMatrix *dest, + const struct CharacterMatrix *source) { + if (memcmp(dest->display, source->display, sizeof(dest->display))) { + memcpy(dest->display, source->display, sizeof(dest->display)); + dest->dirty = true; + } +} + +//assign the right code to your layers for OLED display +#define L_BASE 0 +#define L_LOWER 8 +#define L_RAISE 16 +#define L_FNLAYER 64 +#define L_NUMLAY 128 +#define L_NLOWER 136 +#define L_NFNLAYER 192 +#define L_MOUSECURSOR 256 +#define L_ADJUST 65560 + +void iota_gfx_task_user(void) { +#if DEBUG_TO_SCREEN + if (debug_enable) { + return; + } +#endif + + struct CharacterMatrix matrix; + + matrix_clear(&matrix); + matrix_write_P(&matrix, PSTR("USB: ")); +#ifdef PROTOCOL_LUFA + switch (USB_DeviceState) { + case DEVICE_STATE_Unattached: + matrix_write_P(&matrix, PSTR("Unattached")); + break; + case DEVICE_STATE_Suspended: + matrix_write_P(&matrix, PSTR("Suspended")); + break; + case DEVICE_STATE_Configured: + matrix_write_P(&matrix, PSTR("Connected")); + break; + case DEVICE_STATE_Powered: + matrix_write_P(&matrix, PSTR("Powered")); + break; + case DEVICE_STATE_Default: + matrix_write_P(&matrix, PSTR("Default")); + break; + case DEVICE_STATE_Addressed: + matrix_write_P(&matrix, PSTR("Addressed")); + break; + default: + matrix_write_P(&matrix, PSTR("Invalid")); + } +#endif + +// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below + + char buf[40]; + snprintf(buf,sizeof(buf), "Undef-%ld", layer_state); + matrix_write_P(&matrix, PSTR("\n\nLayer: ")); + switch (layer_state) { + case L_BASE: + matrix_write_P(&matrix, PSTR("Default")); + break; + case L_RAISE: + matrix_write_P(&matrix, PSTR("Raise")); + break; + case L_LOWER: + matrix_write_P(&matrix, PSTR("Lower")); + break; + case L_ADJUST: + matrix_write_P(&matrix, PSTR("ADJUST")); + break; + default: + matrix_write(&matrix, buf); + } + + // Host Keyboard LED Status + char led[40]; + snprintf(led, sizeof(led), "\n%s %s %s", + (host_keyboard_leds() & (1< +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#ifdef SUBPROJECT_rev2 + /* RGB Underglow */ + #undef RGBLED_NUM + #define RGBLIGHT_ANIMATIONS + #define RGBLED_NUM 8 +#endif + +#undef TAPPING_TERM +#define TAPPING_TERM 200 //At 500 some bad logic takes hold +#define PREVENT_STUCK_MODIFIERS +#define IGNORE_MOD_TAP_INTERRUPT +#define PERMISSIVE_HOLD + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/adam/keymap.c b/keyboards/handwired/xeal60/keymaps/adam/keymap.c new file mode 100644 index 0000000000..b986ab780b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/adam/keymap.c @@ -0,0 +1,78 @@ +#include QMK_KEYBOARD_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 BASE 0 // default layer +#define FLOCK 1 // symbols arrows and F keys on F held down +#define JLOCK 2 // same as Flock but with fall thru J and mapped to J held down + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[BASE] = LAYOUT ( \ + TD(1), KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TAB, KC_TAB, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + SFT_T(KC_A), ALT_T(KC_S),CTL_T(KC_D), F(FLOCK), GUI_T(KC_G), KC_BSPC, KC_DELETE, GUI_T(KC_H), F(JLOCK), CTL_T(KC_K), ALT_T(KC_L), SFT_T(KC_SCLN), \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOTE +), +[FLOCK] = LAYOUT ( \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ + KC_LBRC, KC_GRV, KC_TILDE, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, XXXXXXX, KC_RBRC, \ + S(KC_LBRC), _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, S(KC_RBRC), \ + KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, KC_ESC, XXXXXXX, KC_END, KC_PGDOWN, KC_QUES, KC_SLASH \ +), +[JLOCK] = LAYOUT ( \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ + KC_LBRC, KC_GRV, KC_TILDE, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, XXXXXXX, KC_RBRC, \ + S(KC_LBRC), _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_LEFT, _______, KC_UP, KC_RIGHT, S(KC_RBRC), \ + KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, KC_ESC, XXXXXXX, KC_END, KC_PGDOWN, KC_QUES, KC_SLASH \ +) +}; + +const uint16_t PROGMEM fn_actions[] = { + [FLOCK] = ACTION_LAYER_TAP_KEY(FLOCK,KC_F), + [JLOCK] = ACTION_LAYER_TAP_KEY(JLOCK,KC_J) +}; +#ifdef TAP_DANCE_ENABLE +void tap_1(qk_tap_dance_state_t *state, void *user_data) { + switch (state->count) { + case 1: + register_code (KC_1); + unregister_code (KC_1); + break; + case 2: + register_code (KC_ESC); + unregister_code (KC_ESC); + break; + case 3: + register_code (KC_LSFT); + register_code (KC_1); + unregister_code (KC_1); + unregister_code (KC_LSFT); + } +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [0] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_ESC), + [1] = ACTION_TAP_DANCE_FN(tap_1) +}; +#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md b/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md new file mode 100644 index 0000000000..4b37d73555 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md @@ -0,0 +1,27 @@ +# Lets Split Layout + +Check out [user readme](../../../../users/bbaserdem/README.md) for more info. + +# Usage + +**These commands depend on there being no other arduino connected!** +Also udev rules can be set instead of using sudo. +Please unplug all other usb devices. + +To make the hex files; +``` +make lets_split/rev2:bbaserdem +make lets_split/rev2:bbaserdem_right +``` + +For the left half, after plugging in and resetting; (from repo main directory) +``` +sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:.build/lets_split_rev2_bbaserdem.hex +sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -U eeprom:w:keyboards/lets_split/eeprom-lefthand.eep +``` + +For the right half; +``` +sudo avrdude -p atmgea34u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:.build/lets_split_rev2_bbaserdem_right.hex +sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -U eeprom:w:keyboards/lets_split/eeprom-righhand.eep +``` diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h b/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h new file mode 100644 index 0000000000..6a90e1c356 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h @@ -0,0 +1,27 @@ +#ifndef CONFIG_KEYMAP_H +#define CONFIG_KEYMAP_H + +#include "../../config.h" + +#define USE_SERIAL +#define EE_HANDS + +// LED strip stuff +#ifdef RGBLIGHT_ENABLE + +// Who thought it was a good idea to predefine these in the rev2/config.h ??? +#ifdef RGBLED_NUM +#undef RGBLED_NUM +#endif +#define RGBLED_NUM 12 + +#define RGBLIGHT_HUE_STEP 6 +#define RGBLIGHT_SAT_STEP 12 +#define RGBLIGHT_VAL_STEP 20 +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 6 +#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 2000 +#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 +#endif + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c b/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c new file mode 100644 index 0000000000..623117530d --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c @@ -0,0 +1,36 @@ +/* + * Let's Split - Dvorak turkish + * Keymap by @bbaserdem + * Dvorak layout with multiple features + * Most of the code is in the "user" directory. + * Check qmk_firmware/users/bbaserdem for the main part of the code + */ +#define KEYMAP(...) LAYOUT_ortho_4x12(__VA_ARGS__) + +#include "lets_split.h" +#include "bbaserdem.h" + + +void matrix_init_keymap (void) { +} + +uint32_t layer_state_set_keymap(uint32_t state) { + return state; +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Main Dvorak layer + [_DV] = LAYOUT_letssplit_wrapper(DVORAK), + // Turkish and special character overlay + [_AL] = LAYOUT_letssplit_wrapper(ALTCHAR), + // Gaming layer + [_GA] = LAYOUT_letssplit_wrapper(GAME), + // Numbers layer + [_NU] = LAYOUT_letssplit_wrapper(NUMBERS), + // Settings layer + [_SE] = LAYOUT_letssplit_wrapper(SETTINGS), + // Mouse emulation layer + [_MO] = LAYOUT_letssplit_wrapper(MOUSE), + // Music layer + [_MU] = LAYOUT_letssplit_wrapper(MUSIC), +}; diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk b/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk new file mode 100644 index 0000000000..4159db3fee --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk @@ -0,0 +1,11 @@ +# Build options + +BACKLIGHT_ENABLE = no # Switch LEDs +MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses +RGBLIGHT_ENABLE = yes # LED strips +TAP_DANCE_ENABLE = no # Use multi-tap features +AUDIO_ENABLE = no # Audio stuff + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md new file mode 100644 index 0000000000..8608f23f79 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md @@ -0,0 +1,5 @@ +# Lets Split - Right Half + +Keymap for my right half, to be used as a numpad. +Check [main readme](../bbaserdem/README.md) for flashing info. + diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h new file mode 100644 index 0000000000..47545a059b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_KEYMAP_H +#define CONFIG_KEYMAP_H + +#include "../../config.h" + +#define USE_SERIAL +#define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c new file mode 100644 index 0000000000..2dcae0dca5 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c @@ -0,0 +1,31 @@ +/* + * Let's Split - Dvorak turkish + * Keymap by @bbaserdem + * Dvorak layout with multiple features + * Most of the code is in the "user" directory. + * Check qmk_firmware/users/bbaserdem for the main part of the code + */ + +#include "lets_split.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Navigation All Supered) Numpad + * ,-----------------------. ,-----------------------. + * | F4| ` | Q |Alt| L | > | | ) | - | + | = |Ent|Bkp| + * |---+---+---+---+---+---| |---+---+---+---+---+---| + * | F3| M |Ent|Ctl| K | ^ | | ( | * | 9 | 6 | 3 | . | + * |---+---+---+---+---+---| |---+---+---+---+---+---| + * | F2| T |Spc|Shf| J | v | | % | / | 8 | 5 | 2 | , | + * |---+---+---+---+---+---| |---+---+---+---+---+---| + * | F1| F | P |Tab| H | < | |Nlc|Tab| 7 | 4 | 1 | 0 | + * `-----------------------' `-----------------------' + */ + // Main Dvorak layer + [0] = LAYOUT_ortho_4x12( + LCTL(LALT(KC_DEL)), LGUI(KC_GRV), LGUI(KC_Q), LGUI(KC_LALT), LGUI(KC_L), LGUI(KC_RGHT), KC_RPRN, KC_PMNS, KC_PPLS, KC_PEQL, KC_PENT, KC_BSPC, \ + LGUI(KC_F3), LGUI(KC_M), LGUI(KC_ENT), LGUI(KC_LCTL), LGUI(KC_K), LGUI(KC_UP), KC_LPRN, KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, \ + LGUI(KC_F2), LGUI(KC_T), LGUI(KC_SPC), LGUI(KC_LSFT), LGUI(KC_J), LGUI(KC_DOWN), KC_PERC, KC_PSLS, KC_P8, KC_P5, KC_P2, KC_PCMM, \ + LGUI(KC_F1), LGUI(KC_F), LGUI(KC_P), LGUI(KC_TAB), LGUI(KC_H), LGUI(KC_LEFT), KC_NLCK, KC_TAB, KC_P7, KC_P4, KC_P1, KC_P0 \ + ) +}; diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk new file mode 100644 index 0000000000..36b4b8fc25 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk @@ -0,0 +1,26 @@ +# Build options + +USER_NAME := bbaserdem-without-userspace + +BACKLIGHT_ENABLE = no # Switch LEDs +MOUSEKEY_ENABLE = no # Emulates mouse key using keypresses +RGBLIGHT_ENABLE = no # LED strips +TAP_DANCE_ENABLE = no # Use multi-tap features +AUDIO_ENABLE = no # Audio stuff +BLUETOOTH_ENABLE = no # No bluetooth +COMMAND_ENABLE = no # Some bootmagic thing +BOOTMAGIC_ENABLE = no # Access to EEPROM settings, not needed +CONSOLE_ENABLE = no # Allows console output with a command +SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. +NKRO_ENABLE = no # Default is 6KRO which is plenty +MIDI_ENABLE = no # Untested feature +FAUXCLICKY_ENABLE = no # Emulates clicks using speaker +KEY_LOCK_ENABLE = no # Allows locking any key. Not used +API_SYSEX_ENABLE = no # Allows OS to send signals. +KEY_LOCK_ENABLE = no # Allows locking any key. Not used +UNICODE_ENABLE = no # Used for unicode character emulation +EXTRAKEY_ENABLE = no # OS signals like volume control + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h b/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h new file mode 100644 index 0000000000..3639b9c3f2 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h @@ -0,0 +1,54 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +#define MASTER_RIGHT +// #define EE_HANDS + +// Define Tap Dance interval +//#define TAPPING_TERM 175 + +// // Enable LED strip +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 10 + +// Space Cadet +#define LSPO_KEY KC_9 +#define RSPC_KEY KC_0 +#define DISABLE_SPACE_CADET_ROLLOVER + +// Auto Shift settings +#define AUTO_SHIFT_TIMEOUT 165 +// #define NO_AUTO_SHIFT_SPECIAL + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c b/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c new file mode 100644 index 0000000000..9c3eb94752 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c @@ -0,0 +1,221 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +// #define _DVORAK 2 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 16 + + + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + // COLEMAK, + // DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +/* +// Tap dance declerations +enum { + TD_GRV_TILD = 0, +}; + +// Tap dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_GRV_TILD] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), +}; +*/ + + + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` ~ | Q | W | E | R | T | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Rshift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Lalt | GUI | Esc |Lower |KC_SPC |Enter |Raise | [cmd|] alt |= Hypr| - | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \ + KC_LCTRL,KC_LALT, KC_LGUI, KC_ESC, TG(_LOWER), LT(_ADJUST, KC_SPC), KC_ENT, TG(_RAISE), MT(MOD_RGUI, KC_LBRC), MT(MOD_RALT, KC_RBRC), MT(MOD_HYPR, KC_EQL), KC_MINS \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ESC | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bspc | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,_______,_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bspc | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | up | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | left | down |right | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | % | ` | ~ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |AShftD|AShftU|REPORT| | | | [ | ] | - | = | \ | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, KC_LEFT, KC_DOWN, KC_RGHT, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PERC, KC_GRV, KC_TILD, \ + KC_ASDN, KC_ASUP, KC_ASRP, _______, _______, _______, _______, KC_RBRC, KC_LBRC, KC_MINS, KC_EQL, KC_BSLASH \ +) + + +}; + +/* #ifdef AUDIO_ENABLE +* float tone_qwerty[][2] = SONG(QWERTY_SOUND); +* float tone_dvorak[][2] = SONG(DVORAK_SOUND); +* float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif */ + + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +}; + +#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); +#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF); +#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF); +#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF); +#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); +#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); +#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF); +#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); +#define rgblight_set_white rgblight_sethsv (0x00, 0x00, 0xFF); + +uint32_t layer_state_set_user(uint32_t state) { +#ifdef RGBLIGHT_ENABLE + uint8_t default_layer = eeconfig_read_default_layer(); + if (rgb_layer_change) { + switch (biton32(state)) { + case _RAISE: + rgblight_set_orange; + rgblight_mode(5); + break; + case _LOWER: + rgblight_set_teal; + rgblight_mode(5); + break; + case _ADJUST: + rgblight_set_purple; + rgblight_mode(23); + break; + default: + if (default_layer & (1UL << _COLEMAK)) { + rgblight_set_magenta; + } + else if (default_layer & (1UL << _DVORAK)) { + rgblight_set_green; + } + else { + rgblight_set_blue; + } + rgblight_mode(1); + break; + } + } +#endif + return state; +} diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk b/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk new file mode 100644 index 0000000000..f2fde785d4 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk @@ -0,0 +1,8 @@ + + + +ifndef QUANTUM_DIR + include ../../../../Makefile + AUTO_SHIFT_ENABLE = yes + RGBLIGHT_ENABLE = yes +endif diff --git a/keyboards/handwired/xeal60/keymaps/default/config.h b/keyboards/handwired/xeal60/keymaps/default/config.h new file mode 100644 index 0000000000..5a6261c4f7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/default/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/default/keymap.c b/keyboards/handwired/xeal60/keymaps/default/keymap.c new file mode 100644 index 0000000000..f782781843 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/default/keymap.c @@ -0,0 +1,211 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_ortho_4x12( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_ortho_4x12( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/default/rules.mk b/keyboards/handwired/xeal60/keymaps/default/rules.mk new file mode 100644 index 0000000000..457a3d01d4 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/default/rules.mk @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/config.h b/keyboards/handwired/xeal60/keymaps/dlaroe/config.h new file mode 100644 index 0000000000..6b31e8d14e --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/dlaroe/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c b/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c new file mode 100644 index 0000000000..b2282e0fe8 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c @@ -0,0 +1,255 @@ +// Can't Remember Sh*t Keymap for Let's Split +// Trying to fit as many characters as possible on the default layer +// as its easier for me to remember logical functions than characters +// Also, I like me some numpad + + +#include QMK_KEYBOARD_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 _ARROW 1 +#define _GAME 2 +#define _LOWER 3 +#define _RAISE 4 +#define _PLOVER 5 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + ARROW, + GAME, + LOWER, + RAISE, + BACKLIT, + PLOVER, + EXT_PLV +}; + +// 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 | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | \ | Alt | Lower|SpcRse| Space|Raise | [ | - | = | ] | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + KC_LCTL, KC_LGUI, KC_BSLS, KC_LALT, LOWER, LT(4, KC_SPC), KC_SPC, RAISE, LT(3, KC_LBRC), KC_MINS, KC_EQL, CTL_T(KC_RBRC) \ +), + +/* Arrow + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | \ | Alt | Lower|SpcRse| Space|Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_ARROW] = LAYOUT( \ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + KC_LCTL, KC_LGUI, KC_BSLS, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ +), + +/* Game + * ,-----------------------------------------------------------------------------------. + * | 1 | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * |Shift | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Ctrl | Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Alt | 4 | 3 | 2 | Lower| Space |Raise | Left | Down | Up | Right| + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = LAYOUT( \ + KC_1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______ , \ + KC_LALT, KC_4, KC_3, KC_2, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ +), + + +/* Lower (switched to # because KP# were weird in terminal emulators) + * ,-----------------------------------------------------------------------------------. + * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | . | * | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | | | | | | 0 | | | | KP_+ | | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_DOT, KC_ASTR, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_SLSH, _______, \ + KC_ESC, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, KC_PLUS, _______ \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | Wh Up|RightC| M-Up | LeftC|QWERTY| Left | Down | Up | Right| | | ` | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | Wh Dn| M-L | M-Dn | M-R | | - | = | [ | ] | \ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | App | | | | | Ins | | Home | PGDN | PGUP | End | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_WH_U, KC_BTN2, KC_MS_U, KC_BTN1, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PIPE, KC_GRV, \ + _______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLASH, _______, \ + _______, KC_APP, _______, _______, _______, _______, KC_INS, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ +), + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = LAYOUT ( \ + KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , \ + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX \ +), + + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | C-A-I|Qwerty| | |Reset |Macro0| | | | | |C-A-D | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff| Game |AGswap|AGnorm| | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff| Prev | Next | Mute | VolDn| VolUp| | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | | | | Play/Pause | | BL_T |BL_DEC|BL_INC|BL_ST | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + LALT(LCTL(KC_INS)), QWERTY, _______, _______, RESET, M(0), _______, _______, _______, _______, _______, LALT(LCTL(KC_DEL)), \ + _______, _______, _______, AU_ON, AU_OFF, GAME, AG_SWAP, AG_NORM, _______, _______, _______, _______, \ + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, \ + BACKLIT, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, BL_TOGG, BL_DEC , BL_INC , BL_STEP \ +) + + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( D(LSFT), T(LEFT), U(LSFT), D(LCTL), T(X), U(LCTL), T(RIGHT), D(LCTL), T(V), U(LCTL), T(LEFT), END ); // this swaps the characters on either side of the cursor when the macro executes + } + break; + } + return MACRO_NONE; +}; + + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + + +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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case GAME: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(music_scale); + #endif + persistant_default_layer_set(1UL<<_GAME); + } + return false; + break; + + + 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; + break; + 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; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { + +} diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk b/keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/handwired/xeal60/keymaps/drashna/config.h b/keyboards/handwired/xeal60/keymaps/drashna/config.h new file mode 100644 index 0000000000..5bc5598ee0 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2017 Danny Nguyen + +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 . +*/ + +#pragma once + +#ifdef RGBLIGHT_ENABLE +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 +#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 +#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 +#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 +#endif // RGBLIGHT_ENABLE + + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#ifndef NO_DEBUG +#define NO_DEBUG +#endif // !NO_DEBUG +#ifndef NO_PRINT +#define NO_PRINT +#endif // !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 + +#undef PRODUCT +#define PRODUCT Drashnas Viterbi Macro Pad + +#define USE_I2C + +#ifdef AUDIO_ENABLE +#define C6_AUDIO +#define NO_MUSIC_MODE +#endif + +#define LAYOUT_ortho_5x7( \ + L00, L01, L02, L03, L04, L05, L06, \ + L10, L11, L12, L13, L14, L15, L16, \ + L20, L21, L22, L23, L24, L25, L26, \ + L30, L31, L32, L33, L34, L35, L36, \ + L40, L41, L42, L43, L44, L45, L46 \ + ) \ + LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L10, L11, L12, L13, L14, L15, L16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L20, L21, L22, L23, L24, L25, L26, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ + ) + +#define QMK_ESC_OUTPUT F5 // usually COL +#define QMK_ESC_INPUT D4 // usually ROW +#define QMK_LED B0 +#define QMK_SPEAKER C6 diff --git a/keyboards/handwired/xeal60/keymaps/drashna/keymap.c b/keyboards/handwired/xeal60/keymaps/drashna/keymap.c new file mode 100644 index 0000000000..68ca593db8 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna/keymap.c @@ -0,0 +1,98 @@ +#include QMK_KEYBOARD_H +#include "drashna.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. + + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define LMACRO TG(_MACROS) +#define DIABLO TG(_DIABLO) +#define GAMEPAD TG(_GAMEPAD) +#define MEDIA TT(_MEDIA) + + +//enum more_custom_keycodes { +// KC_P00 = NEW_SAFE_RANGE +//}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_NUMLOCK] = LAYOUT_ortho_5x7( + LMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, + MEDIA, KC_CALC, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, + KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, + KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, + KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_COLN, KC_PENT + ), + + [_DIABLO] = LAYOUT_ortho_5x7( + KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, + KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, + KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, + KC_LCTL, KC_D3_3, KC_D3_3, KC_D3_3, KC_D3_3, KC_Z, KC_DIABLO_CLEAR, + KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE) + ), + + [_GAMEPAD] = LAYOUT_ortho_5x7( // Game pad layout designed primarily for Overwatch + LMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, + MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, + KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V + ), + + [_MACROS] = LAYOUT_ortho_5x7( + LMACRO, KC_OVERWATCH,GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_C9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_SYMM, KC_TORB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_GLHF, KC_GOODGAME, KC_GGEZ, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_SALT, KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM, XXXXXXX, KC_PENT + ), + + + [_MEDIA] = LAYOUT_ortho_5x7( + KC_MAKE, KC_RESET,MU_TOG, AU_ON, AU_OFF, CK_TOGG, RGB_SAD, + MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, + RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, + KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, + KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI + ) + + +}; + + + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + + //switch (keycode) { + //case KC_P00: + // if (!record->event.pressed) { + // tap(KC_KP_0); + // tap(KC_KP_0); + // } + // return false; + // break; + //} + return true; +} + + + +void matrix_init_keymap(void) { + DDRD &= ~(1<<5); + PORTD &= ~(1<<5); + + DDRB &= ~(1<<0); + PORTB &= ~(1<<0); +} + + diff --git a/keyboards/handwired/xeal60/keymaps/drashna/rules.mk b/keyboards/handwired/xeal60/keymaps/drashna/rules.mk new file mode 100644 index 0000000000..ec3befc0b7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna/rules.mk @@ -0,0 +1,25 @@ +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 +TAP_DANCE_ENABLE = no +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = yes +NKRO_ENABLE = yes + +NO_SECRETS = yes +MACROS_ENABLED = yes +INDICATOR_LIGHTS = no +RGBLIGHT_TWINKLE = no + +LAYOUTS = ortho_5x7 + +# SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC)) +# SRC := $(filter-out serial.c,$(SRC)) +# SRC := $(filter-out matrix.c,$(SRC)) +# SRC := $(filter-out i2c.c,$(SRC)) +# SRC := $(filter-out split_util.c,$(SRC)) +# SRC += quantum/matrix.c + +BOOTLOADER = qmk-dfu diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/config.h b/keyboards/handwired/xeal60/keymaps/drashna_old/config.h new file mode 100644 index 0000000000..ddf9d1a40f --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna_old/config.h @@ -0,0 +1,86 @@ +/* +Copyright 2017 Danny Nguyen + +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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + + +#ifdef RGBLIGHT_ENABLE +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 +#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 +#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 +#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 +#endif // RGBLIGHT_ENABLE + + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#ifndef NO_DEBUG +#define NO_DEBUG +#endif // !NO_DEBUG +#ifndef NO_PRINT +#define NO_PRINT +#endif // !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 + +#undef PRODUCT +#define PRODUCT Drashnas Viterbi Macro Pad + +#define USE_I2C + +#ifdef AUDIO_ENABLE +#define C6_AUDIO +#define NO_MUSIC_MODE +#endif + +#define LAYOUT_ortho_5x7( \ + L00, L01, L02, L03, L04, L05, L06, \ + L10, L11, L12, L13, L14, L15, L16, \ + L20, L21, L22, L23, L24, L25, L26, \ + L30, L31, L32, L33, L34, L35, L36, \ + L40, L41, L42, L43, L44, L45, L46 \ + ) \ + LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L10, L11, L12, L13, L14, L15, L16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L20, L21, L22, L23, L24, L25, L26, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ + ) + +#endif + +#define QMK_ESC_OUTPUT F5 // usually COL +#define QMK_ESC_INPUT D4 // usually ROW +#define QMK_LED B0 +#define QMK_SPEAKER C6 diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c b/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c new file mode 100644 index 0000000000..2d361da9a3 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c @@ -0,0 +1 @@ +//placeholder \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk b/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk new file mode 100644 index 0000000000..14ac6a6b3c --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk @@ -0,0 +1,28 @@ +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 +TAP_DANCE_ENABLE = no +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = yes +NKRO_ENABLE = yes + +NO_SECRETS = yes +MACROS_ENABLED = yes +INDICATOR_LIGHTS = no +RGBLIGHT_TWINKLE = no + +LAYOUTS = ortho_5x7 + +# SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC)) +# SRC := $(filter-out serial.c,$(SRC)) +# SRC := $(filter-out matrix.c,$(SRC)) +# SRC := $(filter-out i2c.c,$(SRC)) +# SRC := $(filter-out split_util.c,$(SRC)) +# SRC += quantum/matrix.c + +USER_NAME := drashna +SRC += ../drashna/keymap.c + +BOOTLOADER = qmk-dfu diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/config.h b/keyboards/handwired/xeal60/keymaps/dwallace/config.h new file mode 100644 index 0000000000..585b41dbcf --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/dwallace/config.h @@ -0,0 +1,43 @@ +/* +Copyright 2017 Danny Nguyen + +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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 150 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 14 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c b/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c new file mode 100644 index 0000000000..2410244828 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c @@ -0,0 +1,224 @@ +#include "viterbi.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _FN 1 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + STK_SHIFT, + STK_CTRL, + STK_ALT, + STK_GUI, + STK_META, + STK_CLEAR, + RGB_LEVEL_UP, + RGB_LEVEL_DOWN, +}; + +#define KC_ KC_TRNS +#define _______ KC_TRNS + +#define KC_SWIN LGUI(KC_TILD) // Switch between windows +#define KC_SAPP LGUI(KC_TAB) // Switch between applications +#define KC_FN1 MO(_FN) +#define KC_LCAG LCAG(KC_NO) +#define KC_RTOG RGB_TOG +#define KC_RGUP RGB_LEVEL_UP +#define KC_RGDN RGB_LEVEL_DOWN +#define KC_RST RESET +#define KC_SSFT STK_SHIFT +#define KC_SCTL STK_CTRL +#define KC_SALT STK_ALT +#define KC_SGUI STK_GUI +#define KC_SMTA STK_META +#define KC_SCLR STK_CLEAR + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,BSPC, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + TAB , Q , W , E , R , T ,LBRC, Y , U , I , O , P ,BSLS,PGUP, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ESC , A , S , D , F , G ,RBRC, H , J , K , L ,SCLN,QUOT,ENT , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + SSFT, Z , X , C , V , B ,SWIN, N , M ,COMM,DOT , UP ,SLSH,RSFT, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + SCTL,SMTA,SALT,SGUI,SPC ,SCLR,SAPP, FN1 ,SPC ,RGUI,LEFT,DOWN,RGHT,PGDN + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_FN] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , ,RST , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , RTOG, ,RGDN,RGUP, , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , ,MUTE,VOLD,VOLU, , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ) + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +#endif + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool modifier_already_applied = false; +uint8_t physically_held_modifiers = 0; +uint8_t last_mods = 0xFF; +uint8_t rgb_dimming = 0; +#define SET_LED_RGB(val, led_num) setrgb(((val >> 16) & 0xFF) >> rgb_dimming, ((val >> 8) & 0xFF) >> rgb_dimming, (val & 0xFF) >> rgb_dimming, (LED_TYPE *)&led[led_num]) + +void update_underglow_level(void) { + if (get_mods() == last_mods) + return; + + last_mods = get_mods(); + + if (get_mods() == 0) { + uint8_t level = 0x10 >> rgb_dimming; + rgblight_setrgb(level, level, level); + return; + } + + uint32_t mod_colors[4] = {0}; + uint8_t mod_count = 0; + rgblight_setrgb(0x00, 0x00, 0x00); + + if (get_mods() & MOD_BIT(KC_LSFT)) + mod_colors[mod_count++] = 0xFF0000; + if (get_mods() & MOD_BIT(KC_LCTL)) + mod_colors[mod_count++] = 0x00FF00; + if (get_mods() & MOD_BIT(KC_LALT)) + mod_colors[mod_count++] = 0x0000FF; + if (get_mods() & MOD_BIT(KC_LGUI)) + mod_colors[mod_count++] = 0xFFFF00; + + uint8_t led_num = 0; + for (int m = 0; m < mod_count; m++) { + for (; led_num < RGBLED_NUM*(m+1)/mod_count; led_num++) { + SET_LED_RGB(mod_colors[m], led_num); + } + } + rgblight_set(); +} + +void add_sticky_modifier(uint16_t keycode) { + add_mods(MOD_BIT(keycode)); + register_code(keycode); + modifier_already_applied = false; +} + +void clear_sticky_modifiers(void) { + unregister_code(KC_LSFT); + unregister_code(KC_LCTL); + unregister_code(KC_LALT); + unregister_code(KC_LGUI); + update_underglow_level(); +} + +void handle_sticky_modifier_event(uint16_t keycode, bool pressed) { + if (pressed) { + add_sticky_modifier(keycode); + physically_held_modifiers |= MOD_BIT(keycode); + } else { + del_mods(MOD_BIT(keycode)); + physically_held_modifiers &= ~MOD_BIT(keycode); + if (modifier_already_applied) { + clear_sticky_modifiers(); + } else { + add_sticky_modifier(keycode); + } + } + update_underglow_level(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case STK_SHIFT: + handle_sticky_modifier_event(KC_LSFT, record->event.pressed); + return false; + break; + case STK_CTRL: + handle_sticky_modifier_event(KC_LCTL, record->event.pressed); + return false; + break; + case STK_ALT: + handle_sticky_modifier_event(KC_LALT, record->event.pressed); + return false; + break; + case STK_GUI: + handle_sticky_modifier_event(KC_LGUI, record->event.pressed); + return false; + break; + case STK_META: + handle_sticky_modifier_event(KC_LCTL, record->event.pressed); + handle_sticky_modifier_event(KC_LALT, record->event.pressed); + handle_sticky_modifier_event(KC_LGUI, record->event.pressed); + return false; + break; + case STK_CLEAR: + if (record->event.pressed) { + clear_sticky_modifiers(); + } + return false; + break; + case RGB_LEVEL_DOWN: + if (record->event.pressed && rgb_dimming < 8) { + rgb_dimming++; + } + return false; + break; + case RGB_LEVEL_UP: + if (record->event.pressed && rgb_dimming > 0) { + rgb_dimming--; + } + return false; + break; + } + if (!record->event.pressed && IS_KEY(keycode)) { + modifier_already_applied = true; + if (physically_held_modifiers == 0) + clear_sticky_modifiers(); + } + return true; +} + +void matrix_init_user(void) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + #endif //RGBLIGHT_ENABLE +} + +void matrix_scan_user(void) { + #ifdef RGBLIGHT_ENABLE + update_underglow_level(); + #endif //RGBLIGHT_ENABLE +} diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk b/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk new file mode 100644 index 0000000000..1e3cebb145 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/fabian/config.h b/keyboards/handwired/xeal60/keymaps/fabian/config.h new file mode 100644 index 0000000000..6ae40cc2ba --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fabian/config.h @@ -0,0 +1,34 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + + +#define USE_SERIAL + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + + +#ifdef SUBPROJECT_rev1 + #include "../../rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "../../rev2/config.h" +#endif +#ifdef SUBPROJECT_rev2fliphalf + #include "../../rev2fliphalf/config.h" +#endif diff --git a/keyboards/handwired/xeal60/keymaps/fabian/keymap.c b/keyboards/handwired/xeal60/keymaps/fabian/keymap.c new file mode 100644 index 0000000000..37053a8e4b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fabian/keymap.c @@ -0,0 +1,271 @@ +/* Copyright 2015-2017 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 . + */ + +#include QMK_KEYBOARD_H + + +extern keymap_config_t keymap_config; + +enum custom_layers { + _QWERTY, + _COLEMAK, + _DVORAK, + _LOWER, + _RAISE, + _PLOVER, + _ADJUST +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV, +}; + +#define XXXXXXX KC_NO +#define _______ KC_TRNS + +#define CTL_ESC CTL_T(KC_ESC) // Tap for Escape, hold for Control +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) +#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) +#define SFT_BSP SFT_T(KC_BSPC) // Tap for Backspace, hold for Shift +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define SFT_SPC SFT_T(KC_SPC) // Tap for Space, hold for Shift +#define UMLAUT RALT(KC_U) // Combine Alt and U + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , \ + KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , \ + KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + SFT_BSP, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT , \ + KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | MS L | MS D |MS U | MS R |MS Btn| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | Left | Down | Up | Rght |MS_BN2| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BTN2, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Plover layer (http://opensteno.org) + * ,-----------------------------------------------------------------------------------. + * | # | # | # | # | # | # | # | # | # | # | # | # | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | S | T | P | H | * | * | F | P | L | T | D | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | S | K | W | R | * | * | R | B | G | S | Z | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Exit | | | A | O | | | E | U | | | | + * `-----------------------------------------------------------------------------------' + */ + +[_PLOVER] = LAYOUT( \ + KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, \ + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | Reset| Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_DEL , \ + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, \ + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + +}; + +#ifdef AUDIO_ENABLE + float plover_song[][2] = SONG(PLOVER_SOUND); + float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + case PLOVER: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + stop_all_notes(); + PLAY_SONG(plover_song); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + return false; + break; + case EXT_PLV: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); + #endif + layer_off(_PLOVER); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/fabian/rules.mk b/keyboards/handwired/xeal60/keymaps/fabian/rules.mk new file mode 100644 index 0000000000..b8c82cb99d --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fabian/rules.mk @@ -0,0 +1,9 @@ +# 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 +# +# UNICODE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/fido/config.h b/keyboards/handwired/xeal60/keymaps/fido/config.h new file mode 100644 index 0000000000..5cb1083652 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fido/config.h @@ -0,0 +1,45 @@ +/* +Copyright 2018 Danny Nguyen + +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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +#ifndef MASTER_LEFT + #define MASTER_RIGHT +#endif +// #define EE_HANDS + +#define TAPPING_TERM 150 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 2 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/fido/keymap.c b/keyboards/handwired/xeal60/keymaps/fido/keymap.c new file mode 100644 index 0000000000..b8ef460082 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fido/keymap.c @@ -0,0 +1,74 @@ +#include "viterbi.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _FN 1 + +#define KC_ KC_TRNS +#define _______ KC_TRNS + +#define KC_FN1 MO(_FN) +#define KC_WD_L LCTL(KC_LEFT) +#define KC_WD_R LCTL(KC_RGHT) +#define KC_RTOG RGB_TOG +#define KC_RMOD RGB_MOD +#define KC_RHUI RGB_HUI +#define KC_RHUD RGB_HUD +#define KC_RSAI RGB_SAI +#define KC_RSAD RGB_SAD +#define KC_RVAI RGB_VAI +#define KC_RVAD RGB_VAD +#define KC_RST RESET +#define KC_CTLZ LCTL(KC_Z) +#define KC_CTLX LCTL(KC_X) +#define KC_CTLC LCTL(KC_C) +#define KC_CTLV LCTL(KC_V) +#define KC_ATAB LALT(KC_TAB) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + 1 , 2 , 3 , 4 , 5 , 6 ,ESC , DEL , 7 , 8 , 9 , 0 ,MINS,EQL , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + RBRC, Q , W , E , R , T ,TAB , BSPC, Y , U , I , O , P ,LBRC, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + GRV , A , S , D , F , G ,LALT, CAPS, H , J , K , L ,SCLN,QUOT, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + BSLS, Z , X , C , V , B ,LSFT, RSFT, N , M ,COMM,DOT ,SLSH,ENT , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + INS ,PSCR,MENU,LGUI,LCTL,SPC ,FN1 , FN1 ,SPC ,RCTL,RALT, , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_FN] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + F1 , F2 , F3 , F4 , F5 , F6 , , , F7 , F8 , F9 ,F10 ,F11 ,F12 , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ,PGUP,WD_L, UP ,WD_R, ,ATAB, ,RMOD,RHUI,RSAI,RVAI, , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ,HOME,LEFT,DOWN,RGHT, , , , ,RHUD,RSAD,RVAD, , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ,CTLZ,CTLX,CTLC,CTLV, , , ,MUTE,VOLD,VOLU, , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ) + +}; + +void led_set_user(uint8_t usb_led) { + #ifdef RGBLIGHT_ENABLE + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + rgblight_enable(); + } else { + rgblight_disable(); + } + #endif //RGBLIGHT_ENABLE +} diff --git a/keyboards/handwired/xeal60/keymaps/fido/rules.mk b/keyboards/handwired/xeal60/keymaps/fido/rules.mk new file mode 100644 index 0000000000..1e3cebb145 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/fido/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h b/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h new file mode 100644 index 0000000000..bb3556e574 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h @@ -0,0 +1,58 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 1000 + +#undef LEADER_TIMEOUT +#define LEADER_TIMEOUT 1000 + +#undef TAPPING_TERM +#define TAPPING_TERM 200 + +#undef TAPPING_TOGGLE +#define TAPPING_TOGGLE 2 + +#ifdef SUBPROJECT_rev1 +#include "../../rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 +#include "../../rev2/config.h" +#endif +#ifdef SUBPROJECT_rev2fliphalf +#include "../../rev2fliphalf/config.h" +#endif + +#endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c b/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c new file mode 100644 index 0000000000..3a7ef9db39 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c @@ -0,0 +1,180 @@ +#include QMK_KEYBOARD_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 _COLE 0 +#define _LOWER 1 +#define _RAISE 2 +#define _AUX 16 + +/* Layers */ +enum +{ + COLE = 0, + LOWER, // right hand 10 key. + RAISE, // left hand Fn, right hand symbols. + AUX, +}; + +/* Tap Dancery */ +enum +{ + TD_BTK, + TD_TDE, + TD_LPRN, + TD_RPRN, + TD_MIN, + TD_USC, +}; + +bool time_travel = false; + +// Fillers to make layering more clear +#define ____ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Colemak + * ,-----------------------------------------------------------------------------------. + * | ' " `| Q | W | F | P | G | J | L | U | Y | = + | ~ ; :| + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ( [ {| A | R | S | T | D | H | N | E | I | O | ) ] }| + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | - , <| Z | X | C | V | B | K | M | ? | | | ^ | _ . >| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Lower |Raise | Ctrl | Alt | Bksp | Spc |Enter |LShft | ESC | < | v | > | + * `-----------------------------------------------------------------------------------' + */ + [_COLE] = LAYOUT( + TD(TD_BTK), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_EQL, TD(TD_TDE), + TD(TD_LPRN), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, TD(TD_RPRN), + TD(TD_MIN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_SLSH, KC_BSLS, KC_UP, TD(TD_USC), + LOWER, RAISE, OSM(MOD_LCTL), OSM(MOD_LALT), KC_SPC, KC_BSPC, KC_ENT, OSM(MOD_LSFT), KC_ESC, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Lower + * ,-----------------------------------------------------------------------------------. + * | ---- | ---- | ---- | ---- | ---- | ---- | 7 | 8 | 9 | * | / | ^ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ---- | ---- | ---- | ---- | ---- | ---- | 4 | 5 | 6 | + | - | ---- | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | ---- | ---- | ---- | ---- | ---- | ---- | 1 | 2 | 3 | = | ---- | ---- | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ---- | ---- | ---- | ---- | ---- | ---- | ---- | 0 | . | ---- | ---- | ---- | + * `-----------------------------------------------------------------------------------' + */ + [_LOWER] = LAYOUT( + ____, ____, ____, ____, ____, ____, KC_7, KC_8, KC_9, KC_PAST, KC_PSLS, KC_CIRC, + ____, ____, ____, ____, ____, ____, KC_4, KC_5, KC_6, KC_PPLS, KC_PMNS, ____, + ____, ____, ____, ____, ____, ____, KC_1, KC_2, KC_3, KC_PEQL, ____, ____, + ____, ____, ____, ____, ____, ____, ____, KC_0, KC_MNXT, ____, ____, ____), + + /* Raise + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | ! | @ | # | $ | % | ` ~ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | F7 | F8 | F9 | F10 | F11 | F12 | ^ | & | * | ( | ) | - _ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | ____ | ____ | ____ | ____ | ____ | ____ | [ { | ] } | \ | | ; : | ' " | = + | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | , < | . > | / ? | + * `-----------------------------------------------------------------------------------' + */ + [_RAISE] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_GRV, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_EQL, + ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_COMM, KC_DOT, KC_SLSH), + + /* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | Reset| ____ | ____ | ____ | ____ | ____ | ____ | LOCK | ____ | ____ | ____ | VUP | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ____ | ____ | RUN | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | VDWN | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | PGUP | MUTE | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | HOME | PGDN | END | + * `-----------------------------------------------------------------------------------' + */ + [_AUX] = LAYOUT( + RESET, ____, ____, ____, ____, ____, ____, LGUI(KC_L), ____, ____, ____, KC_VOLU, + ____, ____, LGUI(KC_R), ____, ____, ____, ____, ____, ____, ____, ____, KC_VOLD, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_MUTE, + ____, ____, ____, ____, KC_TAB, KC_DEL, ____, ____, ____, KC_HOME, KC_PGDOWN, KC_END) + +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_BTK] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_GRV), + [TD_TDE] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_TILD), + [TD_LPRN] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LPRN), + [TD_RPRN] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RPRN), + [TD_MIN] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_MINS), + [TD_USC] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_UNDS)}; + +void persistent_default_layer_set(uint16_t default_layer) +{ + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +}; + +void matrix_scan_user(void){}; + +void matrix_init_user(void){}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) + { + case COLE: + if (record->event.pressed) + { + persistent_default_layer_set(1UL << _COLE); + } + return false; + break; + case LOWER: + if (record->event.pressed) + { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _AUX); + } + else + { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _AUX); + } + return false; + break; + case RAISE: + if (record->event.pressed) + { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _AUX); + } + else + { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _AUX); + } + return false; + break; + case AUX: + if (record->event.pressed) + { + layer_on(_AUX); + } + else + { + layer_off(_AUX); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk b/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk new file mode 100644 index 0000000000..2261a848aa --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk @@ -0,0 +1,26 @@ +# 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 +TAP_DANCE_ENABLE = yes +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 # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SWAP_HANDS_ENABLE = no # Enable one-hand typing + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + diff --git a/keyboards/handwired/xeal60/keymaps/henxing/Readme.md b/keyboards/handwired/xeal60/keymaps/henxing/Readme.md new file mode 100644 index 0000000000..231aa6adf3 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/henxing/Readme.md @@ -0,0 +1,51 @@ +# Let's Split the Atreus + +This keymap is a port of the Atreus keymap to the Let's Split keyboard, using a +similar method of handling layer switches as the `default` keymap. + + +# Layers + +The following tables are the layers as implemented. + +### Underscores in Layer + +Any underscore represents a key that is mapped to `KC_NO`, or no keypress. The +2x3 block in the middle is like this because the Atreus does not have any keys +there. It has been left blank for the user to add her own special keypresses or +macros that she finds useful to have on that particular layer. + + +## `_QWERTY` + +```c +/* + * q w e r t _ _ y u i o p + * a s d f g _ _ h j k l ; + * z x c v b _ _ n m , . / + * esc tab gui shift bksp ctrl alt space fn - ' enter + */ + ``` + + +## `_LOWER` + +```c +/* + * ! @ up { } _ _ pgup 7 8 9 * + * # left down right $ _ _ pgdn 4 5 6 + + * [ ] ( ) & _ _ ` 1 2 3 \ + * lower insert gui shift bksp ctrl alt space fn . 0 = + */ + ``` + +## `_RAISE` + +```c +/* + * insert home up end pgup _ _ up F7 F8 F9 F10 + * del left down right pgdn _ _ down F4 F5 F6 F11 + * _ volup _ _ reset _ _ F1 F2 F3 F12 + * _ voldn super shift bksp ctrl alt space L0 prtsc scroll pause + */ + ``` diff --git a/keyboards/handwired/xeal60/keymaps/henxing/config.h b/keyboards/handwired/xeal60/keymaps/henxing/config.h new file mode 100644 index 0000000000..5a6261c4f7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/henxing/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/henxing/keymap.c b/keyboards/handwired/xeal60/keymaps/henxing/keymap.c new file mode 100644 index 0000000000..aab75dc543 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/henxing/keymap.c @@ -0,0 +1,113 @@ +#include QMK_KEYBOARD_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 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + * q w e r t _ _ y u i o p + * a s d f g _ _ h j k l ; + * z x c v b _ _ n m , . / + * esc tab gui shift bksp ctrl alt space fn - ' enter + */ + [_QWERTY] = LAYOUT( \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, LOWER, KC_MINS, KC_QUOT, KC_ENT \ + ), + + /* + * ! @ up { } _ _ pgup 7 8 9 * + * # left down right $ _ _ pgdn 4 5 6 + + * [ ] ( ) & _ _ ` 1 2 3 \ + * lower insert gui shift bksp ctrl alt space fn . 0 = + */ + [_LOWER] = LAYOUT( \ + KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_NO, KC_NO, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, \ + KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_NO, KC_NO, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, \ + KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, \ + RAISE, KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL \ + ), + + /* + * insert home up end pgup _ _ up F7 F8 F9 F10 + * del left down right pgdn _ _ down F4 F5 F6 F11 + * _ volup _ _ reset _ _ F1 F2 F3 F12 + * _ voldn super shift bksp ctrl alt space L0 prtsc scroll pause + */ + [_RAISE] = LAYOUT( \ + KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10, \ + KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_NO, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11, \ + KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_NO, KC_NO, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, \ + KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, QWERTY, KC_PSCR, KC_SLCK, KC_PAUS \ + ) + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + + // The value to return + bool return_value = false; + + switch (keycode) { + case QWERTY: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); +#endif + persistent_default_layer_set(1UL<<_QWERTY); + } + break; + + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + break; + + case RAISE: + persistent_default_layer_set(1UL<<_RAISE); + break; + default: + + // If the keycode is not handled by any of the other cases, we + // should return true + return_value = true; + break; + } + + return return_value; +} diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/README.md b/keyboards/handwired/xeal60/keymaps/hexwire/README.md new file mode 100644 index 0000000000..3ce3f6af33 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/hexwire/README.md @@ -0,0 +1,116 @@ +Hexwire's Nyquist Layout +============================ + +### Changes from default layout + +- Main layer + - The right space bar key has been changed to backspace, as I only hit space with my left thumb + - Backtick is at the lower right and also serves goes to the 3rd function layer when held + - Enter key acts as shift when held + - Escape key acts as control when held + - Minus key at upper right +- Lower layer + - Numbers are on the lower layer, to make it easier to use a numpad on the right hand + - Arrow keys + - Straight and curly brackets in the middle two columns + - Screenshot keys for MacOS +- Upper layer + - Symbols are on the upper layer + - Media keys + - Page Up/Down, Home/End +- 3rd function layer + - Function keys + +## Layouts + +### QWERTY + +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` + +### Colemak +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X0 , A , R , S , T , D , H , N , E , I , O ,QUOT| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` + +### Dvorak +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X0 , A , O , E , U , I , D , H , T , N , S ,SLSH| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` + +### Lower +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , | +|----+----+----+----+----+----| |----+----+----+----+----+----| +|DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| ,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , DEL , , P0 ,PDOT, , | +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` + +### Raise +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC| +|----+----+----+----+----+----| |----+----+----+----+----+----| +| ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, | +|----+----+----+----+----+----| |----+----+----+----+----+----| +|DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS| +|----+----+----+----+----+----| |----+----+----+----+----+----| +|MUTE,MSTP,MPLY,VOLD,PGDN,MINS, PLUS,END , , , , | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , , , , , , | +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` + +### 3rd function layer + +``` +,----+----+----+----+----+----. ,----+----+----+----+----+----. +|F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , , , , , , | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , , , , , , | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , , , , , , | +|----+----+----+----+----+----| |----+----+----+----+----+----| +| , , , , , , , , , , , | +`----+----+----+----+----+----' `----+----+----+----+----+----' +``` diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/config.h b/keyboards/handwired/xeal60/keymaps/hexwire/config.h new file mode 100644 index 0000000000..7acf84510e --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/hexwire/config.h @@ -0,0 +1,43 @@ +/* +Copyright 2017 Danny Nguyen + +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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 150 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 12 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c b/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c new file mode 100644 index 0000000000..2050c03793 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c @@ -0,0 +1,218 @@ +#include "viterbi.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _FN3 5 +#define _FN4 6 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + FN3, + FN4, + ADJUST, +}; + +#define KC_ KC_TRNS +#define _______ KC_TRNS + +#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen +#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen +#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen +#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen +#define KC_X0 MT(MOD_LCTL, KC_ESC) +#define KC_X1 LOWER +#define KC_X2 RAISE +#define KC_X3 LT(_FN3, KC_GRV) +#define KC_X4 MT(MOD_LSFT, KC_ENT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + TAB , Q , W , E , R , T , , Y , U , I , O , P ,MINS, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X0 , A , S , D , F , G , , H , J , K , L ,SCLN,QUOT, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + LSFT, Z , X , C , V , B , , N , M ,COMM,DOT ,SLSH, X4 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_COLEMAK] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + TAB , Q , W , F , P , G , , J , L , U , Y ,SCLN,MINS, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X0 , A , R , S , T , D , , H , N , E , I , O ,QUOT, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + LSFT, Z , X , C , V , B , , K , M ,COMM,DOT ,SLSH, X4 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_DVORAK] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + TAB ,QUOT,COMM,DOT , P , Y , , F , G , C , R , L ,MINS, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X0 , A , O , E , U , I , , D , H , T , N , S ,SLSH, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + LSFT,SCLN, Q , J , K , X , , B , M , W , V , Z , X4 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_LOWER] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + TILD,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + DEL ,CAPP,LEFT,RGHT, UP ,LBRC, , RBRC, P4 , P5 , P6 ,PLUS,PIPE, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ,CPYP, , ,DOWN,LCBR, , RCBR, P1 , P2 , P3 ,MINS, , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , DEL , , P0 ,PDOT, , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_RAISE] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + TILD,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + ,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN, , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, , EQL ,HOME, , , ,BSLS, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + MUTE,MSTP,MPLY,VOLD,PGDN,MINS, , PLUS,END , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_FN3] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + F12 , F1 , F2 , F3 , F4 , F5 , , F6 , F7 , F8 , F9 ,F10 ,F11 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + [_ADJUST] = LAYOUT( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, _______, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk b/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk new file mode 100644 index 0000000000..1e3cebb145 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/khord/config.h b/keyboards/handwired/xeal60/keymaps/khord/config.h new file mode 100644 index 0000000000..4ebdbad769 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/khord/config.h @@ -0,0 +1,44 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define TAPPING_TERM 150 + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +//#define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#define RGBLIGHT_ANIMATIONS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/khord/keymap.c b/keyboards/handwired/xeal60/keymaps/khord/keymap.c new file mode 100644 index 0000000000..41042065d6 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/khord/keymap.c @@ -0,0 +1,170 @@ +#include QMK_KEYBOARD_H + + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, + ADMIN, + SMSPC1 +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Tap Dance Declarations +enum { + SFT_CAP = 0 +}; + +// Dylan's additions +#define C_A_DEL LALT(LCTL(KC_DEL)) +#define C_A_INS LALT(LCTL(KC_INS)) +//#define MAC_LOK S(LCTL(KC_PWR)) +#define MAC_LOK LCTL(LGUI(KC_Q)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | END | HOME |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MAC_LOK, _______, KC_END, KC_HOME, _______, \ + LCTL(KC_UP), KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | |PG DN |PG UP |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | MB1 | MB2 | MB3 | MB4 | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGDN, KC_PGUP, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4 \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | |AGnorm|AGswap| | | |string|string| Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | |RGBMOD|HUE-UP|SAT-UP|BRI-UP| |PLAIN |BREATH|RANBOW| SWIRL| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |RGBTOG|HUE-DN|SAT-DN|BRI-DN| |GRDNT | XMAS |KNIGHT| SNAKE| | CAIns| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | CADel| + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, AG_NORM, AG_SWAP, _______, _______, _______, ADMIN, SMSPC1, KC_DEL, \ + _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, _______, _______, \ + _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, RGB_M_G, RGB_M_X, RGB_M_K, RGB_M_SN, _______, C_A_INS, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_A_DEL \ +) + +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) +}; + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + case ADMIN: + if (record->event.pressed) { + SEND_STRING("Administrator"); + } + return false; + break; + case SMSPC1: + if (record->event.pressed) { + SEND_STRING("Simspace1!"); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/khord/rules.mk b/keyboards/handwired/xeal60/keymaps/khord/rules.mk new file mode 100644 index 0000000000..c90523e5d6 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/khord/rules.mk @@ -0,0 +1,7 @@ +TAP_DANCE_ENABLE = yes +RGBLIGHT_ENABLE = yes +USE_I2C = no + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/kris/keymap.c b/keyboards/handwired/xeal60/keymaps/kris/keymap.c new file mode 100644 index 0000000000..34d2e86da0 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/kris/keymap.c @@ -0,0 +1,213 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | H | J | K | L | ; |Enter | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift|| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Alt | Gui |Caps |Lower |Space |Space |Raise | [ | ] | - |Ctrl | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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 , \ + ADJUST, KC_LALT, KC_LGUI, KC_CAPS, LOWER, KC_SPC, KC_SPC, RAISE, KC_LBRC, KC_RBRC, KC_MINS, KC_RCTRL \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LALT, KC_LGUI, KC_CAPS, LOWER, KC_SPC, KC_SPC, RAISE, KC_LBRC, KC_RBRC, KC_MINS, KC_RCTRL \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/krusli/keymap.c b/keyboards/handwired/xeal60/keymaps/krusli/keymap.c new file mode 100644 index 0000000000..9b49bab3b4 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/krusli/keymap.c @@ -0,0 +1,238 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _NUMPAD 5 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, + NUMPAD +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Numpad| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + NUMPAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | Home | End | PgUp | PgDn |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Numpad + * ,-----------------------------------------------------------------------------------. + * | Esc | 7 | 8 | 9 | * | / | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | <-- | 4 | 5 | 6 | + | - | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | 1 | 2 | 3 |Enter |Enter | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Qwerty| 0 | . | . |Enter |Enter | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_NUMPAD] = LAYOUT_ortho_4x12( \ + KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \ + KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \ + QWERTY, KC_P0, KC_PDOT, KC_PDOT, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______ \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_ortho_4x12( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case NUMPAD: + if (record->event.pressed) + persistent_default_layer_set(1UL<<_NUMPAD); + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/krusli/readme.md b/keyboards/handwired/xeal60/keymaps/krusli/readme.md new file mode 100644 index 0000000000..175ef3c11a --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/krusli/readme.md @@ -0,0 +1,2 @@ +# krusli +Let's Split keymap based off the default Planck layout with a numpad layer. diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h b/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h new file mode 100644 index 0000000000..6469b4846d --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h @@ -0,0 +1,43 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define TAPPING_TERM 100 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +//#define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c b/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c new file mode 100644 index 0000000000..5f6589337f --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c @@ -0,0 +1,274 @@ +#include QMK_KEYBOARD_H + + +extern rgblight_config_t rgblight_config; +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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Tap Dance Declarations +enum { + SFT_CAP = 0, + LFT_HOM, + DWN_PDN, + UPP_PUP, + RGT_END +}; + +// Task Manager +#define C_S_ESC LSFT(LCTL(KC_ESC)) +#define C_A_DEL LALT(LCTL(KC_DEL)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,------------------------------------------ ------------------------------------------. + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| +* |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `------------------------------------------ ------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, TD(LFT_HOM), TD(DWN_PDN), TD(UPP_PUP), TD(RGT_END) \ +), + +/* Colemak + * ,------------------------------------------ ------------------------------------------. + * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Esc | A | R | S | T | D | | H | N | E | I | O | " | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `------------------------------------------ ------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,------------------------------------------ ------------------------------------------. + * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Esc | A | O | E | U | I | | D | H | T | N | S | / | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `------------------------------------------ ------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,------------------------------------------ ------------------------------------------. + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | END | HOME |Enter | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | | | | | | | | | | Next | Vol- | Vol+ | Play | + * `------------------------------------------ ------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_END, KC_HOME, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,------------------------------------------ ------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / |PG DN |PG UP |Enter | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | | | | | | | | | | Next | Vol- | Vol+ | Play | + * `------------------------------------------ ------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,------------------------------------------ ------------------------------------------. + * | Reset| | Plain|Breath|Rainbw| Swirl| | Snake|Knight| Xmas |Grdent| | Del | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------- -------+------+------+------+------+------| + * | |Toggle| Mode | Hue- | Hue+ | Sat- | | Sat+ | Val- | Val+ | | | | (RGB) + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | | | | | | | | | | | |TskMng|CAltDe| + * `------------------------------------------ ------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + RESET, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_S_ESC, C_A_DEL \ +) + + +}; + +int RGB_current_mode; +int RGB_current_hue; + +qk_tap_dance_action_t tap_dance_actions[] = { + [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME), + [DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN), + [UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP), + [RGT_END] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT, KC_END) +}; + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + + if (IS_LAYER_OFF(_RAISE) && IS_LAYER_OFF(_ADJUST)) { + // Save current RGB info + RGB_current_mode = rgblight_config.mode; + RGB_current_hue = rgblight_config.hue; + + // Set RGB to Blue + rgblight_mode(1); + rgblight_setrgb(0, 0, 255); + } + + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + + if (IS_LAYER_ON(_ADJUST)){ + // Set RGB to cyan + rgblight_setrgb(0, 255, 255); + } + } else { + + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + + if (IS_LAYER_OFF(_RAISE) && IS_LAYER_OFF(_ADJUST)) { + // Reset RGB + rgblight_mode(RGB_current_mode); + rgblight_sethsv(RGB_current_hue, rgblight_config.sat, rgblight_config.val); + } else if (IS_LAYER_ON(_RAISE)){ + // Set RGB to Red + rgblight_setrgb(0, 255, 0); + } + } + return false; + break; + case RAISE: + if (record->event.pressed) { + + if (IS_LAYER_OFF(_LOWER) && IS_LAYER_OFF(_ADJUST)) { + // Save current RGB info + RGB_current_mode = rgblight_config.mode; + RGB_current_hue = rgblight_config.hue; + + // Set RGB to Green + rgblight_mode(1); + rgblight_setrgb(0, 255, 0); + } + + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + + if (IS_LAYER_ON(_ADJUST)){ + // Set RGB to cyan + rgblight_setrgb(0, 255, 255); + } + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + + if (IS_LAYER_OFF(_LOWER) && IS_LAYER_OFF(_ADJUST)) { + // Reset RGB + rgblight_mode(RGB_current_mode); + rgblight_sethsv(RGB_current_hue, rgblight_config.sat, rgblight_config.val); + } else if (IS_LAYER_ON(_LOWER)){ + // Set RGB to Blue + rgblight_setrgb(0, 0, 255); + } + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk b/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk new file mode 100644 index 0000000000..c90523e5d6 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk @@ -0,0 +1,7 @@ +TAP_DANCE_ENABLE = yes +RGBLIGHT_ENABLE = yes +USE_I2C = no + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/mike808/config.h b/keyboards/handwired/xeal60/keymaps/mike808/config.h new file mode 100644 index 0000000000..bfca915f24 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mike808/config.h @@ -0,0 +1,43 @@ +/* +Copyright 2018 Danny Nguyen + +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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 150 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 2 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/mike808/keymap.c b/keyboards/handwired/xeal60/keymaps/mike808/keymap.c new file mode 100644 index 0000000000..c7e48b135c --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mike808/keymap.c @@ -0,0 +1,158 @@ +#include QMK_KEYBOARD_H + +#define _DVORAK 0 +#define _QWERTY 1 +#define _FN1 2 +#define _MOUSE 3 + +enum custom_keycodes { + DVORAK = SAFE_RANGE, + QWERTY, +}; + +#define KC_ KC_TRNS +#define _______ KC_TRNS + +#define KC_DVOR DVORAK +#define KC_QWER QWERTY +#define KC_FN1 MO(_FN1) + +// Tap-Hold keys (QWERTY) +#define KC_S_C MT(MOD_LCTL, KC_S) +#define KC_D_A MT(MOD_LALT, KC_D) +#define KC_F_G MT(MOD_LGUI, KC_F) +#define KC_J_G MT(MOD_RGUI, KC_J) +#define KC_K_A MT(MOD_RALT, KC_K) +#define KC_L_C MT(MOD_RCTL, KC_L) + +// Tap-Hold keys (Dvorak) +#define KC_O_C MT(MOD_LCTL, KC_O) +#define KC_E_A MT(MOD_LALT, KC_E) +#define KC_U_G MT(MOD_LGUI, KC_U) +#define KC_H_G MT(MOD_RGUI, KC_H) +#define KC_T_A MT(MOD_RALT, KC_T) +#define KC_N_C MT(MOD_RCTL, KC_N) + +#define KC_G_A LGUI(KC_A) +#define KC_G_C LGUI(KC_C) +#define KC_G_V LGUI(KC_V) +#define KC_G_X LGUI(KC_X) +#define KC_G_Z LGUI(KC_Z) +#define KC_G_BL LGUI(KC_BSLS) +#define KC_G_TB LGUI(KC_TAB) +#define KC_G_SP LGUI(KC_SPC) + +#define KC_ENTM LT(_MOUSE, KC_ENT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + DVOR,ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,PGUP, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_A ,TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS,PGDN, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_X ,CAPS, A ,S_C ,D_A ,F_G , G , H ,J_G ,K_A ,L_C ,SCLN,QUOT, UP , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_C ,LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSFT,DOWN, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC , ENTM,ENTM,G_Z ,GRV ,EQL ,LEFT,RGHT + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_DVORAK] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + QWER,ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,EQL ,PGUP, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_A ,TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,PGDN, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_X ,CAPS, A ,O_C ,E_A ,U_G , I , D ,H_G ,T_A ,N_C , S ,MINS, UP , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_C ,LSFT,SCLN, Q , J , K , X , B , M , W , V , Z ,RSFT,DOWN, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC , ENTM,ENTM,G_Z ,GRV ,BSLS,LEFT,RGHT + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_FN1] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + , , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , ,EXLM, AT ,LCBR,RCBR,PIPE, , P7 , P8 , P9 ,ASTR,F12 , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , ,HASH,DLR ,LPRN,RPRN,GRV , , P4 , P5 , P6 ,PLUS,MINS, , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , ,PERC,CIRC,LBRC,RBRC,TILD, AMPR, P1 , P2 , P3 ,SLSH, , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , ,PDOT, P0 ,EQL , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + + [_MOUSE] = LAYOUT_kc( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + , , , , , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , ,MS_U, , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , ,MS_L,MS_D,MS_R, , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , , , , , , , , , , , , + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + , , , ,BTN1,BTN2, , , , , , , , + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ) +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +#endif + +void update_rgblight(uint16_t layer) { + if (layer & (1UL << _DVORAK)) { + rgblight_sethsv_green(); + } else if (layer & (1UL << _QWERTY)) { + rgblight_sethsv_goldenrod(); + } +} + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); + #ifdef RGBLIGHT_ENABLE + update_rgblight(default_layer); + #endif // RGBLIGHT_ENABLE +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL << _QWERTY); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistent_default_layer_set(1UL << _DVORAK); + } + return false; + break; + } + return true; +} + + +void matrix_init_user(void) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + uint8_t default_layer = eeconfig_read_default_layer(); + update_rgblight(default_layer); + #endif +} diff --git a/keyboards/handwired/xeal60/keymaps/mike808/rules.mk b/keyboards/handwired/xeal60/keymaps/mike808/rules.mk new file mode 100644 index 0000000000..1e3cebb145 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mike808/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/mjt/config.h b/keyboards/handwired/xeal60/keymaps/mjt/config.h new file mode 100644 index 0000000000..735a58b11a --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mjt/config.h @@ -0,0 +1,38 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + + +#define USE_SERIAL + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + + +#ifdef SUBPROJECT_rev1 + #include "../../rev1/config.h" +#endif +#ifdef SUBPROJECT_rev2 + #include "../../rev2/config.h" +#endif +#ifdef SUBPROJECT_rev2fliphalf + #include "../../rev2fliphalf/config.h" +#endif + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 10 diff --git a/keyboards/handwired/xeal60/keymaps/mjt/keymap.c b/keyboards/handwired/xeal60/keymaps/mjt/keymap.c new file mode 100644 index 0000000000..2c61cce3bc --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mjt/keymap.c @@ -0,0 +1,213 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/mjt/rules.mk b/keyboards/handwired/xeal60/keymaps/mjt/rules.mk new file mode 100644 index 0000000000..874d09eab5 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mjt/rules.mk @@ -0,0 +1,25 @@ + +# 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 = 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 +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 # 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. +SWAP_HANDS_ENABLE = no # Enable one-hand typing + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/config.h b/keyboards/handwired/xeal60/keymaps/mtdjr/config.h new file mode 100644 index 0000000000..afbf735695 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mtdjr/config.h @@ -0,0 +1,43 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define SOLENOID_ENABLE +#define SOLENOID_PIN F4 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 8 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C +/* Select hand configuration */ + + #define MASTER_LEFT +// #define _MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c b/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c new file mode 100644 index 0000000000..47972fcd35 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c @@ -0,0 +1,55 @@ +#include QMK_KEYBOARD_H +#include "mtdjr.h" + +extern keymap_config_t keymap_config; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + TAB, Q , W , E , R , T , Y , U , I , O , P ,BSPC, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + EXC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + LSFT, Z , X , C , V , B , N , M ,COMM, DOT,SLSH, ENT, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + LOWR,LCTL,LALT,LGUI,LOWR, SPC, SPC,RASE,LEFT,DOWN, UP ,RGHT +// '-----------------------------' '-----------------------------' + ), + + [_LOWER] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + TILD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , DEL, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LBRC,RBRC,BSLS, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,UNDO, CUT,XCPY,XINS,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + , , , , , , , , , , , +// '-----------------------------' '-----------------------------' + ), + + [_RAISE] = LAYOUT_kc( +// ,-----------------------------. .-----------------------------. + GRV,EXLM, AT ,HASH, DLR,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, MINS, EQL,xxxx,LCBR,RCBR,PIPE, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,xxxx,xxxx,xxxx,xxxx,xxxx, UNDS,PLUS,xxxx,xxxx,xxxx, , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + , , , , , , , ,MNXT,VOLD,VOLU,MPLY +// '-----------------------------' '-----------------------------' + ), + + [_ADJUST] = LAYOUT_kc( \ +// ,-----------------------------. .-----------------------------. + xxxx,ROOT,PPLY,PSEF,xxxx,xxxx, RST,STOG,xxxx,xxxx,xxxx, DEL, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + RGB,RHUI,RSAI,RVAI, MOD,xxxx, F1 , F2 , F3 , F4 , F5 , F6 , +// |----+----+----+----+----+----| |----+----+----+----+----+----| + RBTH,RHUD,RSAD,RVAD,RMOD,xxxx, F7 , F8 , F9 , F10, F11, F12, +// |----+----+----+----+----+----| |----+----+----+----+----+----| + ,xxxx,xxxx,xxxx, ,xxxx, xxxx, ,xxxx,xxxx,xxxx,xxxx +// '-----------------------------' '-----------------------------' + ) +}; diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk b/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk new file mode 100644 index 0000000000..75e9c6503e --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk @@ -0,0 +1,5 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/normacos/config.h b/keyboards/handwired/xeal60/keymaps/normacos/config.h new file mode 100644 index 0000000000..9f95a869df --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/normacos/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define _MASTER_RIGHT +#define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/normacos/keymap.c b/keyboards/handwired/xeal60/keymaps/normacos/keymap.c new file mode 100644 index 0000000000..8902b7b56f --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/normacos/keymap.c @@ -0,0 +1,213 @@ +#include QMK_KEYBOARD_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 _NORMAN 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 3 + +// To be used in process_record_user +enum custom_keycodes { + NORMAN = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, + SH_LOG, + SH_GOUP, + SH_TERM, + SPOT, + SLACK, + OUTLOOK, + CHROME +}; + +// Fillers (to make layering more clear) +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Mod taps +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define CTL_ESC CTL_T(KC_ESC) // Tap for Escape, hold for Control + +// Custom macros +#define SCN_SHT LSFT(LGUI(KC_4)) // Take a screenshot (MacOS) +#define SCN_LCK LCTL(LGUI(KC_Q)) // Lock screen (MacOS) +#define SH_HOME LCTL(KC_A) // Go to start of line +#define SH_END LCTL(KC_E) // Go to end of line +#define SH_RSCH LCTL(KC_R) // Search command history +#define SH_CLRH LCTL(KC_U) // Erase to beginning of line +#define SH_CLRE LCTL(KC_K) // Erase to end of line + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Norman + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | Q | W | D | F | K | | J | U | R | L | ; | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |CtlEsc| A | S | E | T | G | | Y | N | I | O | H | ' | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | P | M | , | . | / |SftEnt| + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| + * `-----------------------------------------' `-----------------------------------------' + */ +[_NORMAN] = LAYOUT_ortho_4x12( \ + KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_BSPC, \ + CTL_ESC, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ + SCN_LCK, KC_HOME, KC_END, KC_LALT, LOWER, KC_LGUI, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | F1 | F2 | F3 | F4 | | |NumLck| 7 | 8 | 9 | = | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |CtlEsc| F5 | F6 | F7 | F8 | | | * | 4 | 5 | 6 | + | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| F9 | F10 | F11 | F12 | | | / | 1 | 2 | 3 | - |SftEnt| + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Lock | Home | End | Alt | Lower| GUI | | . | Raise| 0 | Spot |Chrome| | + * `-----------------------------------------' `-----------------------------------------' + */ +[_LOWER] = LAYOUT_ortho_4x12( \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PEQL, _______, \ + _______, KC_F5, KC_F6, KC_F8, KC_F9, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_DEL, \ + _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______, \ + _______, _______, _______, _______, _______, _______, KC_PDOT, _______, KC_P0, SPOT, CHROME, XXXXXXX +), + +/* Raise + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |CtlEsc| Log | UpDir| Slack| Term | OutLk| | = | - | \ | [ | ] | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift|ClrHom|ClrEnd|ShHome| ShEnd|Search| | Play | Mute | VolDn| VolUp|ScnSht|SftEnt| + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| + * `-----------------------------------------' `-----------------------------------------' + */ +[_RAISE] = LAYOUT_ortho_4x12( \ + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + _______, SH_LOG, SH_GOUP, SLACK, SH_TERM, OUTLOOK, KC_EQL, KC_MINS, KC_BSLS, KC_LBRC, KC_RBRC, KC_GRV, \ + _______, SH_CLRH, SH_CLRE, SH_HOME, SH_END, SH_RSCH, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, SCN_SHT, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | Reset| | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | AudOn|AudOff| | |Norman| | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | Lower| | | | Raise| | | | | + * `-----------------------------------------' `-----------------------------------------' + */ +[_ADJUST] = LAYOUT_ortho_4x12( \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, XXXXXXX, NORMAN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX +) + +}; + +#ifdef AUDIO_ENABLE +float tone_norman[][2] = SONG(QWERTY_SOUND); +#endif + +void persistent_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 (record->event.pressed) { + switch(keycode) { + case NORMAN: + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_norman); + #endif + persistent_default_layer_set(1UL<<_NORMAN); + return false; + case LOWER: + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + case RAISE: + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + case ADJUST: + layer_on(_ADJUST); + return false; + case SH_LOG: // Open Jira log work window + SEND_STRING(SS_TAP(X_DOT)); + _delay_ms(100); + SEND_STRING("log work"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + case SH_GOUP: // Go up a directory + SEND_STRING("cd .."SS_TAP(X_ENTER)); + return false; + case SH_TERM: // Open Terminal + SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); + _delay_ms(100); + SEND_STRING("terminal"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + case SPOT: // Open Spotify + SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); + _delay_ms(100); + SEND_STRING("spotify app"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + case SLACK: // Open Slack + SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); + _delay_ms(100); + SEND_STRING("slack"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + case OUTLOOK: // Open MS Outlook + SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); + _delay_ms(100); + SEND_STRING("outlook"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + case CHROME: // Open Chrome + SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); + _delay_ms(100); + SEND_STRING("chrome"); + _delay_ms(100); + SEND_STRING(SS_TAP(X_ENTER)); + return false; + } + } else { + switch(keycode) { + case LOWER: + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + case RAISE: + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + case ADJUST: + layer_off(_ADJUST); + return false; + } + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/normacos/readme.md b/keyboards/handwired/xeal60/keymaps/normacos/readme.md new file mode 100644 index 0000000000..3b7a20632b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/normacos/readme.md @@ -0,0 +1,86 @@ +# normacos +This keymap was designed specifically to be used on a MacOS High Sierra system with constant use of the Terminal, as it includes a multitude of macros for both the terminal as well as Spotlight Search. + +Norman keyboard layout [info page.](https://normanlayout.info/) + +Some Norman layout keys were placed on different layers and different positions based on available space and preference. + + +Macros: +- CtlEsc sends Escape when tapped, and Control when held. +- SftEnt sends Enter when tapped, and Shift when held. +- Lock locks the computer +- Slack opens Slack through Spotlight Search +- Term opens Terminal through Spotlight Search +- Spot opens Spotify through Spotlight Search +- Chrome opens Chrome through Spotlight Search +- OutLk opens Microsoft Outlook through Spotlight Search +- ScnSht allows the user to take a screenshot of a selected portion of the screen +- ClrHom clears Terminal line from beginning of line up to cursor +- ClrEnd clears Terminal line from cursor up to end of line +- ShHome moves Terminal cursor to beginning of line +- ShEnd moves Terminal cursor to end of line +- Search activates Terminal Reverse Search Command History +- Log opens the 'Log Work' modal on Atlassian's Jira web client +- UpDir moves working directory to its parent + +All macros that make use of the SEND_STRING command have a 100 millisecond wait before and after "writing" to let the computer/OS/app catch up. +Any and all empty keys shown below are will be set in the future, and do nothing as of the time of this writing. + + + +## Default (Norman) +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | Q | W | D | F | K | | J | U | R | L | ; | Bksp | +|------+------+------+------+------+------| |------+------+------+------+------+------| +|CtlEsc| A | S | E | T | G | | Y | N | I | O | H | ' | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift| Z | X | C | V | B | | P | M | , | . | / |SftEnt| +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| +`-----------------------------------------' `-----------------------------------------' +``` + + +## Lower +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | F1 | F2 | F3 | F4 | | |NumLck| 7 | 8 | 9 | = | Bksp | +|------+------+------+------+------+------| |------+------+------+------+------+------| +|CtlEsc| F5 | F6 | F7 | F8 | | | * | 4 | 5 | 6 | + | Del | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift| F9 | F10 | F11 | F12 | | | / | 1 | 2 | 3 | - |SftEnt| +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Lock | Home | End | Alt | Lower| GUI | | . | Raise| 0 | Spot |Chrome| | +`-----------------------------------------' `-----------------------------------------' +``` + + +## Raise + +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+------| |------+------+------+------+------+------| +|CtlEsc| Log | UpDir| Slack| Term | OutLk| | = | - | \ | [ | ] | ` | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift|ClrHom|ClrEnd|ShHome| ShEnd|Search| | Play | Mute | VolDn| VolUp|ScnSht|SftEnt| +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| +`-----------------------------------------' `-----------------------------------------' +``` + +## Adjust (Lower + Raise) + +``` +,-----------------------------------------. ,-----------------------------------------. +| | | | | | | | | | | | Reset| | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | AudOn|AudOff| | |Norman| | | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | | | | | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | Lower| | | | Raise| | | | | +`-----------------------------------------' `-----------------------------------------' +``` diff --git a/keyboards/handwired/xeal60/keymaps/piemod/README.md b/keyboards/handwired/xeal60/keymaps/piemod/README.md new file mode 100644 index 0000000000..f2a051da14 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/piemod/README.md @@ -0,0 +1,31 @@ +PieMod +====== + +A keymap for users that need: + +- *P*: Programming symbols. + +- *I*: i3wm. + +- *E*: Emacs. + +- *M*: Macros. + +- *O*: Ortholinear. + +- *D*: Dvorak. + +Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod. + +### Keymap + +![PieMod Keymap](./keymap.png) + +### TODO + +- [ ] Add Emacs layer. +- [ ] Add Macro layer. +- [ ] Add system control keys (rotation, brightness). +- [ ] Switch " and ' quotes (or function to toggle default). +- [ ] Add capslock. +. diff --git a/keyboards/handwired/xeal60/keymaps/piemod/config.h b/keyboards/handwired/xeal60/keymaps/piemod/config.h new file mode 100644 index 0000000000..001b62e41b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/piemod/config.h @@ -0,0 +1,49 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +// RGB Options +#undef RGBLED_NUM +#define RGBLED_NUM 10 +#define RGBLIGHT_SLEEP +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 1 + +// Typing Options +#define PREVENT_STUCK_MODIFIERS +#define QMK_KEYS_PER_SCAN 4 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/piemod/keymap.c b/keyboards/handwired/xeal60/keymaps/piemod/keymap.c new file mode 100644 index 0000000000..d789b7a8be --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/piemod/keymap.c @@ -0,0 +1,99 @@ +#include QMK_KEYBOARD_H + + +extern keymap_config_t keymap_config; + +#define _DVORAK 0 +#define _ARROW 1 //F(1) +#define _SYMBOL 2 // F(2) +#define _NUMBER 3 // F(3) +#define _FUNCTION 4 // F(4) +#define _EMACS 5 // F(5) +#define _COMBOS 6 // F(6) +#define _MOUSE 7 // F(7) + +enum custom_keycodes { + DVORAK = SAFE_RANGE, + ARROW, + SYMBOL, + NUMBER, + FUNCTION, + EMACS, + COMBOS, + MOUSE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_DVORAK] = LAYOUT( \ + KC_ESC, KC_QUOTE, LT(7, KC_COMMA), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE, \ + KC_TAB, LT(1, KC_A), LT(2, KC_O), LT(3, KC_E), LT(4, KC_U), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER, \ + KC_LSHIFT, KC_SCOLON, LT(5, KC_Q), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS, \ + F(1), LT(6, KC_LCTRL), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ +), + +[_ARROW] = LAYOUT( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, \ + KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, 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 \ +), + +[_SYMBOL] = LAYOUT( \ + KC_TILD, KC_GRAVE, KC_NO, KC_EQUAL, KC_PLUS, KC_NO, KC_LBRACKET, KC_RBRACKET, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ + KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(2), \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSLASH, KC_SLASH, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \ +), + +[_NUMBER] = LAYOUT( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \ +), + +[_FUNCTION] = LAYOUT( \ + KC_PSCREEN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, \ + KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, \ + RESET, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ +), + +[_EMACS] = LAYOUT( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ +), + +[_COMBOS] = LAYOUT( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ +), + +[_MOUSE] = LAYOUT( \ + KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, KC_NO \ +) +}; + +enum function_id { + TEENSY_KEY, + CUSTOM_KEY, + L_CTRL_ALT_ENT, + R_CTRL_ALT_ENT, +}; + +int CAPSLOCKED = 0; + + const uint16_t PROGMEM fn_actions[] = { + // Special Keys + [1] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt. + // Symbols + [2] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark. + }; diff --git a/keyboards/handwired/xeal60/keymaps/piemod/rules.mk b/keyboards/handwired/xeal60/keymaps/piemod/rules.mk new file mode 100644 index 0000000000..027ea977e7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/piemod/rules.mk @@ -0,0 +1,13 @@ +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 = 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 # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = yes # 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. +SUBPROJECT_rev1 = no diff --git a/keyboards/handwired/xeal60/keymaps/pitty/README.md b/keyboards/handwired/xeal60/keymaps/pitty/README.md new file mode 100644 index 0000000000..1662fce7ab --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/pitty/README.md @@ -0,0 +1,91 @@ +# Pittyolo's Let's Split Layout + +This is my Let's Split layout, modified for my ISO Hungarian taste :) + +Added some layer feedback in the underglow, but it's still a WIP. + +I wrote the keys that will appear when using Hungarian layout in Windows and the respective English keys in brackets. + + + ### Qwerty +``` +,-----------------------------------------------------------------------------------. +| Tab | Q | W | E | R | T | Z(Y)| U | I | O | P | Bksp | +|------+------+------+------+------+-------------+------+------+------+------+------| +| Esc | A | S | D |LTVIMF| G | H | J | K | L | É(;)| Á(") | +|------+------+------+------+------+------|------+------+------+------+------+------| +|Í/Shft| Y(Z) | X | C | V | B | N | M | , | . | -(/)| Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| Ctrl | GUI | Alt |ADJUST| Spc | LOWER| Bksp | Ent | Alt | =(&) | GAME | Del | +`-----------------------------------------------------------------------------------' +``` + + Tap left shift writes the missing ISO key, hold is Shift. + + + ### Gaming mode (Toggle layer) +``` +,-----------------------------------------------------------------------------------. +| | | | | | | | | | | |Lower | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | F | | | | | | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| Shift| | | | | | | | | | |QWERTY| +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | Left | Down | Up | Right| +`-----------------------------------------------------------------------------------' +``` + +Disabled some of the functions in the main layer to help with better gaming experience. + + + ### Lower (Hold down right Space) +``` +,-----------------------------------------------------------------------------------. +| 0(') | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Ö(0) | Ü(-) | +|------+------+------+------+------+------+------+------+------+------+------+------| +| F10 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F11 | F12 | +|------+------+------+------+------+-------------+------+------+------+------+------| +| | | | | | | | | Ins | Home | PgUp | Shift| +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | | | | | Del | End | PgDn | AltGr| +`-----------------------------------------------------------------------------------' +``` + + Function layer with everything that is missing from the main layer. + + + ### NAV (double tap toggles the layer, and hold for momentary switch) +``` +,-----------------------------------------------------------------------------------. +| | | Up | | F2 | | | 7 | 8 | 9 | / | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | Left | Down | Right| | | | 4 | 5 | 6 | * | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| Shift| | | | | | | 1 | 2 | 3 | - | | +|------+------+------+------+------+------|------+------+------+------+------+------| +| | | | | | | | 0 | . | = | + | | +`-----------------------------------------------------------------------------------' +``` + + Navigation layer with a numpad on the right side. + + + + ### Vim Movement (Hold down F) +``` +,-----------------------------------------------------------------------------------. +|RGBMOD|RGBTOG| | | | | | Ú | Í | Ó | Ő | Ű | +|------+------+------+------+------+------+------+------+------+------+------+------| +|DM_stp| | | LCTRL| | | Left | Down | Up | Right| | | +|------+------+------+------+------+------+------+------+------+------+------+------| +|DM_REC| | | | | | | | | | | | +|------+------+------+------+------+------+------+------+------+------+------+------| +| | | | | LShft| | | | | | | RESET| +`-----------------------------------------------------------------------------------' +``` + + Turns hjkl into vim movement. I moved accented Hungarian letters here. + + + diff --git a/keyboards/handwired/xeal60/keymaps/pitty/config.h b/keyboards/handwired/xeal60/keymaps/pitty/config.h new file mode 100644 index 0000000000..3798f9a647 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/pitty/config.h @@ -0,0 +1,26 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TOGGLE 2 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 2 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/pitty/keymap.c b/keyboards/handwired/xeal60/keymaps/pitty/keymap.c new file mode 100644 index 0000000000..0fd4c1384f --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/pitty/keymap.c @@ -0,0 +1,169 @@ +#include QMK_KEYBOARD_H + + +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_config; + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _GAME 1 +#define _LOWER 2 +#define _NAV 3 +#define _VIM 4 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + GAME, + LOWER, + NAV, + VIM, +}; + + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Z(Y)| U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D |LTVIMF| G | H | J | K | L | É(;)| Á(") | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |Í/Shft| Y(Z) | X | C | V | B | N | M | , | . | -(/)| Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |ADJUST| Spc | LOWER| Bksp | Ent | Alt | =(&) | GAME | Del | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, LT(_VIM, KC_F), KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + MT(MOD_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_LCTL, KC_LGUI, KC_LALT, TT(_NAV), KC_SPC, LT(_LOWER, KC_SPC), KC_BSPC, KC_ENT, KC_RALT, KC_AMPERSAND, TG(_GAME), KC_DEL \ +), + +/* Gaming mode + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | |Lower | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | F | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| | | | | | | | | | |QWERTY| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Left | Down | Up | Right| + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = LAYOUT( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OSL(_LOWER), \ + _______, _______, _______, _______, KC_F, _______, _______, _______, _______, _______, _______, _______, \ + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | 0(') | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Ö(0) | Ü(-) | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | F10 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F11 | F12 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | Ins | Home | PgUp | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Del | End | PgDn | AltGr| + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, \ + KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F11, KC_F12, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, KC_RSFT, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, KC_RALT \ +), + + +/* NAV + * ,-----------------------------------------------------------------------------------. + * | | | Up | | F2 | | | 7 | 8 | 9 | / | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | Left | Down | Right| | | | 4 | 5 | 6 | * | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| | | | | | | 1 | 2 | 3 | - | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | 0 | . | = | + | | + * `-----------------------------------------------------------------------------------' + */ +[_NAV] = LAYOUT( \ + _______, _______, KC_UP, _______, KC_F2, _______, _______, KC_7, KC_8, KC_9, KC_KP_SLASH, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_4, KC_5, KC_6, KC_KP_ASTERISK, _______, \ + KC_LSFT, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_KP_MINUS, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_KP_DOT, KC_KP_EQUAL, KC_KP_PLUS, _______ \ +), + +/* Vim Movement (Hold down F) + * ,-----------------------------------------------------------------------------------. + * |RGBMOD|RGBTOG| | | | | | Ú | Í | Ó | Ő | Ű | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |DM_stp| | | LCTRL| | | Left | Down | Up | Right| | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |DM_REC| | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | LShft| | | | | | | RESET| + * `-----------------------------------------------------------------------------------' + */ +[_VIM] = LAYOUT( \ + RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, KC_RBRC, KC_NUBS, KC_EQL , KC_LBRC, KC_NUHS, \ + _______, _______, _______, KC_LCTL, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, KC_LSFT, _______, _______, _______, _______, _______, _______, RESET \ +) + + +}; + +// define variables for reactive RGB +bool RGB_INIT = false; +bool TOG_STATUS = false; +int RGB_current_mode; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + switch (layer) { + case _NAV: + if (RGB_INIT) {} else { + RGB_current_mode = rgblight_config.mode; + RGB_INIT = true; + } + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(29); + } + break; + case _LOWER: + if (RGB_INIT) {} else { + RGB_current_mode = rgblight_config.mode; + RGB_INIT = true; + } + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + rgblight_mode(29); + } + break; + case _QWERTY: + if (RGB_INIT) {} else { + RGB_current_mode = rgblight_config.mode; + RGB_INIT = true; + } + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + TOG_STATUS = false; + break; + } + }; diff --git a/keyboards/handwired/xeal60/keymaps/pitty/rules.mk b/keyboards/handwired/xeal60/keymaps/pitty/rules.mk new file mode 100644 index 0000000000..8ebc85a44b --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/pitty/rules.mk @@ -0,0 +1,6 @@ +RGBLIGHT_ENABLE = yes +NKRO_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/poker/config.h b/keyboards/handwired/xeal60/keymaps/poker/config.h new file mode 100644 index 0000000000..5a6261c4f7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/poker/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/poker/keymap.c b/keyboards/handwired/xeal60/keymaps/poker/keymap.c new file mode 100644 index 0000000000..cce0ca4741 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/poker/keymap.c @@ -0,0 +1,240 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _FN 5 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + FN, + ADJUST +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Func | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Up | Down |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + FN , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + SFT_T(KC_ESC) , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), \ + KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Func | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + KC_TAB , KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + FN , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + SFT_T(KC_ESC) , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), \ + KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Func | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + KC_TAB , KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + FN , KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + SFT_T(KC_ESC) , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MT(MOD_RSFT, KC_ENT), \ + KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Home |Pg Up |Pg Dn | End | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL , \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | Home |Pg Up |Pg Dn | End | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL , \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \ +), + +/* Function + * ,-----------------------------------------------------------------------------------. + * | Esc | | Prev | Play | Next | | |Pg Up | Up |Pg Dn |Prt Sc| Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | Vol- | Mute | Vol+ | | Home | Left | Down |Right | End | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | Esc | | | Esc | Home |Pg Up |Pg Dn | End | + * `-----------------------------------------------------------------------------------' + */ +[_FN] = LAYOUT( \ + KC_ESC , _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_DEL, \ + _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, KC_ESC , _______, _______, KC_ESC , KC_HOME, KC_PGUP, KC_PGDN, KC_END \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Caps |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | Caps | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + [_ADJUST] = LAYOUT( \ + _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , \ + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + KC_CAPS, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, KC_CAPS, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case FN: + if (record->event.pressed) { + layer_on(_FN); + } else { + layer_off(_FN); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/poker/rules.mk b/keyboards/handwired/xeal60/keymaps/poker/rules.mk new file mode 100644 index 0000000000..457a3d01d4 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/poker/rules.mk @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/smt/config.h b/keyboards/handwired/xeal60/keymaps/smt/config.h new file mode 100644 index 0000000000..5a6261c4f7 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/smt/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/smt/keymap.c b/keyboards/handwired/xeal60/keymaps/smt/keymap.c new file mode 100644 index 0000000000..090cf78b7c --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/smt/keymap.c @@ -0,0 +1,218 @@ +#include QMK_KEYBOARD_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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) +#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------' `-----------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ + MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Colemak + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | R | S | T | D | | H | N | E | I | O | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------' `-----------------------------------------' + */ +[_COLEMAK] = LAYOUT( \ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ + MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Dvorak + * ,-----------------------------------------. ,-----------------------------------------. + * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | O | E | U | I | | D | H | T | N | S | - | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------' `-----------------------------------------' + */ +[_DVORAK] = LAYOUT( \ + HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ + MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------. ,-----------------------------------------. + * | 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------' `-----------------------------------------' + */ +[_LOWER] = LAYOUT( \ + ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ + CTL_T(KC_DLR), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------. ,-----------------------------------------. + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | _ | ? | + | { | } | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | - | / | = | [ | ] | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | Home |PageDn|PageUp| End | + * `-----------------------------------------' `-----------------------------------------' + */ +[_RAISE] = LAYOUT( \ + ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + _______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS), \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------. ,-----------------------------------------. + * | | Reset| | | | | | | | | | | Reset| + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | | | | | | | + * `-----------------------------------------' `-----------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/smt/readme.md b/keyboards/handwired/xeal60/keymaps/smt/readme.md new file mode 100644 index 0000000000..20bc662f0a --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/smt/readme.md @@ -0,0 +1,88 @@ +# smt's Let's Split keymap + +This keymap is ported from my Planck keymap. + + +## Qwerty + +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Esc | A | S | D | F | G | | H | J | K | L | ; | " | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | +`-----------------------------------------' `-----------------------------------------' +``` + +## Colemak + +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Esc | A | R | S | T | D | | H | N | E | I | O | " | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | +`-----------------------------------------' `-----------------------------------------' +``` + +## Dvorak + +``` +,-----------------------------------------. ,-----------------------------------------. +| Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Esc | A | O | E | U | I | | D | H | T | N | S | - | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | +`-----------------------------------------' `-----------------------------------------' +``` + +## Lower + +``` +,-----------------------------------------. ,-----------------------------------------. +| 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | | | Next | Vol- | Vol+ | Play | +`-----------------------------------------' `-----------------------------------------' +``` + +## Raise + +``` +,-----------------------------------------. ,-----------------------------------------. +| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | _ | ? | + | { | } | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | - | / | = | [ | ] | \ | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | | | Home |PageDn|PageUp| End | +`-----------------------------------------' `-----------------------------------------' +``` + +## Adjust (Lower + Raise) + +``` +,-----------------------------------------. ,-----------------------------------------. +| | Reset| | | | | | | | | | | Reset| +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | | | | | | | +|------+------+------+------+------+------| |------+------+------+------+------+------| +| | | | | | | | | | | | | | +`-----------------------------------------' `-----------------------------------------' +``` diff --git a/keyboards/handwired/xeal60/keymaps/that_canadian/config.h b/keyboards/handwired/xeal60/keymaps/that_canadian/config.h new file mode 100644 index 0000000000..586b6e8c87 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/that_canadian/config.h @@ -0,0 +1,32 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define _MASTER_RIGHT +// #define EE_HANDS + +#endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c b/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c new file mode 100644 index 0000000000..239a8d3bee --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c @@ -0,0 +1,163 @@ +#include QMK_KEYBOARD_H +#include "action_layer.h" +#include "eeconfig.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 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, + BACKLIT +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | RESET| Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Backlt| Ctrl | GUI | Alt |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT( \ + RESET, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + RGB_TOG, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + BACKLIT, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + 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; + break; + 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; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/waples/README.md b/keyboards/handwired/xeal60/keymaps/waples/README.md new file mode 100644 index 0000000000..6e171d964f --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/waples/README.md @@ -0,0 +1,58 @@ +# Waples Let's Split keymap +[Waples](https://www.github.com/Waples) + +## My (forever) Work-In-Progress keymap for my Let's Split keyboard. +My keymap is much like the default, I just personally like to have my Enter and Escape key to be on my home row. The Escape key doubles as a Control key when held down, my Enter key functions as (right)Shift when held down. +Everything you see below here is constantly *under construction*, so there may be some dumb things in this, which are already gotten taken out, or are still in there :P. + +### Layers +I currently have the following layers in my keymap: +* Qwerty (as default) +* Dvorak (still learning this type of layout, so not really used much) +* Gaming (WIP! I tried some I found, but didn't like them, so I'm in the progress of making my own) +* Lefty (lower) +* Righty (raise) +* Dual (adjust) + +#### QWERTY + | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bsp | + |C_Esc| A | S | D | F | G | | H | J | K | L | ; |S_Ent| + | Sft | Z | X | C | V | B | | N | M | , | . | / | " | + |P_SCR| GUI | Alt | Cps | ^L^ | Bsp | | Spc | ^R^ | Lft | Dwn | Up! | Rgt | + + +#### DVORAK + | Tab | " | , | . | P | Y | | F | G | C | R | L | Bsp | + |C_Esc| A | O | E | U | I | | D | H | T | N | S |S_Ent| + | Sft | ; | Q | J | K | X | | B | M | W | V | Z | / | + |P_SCR| GUI | Alt | Cps | ^L^ | Bsp | | Spc | ^R^ | Lft | Dwn | Up! | Rgt | + + +#### GAMING + | Tab | Q | W | E | R | T | | | | | | |QWERT| + | Esc | A | S | D | F | G | | | | | | | | + | Sft | Z | X | C | V | B | | | | | | | | + | Ctl | 1 | 2 | 3 | ^L^ | Spc | | Bsp | ^R^ | Lft | Dwn | Up | Rgt | + + +#### LEFTY (lower) + | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bsp | + | Del | | | | | | | | ( | ) | [ | ] | | + | | | | | | | | | | | | | | + | | | | | | | | Ins | | Hme | PgD | PgU | End | + + +#### RIGHTY (raise) + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp | + | Del | F1 | F2 | F3 | F4 | | | = | - | \ | / | | | + | | F5 | F6 | F7 | F8 | | | | | | | | | + | | F9 | F10 | F11 | | | | | | | | | | + + +#### DUAL + |Reset| | | | |QWERT| | GAME| | | | |Reset| + | | Prv | Stp | Tog | Nxt | Nrm | | Swp | | | | | | + | | | Mte | Vol-| Vol+| | | NKRO| | | | | | + | | | | | | | |DVORK| | | | | | + + diff --git a/keyboards/handwired/xeal60/keymaps/waples/config.h b/keyboards/handwired/xeal60/keymaps/waples/config.h new file mode 100644 index 0000000000..98ebeff455 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/waples/config.h @@ -0,0 +1,17 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS // We like to have choices I guess + +#define PREVENT_STUCK_MODIFIERS // When switching layers, this will release all mods + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/waples/keymap.c b/keyboards/handwired/xeal60/keymaps/waples/keymap.c new file mode 100644 index 0000000000..7b25bc51f5 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/waples/keymap.c @@ -0,0 +1,131 @@ +// Waples layout for Let's Split (rev2) +// Made changes from the default + +#include QMK_KEYBOARD_H + + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _DVORAK 1 +#define _GAME 2 +#define _LEFTY 3 +#define _RIGHTY 4 +#define _DUAL 5 + +enum letssplit_keycodes { + QWERTY = SAFE_RANGE, + DVORAK, + GAME, + LEFTY, + RIGHTY, + DUAL, +}; + +#define TG_NKRO MAGIC_TOGGLE_NKRO // Toggle NKRO +#define CTLESC MT(MOD_LCTL, KC_ESC) // Hold for left Ctrl, tap for Esc +#define SHFTENT MT(MOD_RSFT, KC_ENT) // Hold for right Shift, tap for Enter +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_QWERTY] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SHFTENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \ + KC_PSCR, KC_BSPC, KC_LALT, KC_CAPS, LEFTY, KC_LGUI, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +[_DVORAK] = LAYOUT( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + CTLESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, SHFTENT, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, \ + KC_PSCR, KC_LGUI, KC_LALT, KC_CAPS, LEFTY, KC_BSPC, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +[_GAME] = LAYOUT( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______, _______, _______, _______, _______, QWERTY, \ + CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, _______, _______, _______, _______, _______, _______, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, _______, _______, _______, _______, \ + KC_LCTL, KC_1, KC_2, KC_3, LEFTY, KC_SPC, KC_BSPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ +), + +[_LEFTY] = LAYOUT( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_INS, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ +), + +[_RIGHTY] = LAYOUT( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, _______, KC_EQL, KC_MINS, KC_BSLS, KC_SLSH, _______, _______, \ + _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, + _______, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +[_DUAL] = LAYOUT( \ + RESET, _______, _______, _______, _______, QWERTY, GAME, _______, _______, _______, _______, RESET, \ + _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, \ + _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, TG_NKRO, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, DVORAK, _______, _______, _______, _______, _______ \ +) +}; + +void persistent_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) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case GAME: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_GAME); + } + return false; + break; + case LEFTY: + if (record->event.pressed) { + layer_on(_LEFTY); + update_tri_layer(_LEFTY, _RIGHTY, _DUAL); + } else { + layer_off(_LEFTY); + update_tri_layer(_LEFTY, _RIGHTY, _DUAL); + } + return false; + break; + case RIGHTY: + if (record->event.pressed) { + layer_on(_RIGHTY); + update_tri_layer(_LEFTY, _RIGHTY, _DUAL); + } else { + layer_off(_RIGHTY); + update_tri_layer(_LEFTY, _RIGHTY, _DUAL); + } + return false; + break; + case DUAL: + if (record->event.pressed) { + layer_on(_DUAL); + } else { + layer_off(_DUAL); + } + return false; + break; + } + return true; +} diff --git a/keyboards/handwired/xeal60/keymaps/waples/rules.mk b/keyboards/handwired/xeal60/keymaps/waples/rules.mk new file mode 100644 index 0000000000..457a3d01d4 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/waples/rules.mk @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/xk/config.h b/keyboards/handwired/xeal60/keymaps/xk/config.h new file mode 100644 index 0000000000..c75ed12cc8 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/xk/config.h @@ -0,0 +1,44 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define TAPPING_TOGGLE 1 +#define TAPPING_TERM 300 +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_LAYER_TOGGLE 2 +#define ONESHOT_TIMEOUT 800 + +#define USE_I2C + +#define MOUSEKEY_INTERVAL 50 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 + +#define MOUSEKEY_WHEEL_DELAY 0 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + + +#define PREVENT_STUCK_MODIFIERS +#define IGNORE_MOD_TAP_INTERRUPT +#define PERMISSIVE_HOLD + +#endif diff --git a/keyboards/handwired/xeal60/keymaps/xk/keymap.c b/keyboards/handwired/xeal60/keymaps/xk/keymap.c new file mode 100644 index 0000000000..c032b865aa --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/xk/keymap.c @@ -0,0 +1,370 @@ +#include QMK_KEYBOARD_H + + +extern keymap_config_t keymap_config; + +#define _COLEMAK 0 +#define _KAMELOC 1 +#define _IKAPILA 2 +#define _IKASHFT 3 +#define _ARROWKY 4 +#define _FNCTION 5 +#define _NINEKEY 6 +#define _NAVIGAT 7 +#define _QWERTY 8 +#define _MLAYER 9 +#define _GRVTABL 15 + +enum custom_keycodes { + COLEMAK = SAFE_RANGE, + KAMELOC, + IKAPILA, + IKASHFT, + ARROWKY, + FNCTION, + NINEKEY, + NAVIGAT, + QWERTY, + MLAYER, + GRVTABL, +}; + +//TD Declarations +enum { +VOM = 0, +PRN, +EGT, +HRD, +XRD, +DSH, +ESC, +EQE, +PGN, +HND, +COD, +UND, +F11, +F12, +F13, +F14, +F15, +F16, +F17, +F18, +F19, +F20, +//unicode_inputctl +LINUX, +WIN, +WINSH, +OSX, +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// action-TAP for key/mod behavior LT(layer, KC) +#define XK_TAB LT(_FNCTION, KC_TAB) +#define XK_BSP LT(_KAMELOC, KC_BSPC) +#define XK_APO LT(_KAMELOC, KC_QUOT) + +#define XK_SPC LT(_IKAPILA, KC_SPC) +#define XK_ENT LT(_IKAPILA, KC_ENT) +#define XK_PGDN LT(_IKASHFT, KC_PGDN) +#define XK_PGUP LT(_IKASHFT, KC_PGUP) +#define PIPBOY LT(_FNCTION, KC_BSLS) +#define XK_DEL LT(_IKASHFT, KC_DEL) +#define XK_GRV LT(_GRVTABL, KC_GRV) + +// mod-TAP for mod/key behavior MT(modkey, KC) +#define ALT_IT MT(MOD_RALT, KC_SCLN) +#define CTL_IT MT(MOD_RCTL, KC_DOT) +#define SFT_ENT MT(MOD_RSFT, KC_ENT) + +//sticky modifiers +#define KYCTL OSM(MOD_LCTL) +#define KYSFT OSM(MOD_LSFT) +#define CAKY OSM(MOD_LCTL | MOD_LALT) + +//shortcuts +#define CADEL LALT(LCTL(KC_DEL)) +#define CAINS LALT(LCTL(KC_INS)) +#define TGNKRO MAGIC_TOGGLE_NKRO + +#define NAVCH LCTL(KC_HOME) +#define NAVCPD LCTL(KC_PGDN) +#define NAVCPU LCTL(KC_PGUP) +#define NAVCE LCTL(KC_END) +#define NAVCU LCTL(KC_UP) +#define NAVCD LCTL(KC_DOWN) +#define NAVCL LCTL(KC_LEFT) +#define NAVCR LCTL(KC_RGHT) +#define NAVGU LGUI(KC_UP) +#define NAVGD LGUI(KC_DOWN) +#define NAVGL LGUI(KC_LEFT) +#define NAVGR LGUI(KC_RGHT) + +#define KC_NDSH LCTL(KC_PMNS) +#define KC_MDSH LALT(LCTL(KC_PMNS)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + TAP + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │TAB │ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │DEL │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │BKSP│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │OSFT│ X │ C │ D │ V │ Z │ │ K │ H │ , │ │ . │ / │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │OCTL│GUI │ESC │ALT │PGUP│SPC │ │ENT │PGDN│ () │ {} │ \ │ ` │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + HOLD + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │L FN│ │ │ │ │ │ │ │ │ │ │ALT │L!@#│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │L OH│ │ │ │ │ │ │ │ │ │ │ │L OH│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │SFT │ │ │ │ │ │ │ │ │ │ │CTL │SFT │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │CTL │GUI │ESC │ALT │L!@#│L123│ │L123│L!@#│L M│ │L FN│LGRV│ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + DOUBLETAP + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │OSML│ │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │OSML│OSML│!F4 │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + Switch type + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │Br │mxC │Z │Z │Z │Z │ │Z │Z │Z │Z │Br │G │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │G │Z │Z │Z │Z │Z │ │Z │Z │Z │Z │Z │Z │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │Y │Z │Z │Z │Z │Z │ │Z │Z │Z │B │B │Y │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │Y │Y │mxC │Z │BLK │BLK │ │BLK │BLK │Z │Z │B │G │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + with DCS keycaps + Top Row R1 (reversed?) + M Row1 R3 (with reversed pointer finger) + M Row2 R4 + B Row R2 (reversed) +*/ + +// Colemak PB&J (Mod-DH) +[_COLEMAK] = LAYOUT( \ + XK_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, ALT_IT, XK_DEL, \ + XK_BSP, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, XK_APO, \ + KYSFT, KC_X, KC_C, KC_D, KC_V, KC_Z, KC_K, KC_H, TD(COD), KC_DOT, CTL_IT, SFT_T(KC_SLSH), \ + KYCTL, KC_LGUI, TD(ESC), KC_LALT, XK_PGUP, XK_SPC, XK_ENT, XK_PGDN, MO(_MLAYER), TT(_NAVIGAT), PIPBOY, XK_GRV \ +), + +// useful for one-handed typing +[_KAMELOC] = LAYOUT( \ + XK_DEL, KC_SCLN, KC_Y, KC_U, KC_L, KC_J, KC_B, KC_P, KC_F, KC_W, KC_Q, XK_TAB, \ + _______, KC_O, KC_I, KC_E, KC_N, KC_M, KC_G, KC_T, KC_S, KC_R, KC_A, _______, \ + KYSFT, KC_SLSH, KC_DOT, KC_COMM, KC_H, KC_K, TD(UND), KC_V, KC_D, KC_C, KC_X, KYSFT, \ + XK_GRV, PIPBOY, M(1), KC_BTN1, KC_HOME, KC_ENT, KC_ENT, KC_END, KC_LGUI, TD(ESC), KC_LALT, KYCTL \ +), + +/* + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ M │ V- │ V+ │NEXT│PLAY│ │ ← │ ↓ │ ↑ │ → │DASH│INS │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ - │ = │TGL │ │ │ │HOME│END │HOME│ │ \ │ ~ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ +*/ +[_IKAPILA] = LAYOUT( \ + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(DSH), KC_INS, \ + _______, KC_MINS, KC_EQL, XXXXXXX, XXXXXXX, LCTL(KC_Z), KC_HOME, TD(HND), KC_HOME, XXXXXXX, KC_BSLS, KC_TILD, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +/* + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │BSPC│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │DEL │ │ ← │ ↓ │ ↑ │ → │ │NEXT│PGUP│ V+ │ V- │DASH│PSCR│ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ _ │ + │END │HOME│END │ │ │ │ │ [ │ ] │ │ + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ +*/ + +[_IKASHFT] = LAYOUT( \ + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, TD(PGN), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_MNXT, KC_PGUP, KC_VOLU, TD(VOM), KC_MDSH, KC_PSCR, \ + _______, KC_UNDS, KC_PLUS, KC_END, KC_HOME, KC_END, M(1), M(0), M(2), KC_LBRC, KC_RBRC, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +/* + ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ + │ │ → │ ↑ │ ← │ ↓ │ → │ │ → │ ↓ │ ← │ ↑ │ ↑ │ │ just in case someone hacks my IP with a 10MeG pipe, you know? + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ + │ │ ← │ ↓ │ → │ ↑ │ ← │ │ ↑ │ ← │ ↓ │ → │ ← │ │ hacker_evasion layer + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ >>init network SEQUENCE + │ │ ↑ │ ← │ ↓ │ → │ ↑ │ │ ↓ │ ← │ ↑ │ → │ ← │ │ sleep 11; echo "DONE\n" + ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ throttle INPUT 11001001 OUTPUT 010011001 ? FULL )); \ + │ │ │ │ → │ ← │ ↓ │ │ → │ ↑ │ ← │ ↓ │ ↑ │ │ <event.pressed) { + switch(id) { + case 0: + return MACRO( D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), T(LEFT), END ); + case 1: + return MACRO( D(LSFT), T(LBRC), U(LSFT), D(LSFT), T(RBRC), U(LSFT), T(LEFT), END ); + case 2: + return MACRO( T(LBRC), T(RBRC), T(LEFT), END); + case 3: + clear_keyboard(); + case 4: + return MACRO( D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(LBRACKET), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(BSLASH), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(7), U(LSFT), D(LSFT), T(RBRACKET), U(LSFT), T(SCOLON), D(LSFT), T(SCOLON), U(LSFT), END ); + case WINSH: + set_unicode_input_mode(UC_WIN); + return false; + break; + case WIN: + set_unicode_input_mode(UC_WINC); + return false; + break; + case OSX: + set_unicode_input_mode(UC_OSX); + return false; + break; + } + } + return MACRO_NONE; +}; diff --git a/keyboards/handwired/xeal60/keymaps/xk/rules.mk b/keyboards/handwired/xeal60/keymaps/xk/rules.mk new file mode 100644 index 0000000000..84bf8e1f59 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/xk/rules.mk @@ -0,0 +1,19 @@ +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +USE_I2C = yes +TAP_DANCE_ENABLE = yes + +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = yes # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/config.h b/keyboards/handwired/xeal60/keymaps/zer09/config.h new file mode 100644 index 0000000000..73438d8a93 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/zer09/config.h @@ -0,0 +1,59 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* key matrix size */ +/* Rows are doubled-up */ +#undef MATRIX_ROWS +#undef MATRIX_COLS +#define MATRIX_ROWS 10 +#define MATRIX_COLS 5 + +#undef MATRIX_ROW_PINS +#undef MATRIX_COL_PINS +#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 } + +#define CATERINA_BOOTLOADER +#define USB_MAX_POWER_CONSUMPTION 50 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +/* #define MASTER_LEFT */ +// #define MASTER_RIGHT +#define EE_HANDS + +/* ws2812 RGB LED */ +#undef RGBLED_NUM +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 50 +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/keymap.c b/keyboards/handwired/xeal60/keymaps/zer09/keymap.c new file mode 100644 index 0000000000..8d0eaf1411 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/zer09/keymap.c @@ -0,0 +1,38 @@ +#include "keymap.h" + +extern keymap_config_t keymap_config; + +#define _baseLayer LAYOUT( \ + KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, /**/KC_F, KC_G, KC_C, KC_R, KC_L, \ + CTL_T(KC_A), SFT_T(KC_O), ALT_T(KC_E), KC_U, KC_I, /**/KC_D, KC_H, ALT_T(KC_T), SFT_T(KC_N), CTL_T(KC_S), \ + KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, /**/KC_B, KC_M, KC_W, KC_V, KC_Z, \ + TD(DA_UPLY), MO(_VL), KC_TAB, KC_BSPACE, KC_ESC, /**/KC_INS, KC_HOME, KC_PGUP, MO(_VL), TD(DA_UPLY), \ + TD(DA_DWLY), TD(DA_LCTL), KC_SPC, TD(DA_LSPR), LSFT_T(KC_CAPS),/**/SFT_T(KC_CAPS), TD(DA_RALT), KC_ENT, TD(DA_RCTL), TD(DA_DWLY)) + +#define _upLayer LAYOUT( \ + KC_4, KC_5, KC_6, _______, _______,/**/ _______, KC_RBRC, _______, _______, _______, \ + LCTL_T(KC_1), LSFT_T(KC_2), LALT_T(KC_3), _______, _______,/**/ KC_LBRC, KC_BSLS, _______, _______, _______, \ + KC_7, KC_8, KC_9, KC_0, KC_GRV, /**/ KC_SLSH, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______,/**/ KC_DEL, KC_END, KC_PGDN, _______, _______, \ + _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) + +#define _downLayer LAYOUT( \ + KC_F4, KC_F5, KC_F6, KC_F12, _______,/**/ _______, KC_RPRN, _______, _______, _______, \ + LCTL_T(KC_F1), LSFT_T(KC_F2), LALT_T(KC_F3), KC_F11, _______,/**/ KC_LPRN, KC_EQUAL, KC_LEFT, KC_UP, KC_RIGHT, \ + KC_F7, KC_F8, KC_F9, KC_F10, _______,/**/ KC_MINUS, _______, _______, KC_DOWN, _______, \ + _______, _______, _______, _______, _______,/**/ KC_PSCR, KC_SLCK, KC_PAUSE, _______, _______, \ + _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) + +#define _astdLayer LAYOUT( \ + KC_MPRV, KC_MUTE, _______, _______, _______,/**/KC_PSCR, KC_SLCK, KC_PAUSE, _______, KC_RGUP, \ + KC_MPLY, KC_VOLD, _______, _______, _______,/**/_______, _______, _______, _______, KC_RGDWN, \ + KC_MNXT, KC_VOLU, RESET, _______, _______,/**/_______, _______, RESET, _______, _______, \ + _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BL] = _baseLayer, + [_UL] = _upLayer, + [_DL] = _downLayer, + [_VL] = _upLayer, + [_AL] = _astdLayer}; diff --git a/keyboards/handwired/xeal60/keymaps/zer09/keymap.h b/keyboards/handwired/xeal60/keymaps/zer09/keymap.h new file mode 100644 index 0000000000..03f8f480af --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/zer09/keymap.h @@ -0,0 +1,32 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "tap_dance.h" +#include "zer09.h" + +#ifdef LAYOUT_ortho_4x12 +#undef LAYOUT_ortho_4x12 +#endif + +#ifdef LAYOUT +#undef LAYOUT +#define LAYOUT( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \ + L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \ + L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \ +) \ + { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, L31, L32, L33, L34 }, \ + { L40, L41, L42, L43, L44 }, \ + { R00, R01, R02, R03, R04 }, \ + { R10, R11, R12, R13, R14 }, \ + { R20, R21, R22, R23, R24 }, \ + { R30, R31, R32, R33, R34 }, \ + { R40, R41, R42, R43, R44 } \ + } +#endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/rules.mk b/keyboards/handwired/xeal60/keymaps/zer09/rules.mk new file mode 100644 index 0000000000..d8adc70882 --- /dev/null +++ b/keyboards/handwired/xeal60/keymaps/zer09/rules.mk @@ -0,0 +1,6 @@ +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/handwired/xeal60/lets_split.c b/keyboards/handwired/xeal60/lets_split.c new file mode 100644 index 0000000000..c400ab7bb8 --- /dev/null +++ b/keyboards/handwired/xeal60/lets_split.c @@ -0,0 +1,16 @@ +#include "lets_split.h" + +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}, + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}, + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}, +}; +#endif diff --git a/keyboards/handwired/xeal60/lets_split.h b/keyboards/handwired/xeal60/lets_split.h new file mode 100644 index 0000000000..bce0ecb199 --- /dev/null +++ b/keyboards/handwired/xeal60/lets_split.h @@ -0,0 +1,31 @@ +#ifndef LETS_SPLIT_H +#define LETS_SPLIT_H + +#include "quantum.h" + +#ifdef KEYBOARD_lets_split_rev1 + #include "rev1.h" +#elif KEYBOARD_lets_split_rev2 + #include "rev2.h" +#elif KEYBOARD_lets_split_sockets + #include "sockets.h" +#endif + + +// Used to create a keymap using only KC_ prefixed keys +#define LAYOUT_kc( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ + ) \ + LAYOUT( \ + KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \ + KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \ + KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \ + KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \ + ) + +#define LAYOUT_kc_ortho_4x12 LAYOUT_kc + +#endif diff --git a/keyboards/handwired/xeal60/matrix.c b/keyboards/handwired/xeal60/matrix.c new file mode 100644 index 0000000000..f753d234a1 --- /dev/null +++ b/keyboards/handwired/xeal60/matrix.c @@ -0,0 +1,470 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "split_util.h" +#include "pro_micro.h" +#include "config.h" +#include "timer.h" + +#ifdef USE_I2C +# include "i2c.h" +#else // USE_SERIAL +# include "serial.h" +#endif + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#if (DEBOUNCING_DELAY > 0) + static uint16_t debouncing_time; + static bool debouncing = false; +#endif + +#if (MATRIX_COLS <= 8) +# define print_matrix_header() print("\nr/c 01234567\n") +# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop(matrix[i]) +# define ROW_SHIFTER ((uint8_t)1) +#else +# error "Currently only supports 8 COLS" +#endif +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#define ERROR_DISCONNECT_COUNT 5 + +#define ROWS_PER_HAND (MATRIX_ROWS/2) + +static uint8_t error_count = 0; + +static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#if (DIODE_DIRECTION == COL2ROW) + static void init_cols(void); + static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); + static void unselect_rows(void); + static void select_row(uint8_t row); + static void unselect_row(uint8_t row); +#elif (DIODE_DIRECTION == ROW2COL) + static void init_rows(void); + static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); + static void unselect_cols(void); + static void unselect_col(uint8_t col); + static void select_col(uint8_t col); +#endif + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +__attribute__ ((weak)) +void matrix_slave_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ +#ifdef DISABLE_JTAG + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< 0) + bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row); + + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } + +# else + read_cols_on_row(matrix+offset, current_row); +# endif + + } + +#elif (DIODE_DIRECTION == ROW2COL) + // Set col, read rows + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col); + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } +# else + read_rows_on_col(matrix+offset, current_col); +# endif + + } +#endif + +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + matrix[i+offset] = matrix_debouncing[i+offset]; + } + debouncing = false; + } +# endif + + return 1; +} + +#ifdef USE_I2C + +// Get rows from other half over i2c +int i2c_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); + if (err) goto i2c_error; + + // start of matrix stored at 0x00 + err = i2c_master_write(0x00); + if (err) goto i2c_error; + + // Start read + err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); + if (err) goto i2c_error; + + if (!err) { + int i; + for (i = 0; i < ROWS_PER_HAND-1; ++i) { + matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); + } + matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); + i2c_master_stop(); + } else { +i2c_error: // the cable is disconnceted, or something else went wrong + i2c_reset_state(); + return err; + } + + return 0; +} + +#else // USE_SERIAL + +int serial_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + if (serial_update_buffers()) { + return 1; + } + + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = serial_slave_buffer[i]; + } + return 0; +} +#endif + +uint8_t matrix_scan(void) +{ + uint8_t ret = _matrix_scan(); + +#ifdef USE_I2C + if( i2c_transaction() ) { +#else // USE_SERIAL + if( serial_transaction() ) { +#endif + // turn on the indicator led when halves are disconnected + TXLED1; + + error_count++; + + if (error_count > ERROR_DISCONNECT_COUNT) { + // reset other half if disconnected + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = 0; + } + } + } else { + // turn off the indicator led on no error + TXLED0; + error_count = 0; + } + matrix_scan_quantum(); + return ret; +} + +void matrix_slave_scan(void) { + _matrix_scan(); + + int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; + +#ifdef USE_I2C + for (int i = 0; i < ROWS_PER_HAND; ++i) { + i2c_slave_buffer[i] = matrix[offset+i]; + } +#else // USE_SERIAL + for (int i = 0; i < ROWS_PER_HAND; ++i) { + serial_slave_buffer[i] = matrix[offset+i]; + } +#endif + matrix_slave_scan_user(); +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) +{ + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + // Select row and wait for row selecton to stabilize + select_row(current_row); + wait_us(30); + + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { + + // Select the col pin to read (active low) + uint8_t pin = col_pins[col_index]; + uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + + // Populate the matrix row with the state of the col pin + current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); + } + + // Unselect row + unselect_row(current_row); + + return (last_row_value != current_matrix[current_row]); +} + +static void select_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI +} + +static void unselect_rows(void) +{ + for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +#elif (DIODE_DIRECTION == ROW2COL) + +static void init_rows(void) +{ + for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) +{ + bool matrix_changed = false; + + // Select col and wait for col selecton to stabilize + select_col(current_col); + wait_us(30); + + // For each row... + for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) + { + + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[row_index]; + + // Check row pin state + if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) + { + // Pin LO, set col bit + current_matrix[row_index] |= (ROW_SHIFTER << current_col); + } + else + { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); + } + + // Determine if the matrix changed state + if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) + { + matrix_changed = true; + } + } + + // Unselect col + unselect_col(current_col); + + return matrix_changed; +} + +static void select_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI +} + +static void unselect_cols(void) +{ + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + uint8_t pin = col_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +#endif diff --git a/keyboards/handwired/xeal60/readme.md b/keyboards/handwired/xeal60/readme.md new file mode 100644 index 0000000000..80fe08b93c --- /dev/null +++ b/keyboards/handwired/xeal60/readme.md @@ -0,0 +1,187 @@ +Let's Split +====== + +This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/ + +Split keyboard firmware for Arduino Pro Micro or other ATmega32u4 +based boards. + +**Hardware files for the Let's Split are now stored at http://qmk.fm/lets_split/** +**Hardware files for the sockets version can be found at https://github.com/dumle29/let-s-Split-v2/tree/socket-reverseable** + +## Build Guide + +A build guide for putting together the Let's Split v2 can be found here: [An Overly Verbose Guide to Building a Let's Split Keyboard](https://github.com/nicinabox/lets-split-guide) + +There is additional information there about flashing and adding RGB underglow. + +A build guide for putting together the sockets version can be found here: *Guide will be made and linked here when the PCBs have been received and tested* + +## First Time Setup + +Download or clone the `qmk_firmware` repo and navigate to its top level directory. Once your build environment is setup, you'll be able to generate the default .hex using: + +``` +$ make lets_split/rev2:default +``` + +You will see a lot of output and if everything worked correctly you will see the built hex file: + +``` +lets_split_rev2_default.hex +``` + +If you would like to use one of the alternative keymaps, or create your own, copy one of the existing [keymaps](keymaps/) and run make like so: + + +``` +$ make lets_split/rev2:YOUR_KEYMAP_NAME +``` + +If everything worked correctly you will see a file: + +``` +lets_split_rev2_YOUR_KEYMAP_NAME.hex +``` + +For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md. + +### Let's split 1.0 +If you have a first generation Let's Split you will need to use the revision 1 code. To do so, use `rev1` in all your commands instead. + +Features +-------- + +For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md). + +Some features supported by the firmware: + +* Either half can connect to the computer via USB, or both halves can be used + independently. +* You only need 3 wires to connect the two halves. Two for VCC and GND and one + for serial communication. +* Optional support for I2C connection between the two halves if for some + reason you require a faster connection between the two halves. Note this + requires an extra wire between halves and pull-up resistors on the data lines. + +Required Hardware +----------------- + +Apart from diodes and key switches for the keyboard matrix in each half, you +will need: + +* 2 Arduino Pro Micros. You can find these on AliExpress for ≈3.50USD each. +* 2 TRRS sockets and 1 TRRS cable, or 2 TRS sockets and 1 TRS cable + +Alternatively, you can use any sort of cable and socket that has at least 3 +wires. If you want to use I2C to communicate between halves, you will need a +cable with at least 4 wires and 2x 4.7kΩ pull-up resistors + +Optional Hardware +----------------- + +A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`. + +Wiring +------ + +The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and digital pin 3 (i.e. +PD0 on the ATmega32u4) between the two Pro Micros. + +Next, wire your key matrix to any of the remaining 17 IO pins of the pro micro +and modify the `matrix.c` accordingly. + +The wiring for serial: + +![serial wiring](https://i.imgur.com/C3D1GAQ.png) + +The wiring for i2c: + +![i2c wiring](https://i.imgur.com/Hbzhc6E.png) + +The pull-up resistors may be placed on either half. It is also possible +to use 4 resistors and have the pull-ups in both halves, but this is +unnecessary in simple use cases. + +You can change your configuration between serial and i2c by modifying your `config.h` file. + +Notes on Software Configuration +------------------------------- + +Configuring the firmware is similar to any other QMK project. One thing +to note is that `MATRIX_ROWS` in `config.h` is the total number of rows between +the two halves, i.e. if your split keyboard has 4 rows in each half, then use +`MATRIX_ROWS=8`. + +Also, the current implementation assumes a maximum of 8 columns, but it would +not be very difficult to adapt it to support more if required. + +Flashing +------- +From the top level `qmk_firmware` directory run `make KEYBOARD:KEYMAP:avrdude` for automatic serial port resolution and flashing. +Example: `make lets_split/rev2:default:avrdude` + + +Choosing which board to plug the USB cable into (choosing Master) +-------- +Because the two boards are identical, the firmware has logic to differentiate the left and right board. + +It uses two strategies to figure things out: looking at the EEPROM (memory on the chip) or looking if the current board has the usb cable. + +The EEPROM approach requires additional setup (flashing the eeprom) but allows you to swap the usb cable to either side. + +The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra. + +### Setting the left hand as master +If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set. + +### Setting the right hand as master +If you always plug the usb cable into the right board, add an extra flag to your `config.h` +``` + #define MASTER_RIGHT +``` + +### Setting EE_hands to use either hands as master +If you define `EE_HANDS` in your `config.h`, you will need to set the +EEPROM for the left and right halves. + +The EEPROM is used to store whether the +half is left handed or right handed. This makes it so that the same firmware +file will run on both hands instead of having to flash left and right handed +versions of the firmware to each half. To flash the EEPROM file for the left +half run: +``` +avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep +// or the equivalent in dfu-programmer + +``` +and similarly for right half +``` +avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep +// or the equivalent in dfu-programmer +``` + +NOTE: replace `$(COM_PORT)` with the port of your device (e.g. `/dev/ttyACM0`) + +After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash. + +Note that you need to program both halves, but you have the option of using +different keymaps for each half. You could program the left half with a QWERTY +layout and the right half with a Colemak layout using bootmagic's default layout option. +Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the +right half is connected. + + +Notes on Using Pro Micro 3.3V +----------------------------- + +Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects +the frequency on the 3.3V board. + +Also, if the slave board is producing weird characters in certain columns, +update the following line in `matrix.c` to the following: + +``` +// _delay_us(30); // without this wait read unstable value. +_delay_us(300); // without this wait read unstable value. +``` diff --git a/keyboards/handwired/xeal60/rev1/config.h b/keyboards/handwired/xeal60/rev1/config.h new file mode 100644 index 0000000000..73f90e715d --- /dev/null +++ b/keyboards/handwired/xeal60/rev1/config.h @@ -0,0 +1,86 @@ +/* +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef REV1_CONFIG_H +#define REV1_CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split v1 +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } +// #define MATRIX_COL_PINS { B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 16 // Number of LEDs +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD + +/* + * 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 diff --git a/keyboards/handwired/xeal60/rev1/rev1.c b/keyboards/handwired/xeal60/rev1/rev1.c new file mode 100644 index 0000000000..c243f71bc4 --- /dev/null +++ b/keyboards/handwired/xeal60/rev1/rev1.c @@ -0,0 +1,15 @@ +#include "lets_split.h" + +void matrix_init_kb(void) { + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + diff --git a/keyboards/handwired/xeal60/rev1/rev1.h b/keyboards/handwired/xeal60/rev1/rev1.h new file mode 100644 index 0000000000..073d83ef34 --- /dev/null +++ b/keyboards/handwired/xeal60/rev1/rev1.h @@ -0,0 +1,30 @@ +#ifndef REV1_H +#define REV1_H + +#include "lets_split.h" + +//void promicro_bootloader_jmp(bool program); +#include "quantum.h" + +//void promicro_bootloader_jmp(bool program); + +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 } \ + } + +#define LAYOUT_ortho_4x12 LAYOUT + +#endif diff --git a/keyboards/handwired/xeal60/rev1/rules.mk b/keyboards/handwired/xeal60/rev1/rules.mk new file mode 100644 index 0000000000..f845616741 --- /dev/null +++ b/keyboards/handwired/xeal60/rev1/rules.mk @@ -0,0 +1 @@ +BACKLIGHT_ENABLE = no \ No newline at end of file diff --git a/keyboards/handwired/xeal60/rules.mk b/keyboards/handwired/xeal60/rules.mk new file mode 100644 index 0000000000..951723edc5 --- /dev/null +++ b/keyboards/handwired/xeal60/rules.mk @@ -0,0 +1,77 @@ +SRC += matrix.c \ + i2c.c \ + split_util.c \ + serial.c \ + ssd1306.c + +# 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) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# 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 = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SUBPROJECT_rev1 = yes +USE_I2C = yes +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +CUSTOM_MATRIX = yes + +LAYOUTS = ortho_4x12 + +DEFAULT_FOLDER = lets_split/rev2 diff --git a/keyboards/handwired/xeal60/serial.c b/keyboards/handwired/xeal60/serial.c new file mode 100644 index 0000000000..74bcbb6bf6 --- /dev/null +++ b/keyboards/handwired/xeal60/serial.c @@ -0,0 +1,228 @@ +/* + * WARNING: be careful changing this code, it is very timing dependent + */ + +#ifndef F_CPU +#define F_CPU 16000000 +#endif + +#include +#include +#include +#include +#include "serial.h" + +#ifndef USE_I2C + +// Serial pulse period in microseconds. Its probably a bad idea to lower this +// value. +#define SERIAL_DELAY 24 + +uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + +#define SLAVE_DATA_CORRUPT (1<<0) +volatile uint8_t status = 0; + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + +// make the serial pin an input with pull-up resistor +inline static +void serial_input(void) { + SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +uint8_t serial_read_pin(void) { + return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +void serial_master_init(void) { + serial_output(); + serial_high(); +} + +void serial_slave_init(void) { + serial_input(); + + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +} + +// Used by the master to synchronize timing with the slave. +static +void sync_recv(void) { + serial_input(); + // This shouldn't hang if the slave disconnects because the + // serial line will float to high if the slave does disconnect. + while (!serial_read_pin()); + serial_delay(); +} + +// Used by the slave to send a synchronization signal to the master. +static +void sync_send(void) { + serial_output(); + + serial_low(); + serial_delay(); + + serial_high(); +} + +// Reads a byte from the serial line +static +uint8_t serial_read_byte(void) { + uint8_t byte = 0; + serial_input(); + for ( uint8_t i = 0; i < 8; ++i) { + byte = (byte << 1) | serial_read_pin(); + serial_delay(); + _delay_us(1); + } + + return byte; +} + +// Sends a byte with MSB ordering +static +void serial_write_byte(uint8_t data) { + uint8_t b = 8; + serial_output(); + while( b-- ) { + if(data & (1 << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +// interrupt handle to be used by the slave device +ISR(SERIAL_PIN_INTERRUPT) { + sync_send(); + + uint8_t checksum = 0; + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_slave_buffer[i]); + sync_send(); + checksum += serial_slave_buffer[i]; + } + serial_write_byte(checksum); + sync_send(); + + // wait for the sync to finish sending + serial_delay(); + + // read the middle of pulses + _delay_us(SERIAL_DELAY/2); + + uint8_t checksum_computed = 0; + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_master_buffer[i] = serial_read_byte(); + sync_send(); + checksum_computed += serial_master_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_send(); + + serial_input(); // end transaction + + if ( checksum_computed != checksum_received ) { + status |= SLAVE_DATA_CORRUPT; + } else { + status &= ~SLAVE_DATA_CORRUPT; + } +} + +inline +bool serial_slave_DATA_CORRUPT(void) { + return status & SLAVE_DATA_CORRUPT; +} + +// Copies the serial_slave_buffer to the master and sends the +// serial_master_buffer to the slave. +// +// Returns: +// 0 => no error +// 1 => slave did not respond +int serial_update_buffers(void) { + // this code is very time dependent, so we need to disable interrupts + cli(); + + // signal to the slave that we want to start a transaction + serial_output(); + serial_low(); + _delay_us(1); + + // wait for the slaves response + serial_input(); + serial_high(); + _delay_us(SERIAL_DELAY); + + // check if the slave is present + if (serial_read_pin()) { + // slave failed to pull the line low, assume not present + sei(); + return 1; + } + + // if the slave is present syncronize with it + sync_recv(); + + uint8_t checksum_computed = 0; + // receive data from the slave + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_slave_buffer[i] = serial_read_byte(); + sync_recv(); + checksum_computed += serial_slave_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_recv(); + + if (checksum_computed != checksum_received) { + sei(); + return 1; + } + + uint8_t checksum = 0; + // send data to the slave + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_master_buffer[i]); + sync_recv(); + checksum += serial_master_buffer[i]; + } + serial_write_byte(checksum); + sync_recv(); + + // always, release the line when not in use + serial_output(); + serial_high(); + + sei(); + return 0; +} + +#endif diff --git a/keyboards/handwired/xeal60/serial.h b/keyboards/handwired/xeal60/serial.h new file mode 100644 index 0000000000..15fe4db7b4 --- /dev/null +++ b/keyboards/handwired/xeal60/serial.h @@ -0,0 +1,26 @@ +#ifndef MY_SERIAL_H +#define MY_SERIAL_H + +#include "config.h" +#include + +/* TODO: some defines for interrupt setup */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD0) +#define SERIAL_PIN_INTERRUPT INT0_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +// Buffers for master - slave communication +extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + +void serial_master_init(void); +void serial_slave_init(void); +int serial_update_buffers(void); +bool serial_slave_data_corrupt(void); + +#endif diff --git a/keyboards/handwired/xeal60/split_util.c b/keyboards/handwired/xeal60/split_util.c new file mode 100644 index 0000000000..346cbc9089 --- /dev/null +++ b/keyboards/handwired/xeal60/split_util.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include +#include +#include "split_util.h" +#include "matrix.h" +#include "keyboard.h" +#include "config.h" +#include "timer.h" + +#ifdef USE_I2C +# include "i2c.h" +#else +# include "serial.h" +#endif + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { + #ifdef EE_HANDS + isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c + #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) + isLeftHand = !has_usb(); + #else + isLeftHand = has_usb(); + #endif + #endif +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C + i2c_master_init(); +#ifdef SSD1306OLED + matrix_master_OLED_init (); +#endif +#else + serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { + timer_init(); +#ifdef USE_I2C + i2c_slave_init(SLAVE_I2C_ADDRESS); +#else + serial_slave_init(); +#endif +} + +bool has_usb(void) { + USBCON |= (1 << OTGPADE); //enables VBUS pad + _delay_us(5); + return (USBSTA & (1< +#include "eeconfig.h" + +#define SLAVE_I2C_ADDRESS 0x32 + +extern volatile bool isLeftHand; + +// slave version of matix scan, defined in matrix.c +void matrix_slave_scan(void); + +void split_keyboard_setup(void); +bool has_usb(void); +void keyboard_slave_loop(void); + +void matrix_master_OLED_init (void); + +#endif From c796944354a76f3bd0a8387b9a4016864550ba91 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sun, 12 Aug 2018 18:25:50 +1000 Subject: [PATCH 0002/1763] Delete removed other keymaps --- .../xeal60/keymaps/DE_simple/config.h | 37 -- .../xeal60/keymaps/DE_simple/keymap.c | 155 ------ .../xeal60/keymaps/DE_simple/readme.md | 59 --- .../xeal60/keymaps/DE_simple/rules.mk | 0 .../xeal60/keymaps/OLED_sample/config.h | 60 --- .../xeal60/keymaps/OLED_sample/keymap.c | 441 ------------------ .../xeal60/keymaps/OLED_sample/readme.md | 25 - .../xeal60/keymaps/OLED_sample/rules.mk | 25 - .../handwired/xeal60/keymaps/adam/config.h | 50 -- .../handwired/xeal60/keymaps/adam/keymap.c | 78 ---- .../xeal60/keymaps/bbaserdem/README.md | 27 -- .../xeal60/keymaps/bbaserdem/config.h | 27 -- .../xeal60/keymaps/bbaserdem/keymap.c | 36 -- .../xeal60/keymaps/bbaserdem/rules.mk | 11 - .../xeal60/keymaps/bbaserdem_right/README.md | 5 - .../xeal60/keymaps/bbaserdem_right/config.h | 9 - .../xeal60/keymaps/bbaserdem_right/keymap.c | 31 -- .../xeal60/keymaps/bbaserdem_right/rules.mk | 26 -- .../xeal60/keymaps/cpeters1982/config.h | 54 --- .../xeal60/keymaps/cpeters1982/keymap.c | 221 --------- .../xeal60/keymaps/cpeters1982/rules.mk | 8 - .../handwired/xeal60/keymaps/dlaroe/config.h | 37 -- .../handwired/xeal60/keymaps/dlaroe/keymap.c | 255 ---------- .../handwired/xeal60/keymaps/dlaroe/rules.mk | 0 .../handwired/xeal60/keymaps/drashna/config.h | 80 ---- .../handwired/xeal60/keymaps/drashna/keymap.c | 98 ---- .../handwired/xeal60/keymaps/drashna/rules.mk | 25 - .../xeal60/keymaps/drashna_old/config.h | 86 ---- .../xeal60/keymaps/drashna_old/keymap.c | 1 - .../xeal60/keymaps/drashna_old/rules.mk | 28 -- .../xeal60/keymaps/dwallace/config.h | 43 -- .../xeal60/keymaps/dwallace/keymap.c | 224 --------- .../xeal60/keymaps/dwallace/rules.mk | 1 - .../handwired/xeal60/keymaps/fabian/config.h | 34 -- .../handwired/xeal60/keymaps/fabian/keymap.c | 271 ----------- .../handwired/xeal60/keymaps/fabian/rules.mk | 9 - .../handwired/xeal60/keymaps/fido/config.h | 45 -- .../handwired/xeal60/keymaps/fido/keymap.c | 74 --- .../handwired/xeal60/keymaps/fido/rules.mk | 1 - .../xeal60/keymaps/heartrobotninja/config.h | 58 --- .../xeal60/keymaps/heartrobotninja/keymap.c | 180 ------- .../xeal60/keymaps/heartrobotninja/rules.mk | 26 -- .../xeal60/keymaps/henxing/Readme.md | 51 -- .../handwired/xeal60/keymaps/henxing/config.h | 37 -- .../handwired/xeal60/keymaps/henxing/keymap.c | 113 ----- .../xeal60/keymaps/hexwire/README.md | 116 ----- .../handwired/xeal60/keymaps/hexwire/config.h | 43 -- .../handwired/xeal60/keymaps/hexwire/keymap.c | 218 --------- .../handwired/xeal60/keymaps/hexwire/rules.mk | 1 - .../handwired/xeal60/keymaps/khord/config.h | 44 -- .../handwired/xeal60/keymaps/khord/keymap.c | 170 ------- .../handwired/xeal60/keymaps/khord/rules.mk | 7 - .../handwired/xeal60/keymaps/kris/keymap.c | 213 --------- .../handwired/xeal60/keymaps/krusli/keymap.c | 238 ---------- .../handwired/xeal60/keymaps/krusli/readme.md | 2 - .../xeal60/keymaps/mbsurfer/config.h | 43 -- .../xeal60/keymaps/mbsurfer/keymap.c | 274 ----------- .../xeal60/keymaps/mbsurfer/rules.mk | 7 - .../handwired/xeal60/keymaps/mike808/config.h | 43 -- .../handwired/xeal60/keymaps/mike808/keymap.c | 158 ------- .../handwired/xeal60/keymaps/mike808/rules.mk | 1 - .../handwired/xeal60/keymaps/mjt/config.h | 38 -- .../handwired/xeal60/keymaps/mjt/keymap.c | 213 --------- .../handwired/xeal60/keymaps/mjt/rules.mk | 25 - .../handwired/xeal60/keymaps/mtdjr/config.h | 43 -- .../handwired/xeal60/keymaps/mtdjr/keymap.c | 55 --- .../handwired/xeal60/keymaps/mtdjr/rules.mk | 5 - .../xeal60/keymaps/normacos/config.h | 37 -- .../xeal60/keymaps/normacos/keymap.c | 213 --------- .../xeal60/keymaps/normacos/readme.md | 86 ---- .../handwired/xeal60/keymaps/piemod/README.md | 31 -- .../handwired/xeal60/keymaps/piemod/config.h | 49 -- .../handwired/xeal60/keymaps/piemod/keymap.c | 99 ---- .../handwired/xeal60/keymaps/piemod/rules.mk | 13 - .../handwired/xeal60/keymaps/pitty/README.md | 91 ---- .../handwired/xeal60/keymaps/pitty/config.h | 26 -- .../handwired/xeal60/keymaps/pitty/keymap.c | 169 ------- .../handwired/xeal60/keymaps/pitty/rules.mk | 6 - .../handwired/xeal60/keymaps/poker/config.h | 37 -- .../handwired/xeal60/keymaps/poker/keymap.c | 240 ---------- .../handwired/xeal60/keymaps/poker/rules.mk | 3 - .../handwired/xeal60/keymaps/smt/config.h | 37 -- .../handwired/xeal60/keymaps/smt/keymap.c | 218 --------- .../handwired/xeal60/keymaps/smt/readme.md | 88 ---- .../xeal60/keymaps/that_canadian/config.h | 32 -- .../xeal60/keymaps/that_canadian/keymap.c | 163 ------- .../handwired/xeal60/keymaps/waples/README.md | 58 --- .../handwired/xeal60/keymaps/waples/config.h | 17 - .../handwired/xeal60/keymaps/waples/keymap.c | 131 ------ .../handwired/xeal60/keymaps/waples/rules.mk | 3 - .../handwired/xeal60/keymaps/xk/config.h | 44 -- .../handwired/xeal60/keymaps/xk/keymap.c | 370 --------------- .../handwired/xeal60/keymaps/xk/rules.mk | 19 - .../handwired/xeal60/keymaps/zer09/config.h | 59 --- .../handwired/xeal60/keymaps/zer09/keymap.c | 38 -- .../handwired/xeal60/keymaps/zer09/keymap.h | 32 -- .../handwired/xeal60/keymaps/zer09/rules.mk | 6 - 97 files changed, 7534 deletions(-) delete mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/OLED_sample/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/adam/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/adam/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/dwallace/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/fabian/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/fabian/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/fabian/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/fido/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/fido/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/fido/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/henxing/Readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/henxing/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/henxing/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/hexwire/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/khord/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/khord/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/khord/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/kris/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/krusli/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/krusli/readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/mike808/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/mike808/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/mike808/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/mjt/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/mjt/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/mjt/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/normacos/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/normacos/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/normacos/readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/piemod/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/piemod/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/piemod/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/piemod/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/pitty/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/pitty/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/pitty/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/pitty/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/poker/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/poker/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/poker/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/smt/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/smt/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/smt/readme.md delete mode 100644 keyboards/handwired/xeal60/keymaps/that_canadian/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/waples/README.md delete mode 100644 keyboards/handwired/xeal60/keymaps/waples/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/waples/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/waples/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/xk/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/xk/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/xk/rules.mk delete mode 100644 keyboards/handwired/xeal60/keymaps/zer09/config.h delete mode 100644 keyboards/handwired/xeal60/keymaps/zer09/keymap.c delete mode 100644 keyboards/handwired/xeal60/keymaps/zer09/keymap.h delete mode 100644 keyboards/handwired/xeal60/keymaps/zer09/rules.mk diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/config.h b/keyboards/handwired/xeal60/keymaps/DE_simple/config.h deleted file mode 100644 index 5a6261c4f7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/DE_simple/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c b/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c deleted file mode 100644 index d329bea4c0..0000000000 --- a/keyboards/handwired/xeal60/keymaps/DE_simple/keymap.c +++ /dev/null @@ -1,155 +0,0 @@ -#include QMK_KEYBOARD_H -#include "keymap_german.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 _QWERTZ 0 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTZ = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwertz - * ,-----------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | + | # | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTZ] = LAYOUT( \ - KC_ESC, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, \ - KC_TAB, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_PLUS, DE_HASH, \ - KC_LSFT, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_ENT , \ - KC_LCTL, KC_LALT, DE_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ° | ! | " | § | $ | % | & | / | ( | ) | = | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | @ | € | ü | ? | ´ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | ö | ä | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - DE_CIRC, DE_EXLM, DE_DQOT, DE_PARA, DE_DLR, DE_PERC, DE_AMPR, DE_SLSH, DE_LPRN, DE_RPRN, DE_EQL, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_AT , DE_EURO, KC_LBRC, DE_QST, DE_QUOT, \ - KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DE_PIPE , KC_SCLN, KC_QUOT, _______, KC_ENT, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ° | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | { | [ | ] | } | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_LCBR, DE_LBRC, DE_RBRC, DE_RCBR , DE_BSLS, \ - KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_ENT, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwertz| | | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTZ, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - -#ifdef AUDIO_ENABLE -float tone_qwertz[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTZ: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwertz); - #endif - persistent_default_layer_set(1UL<<_QWERTZ); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md b/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md deleted file mode 100644 index 972cd6c398..0000000000 --- a/keyboards/handwired/xeal60/keymaps/DE_simple/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -De_Simple Keymap -====== - -Features --------- - -Changed Keymap to reasamble German Layout. - -Layout --------- - - Qwertz - ,-----------------------------------------------------------------------------------. - | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | - |------+------+------+------+------+-------------+------+------+------+------+------| - | Tab | A | S | D | F | G | H | J | K | L | + | # | - |------+------+------+------+------+------|------+------+------+------+------+------| - | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | - |------+------+------+------+------+------+------+------+------+------+------+------| - | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - `-----------------------------------------------------------------------------------' - - - Qwerty - ,-----------------------------------------------------------------------------------. - | Esc | Q | W | E | R | T | Z | U | I | O | P | Bksp | - |------+------+------+------+------+-------------+------+------+------+------+------| - | Tab | A | S | D | F | G | H | J | K | L | + | # | - |------+------+------+------+------+------|------+------+------+------+------+------| - | Shift| Y | X | C | V | B | N | M | , | . | - |Enter | - |------+------+------+------+------+------+------+------+------+------+------+------| - | Ctrl | Alt | AltGr| GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - `-----------------------------------------------------------------------------------' - - - Raise - ,-----------------------------------------------------------------------------------. - | ° | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - |------+------+------+------+------+-------------+------+------+------+------+------| - | Del | F1 | F2 | F3 | F4 | F5 | F6 | { | [ | ] | } | \ | - |------+------+------+------+------+------|------+------+------+------+------+------| - | Shift| F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | - |------+------+------+------+------+------+------+------+------+------+------+------| - | | | | | | | | Next | Vol- | Vol+ | Play | - `-----------------------------------------------------------------------------------' - - - Adjust (Lower + Raise) - ,-----------------------------------------------------------------------------------. - | | Reset| | | | | | | | | | Del | - |------+------+------+------+------+-------------+------+------+------+------+------| - | | | |Aud on|Audoff|AGnorm|AGswap|Qwertz| | | | | - |------+------+------+------+------+------|------+------+------+------+------+------| - | | | | | | | | | | | | | - |------+------+------+------+------+------+------+------+------+------+------+------| - | | | | | | | | | | | | - `-----------------------------------------------------------------------------------' - - diff --git a/keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk b/keyboards/handwired/xeal60/keymaps/DE_simple/rules.mk deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h b/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h deleted file mode 100644 index e8632fe61d..0000000000 --- a/keyboards/handwired/xeal60/keymaps/OLED_sample/config.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_I2C -//#define USE_SERIAL - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS -#define FLIP_HALF - -#define SSD1306OLED -//#define OLED_ROTATE180 - - -#define PREVENT_STUCK_MODIFIERS -#define TAPPING_FORCE_HOLD -#define TAPPING_TERM 100 - -#ifdef SUBPROJECT_rev1 - #include "../../rev1/config.h" -#endif -#ifdef SUBPROJECT_rev2 - #include "../../rev2/config.h" -#endif - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 6 -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c b/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c deleted file mode 100644 index 5eccbcf1ac..0000000000 --- a/keyboards/handwired/xeal60/keymaps/OLED_sample/keymap.c +++ /dev/null @@ -1,441 +0,0 @@ -#include QMK_KEYBOARD_H -#include "LUFA/Drivers/Peripheral/TWI.h" -#ifdef SSD1306OLED - #include "ssd1306.h" -#endif - -extern keymap_config_t keymap_config; - -//Following line allows macro to read current RGB settings -extern rgblight_config_t rgblight_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, - BACKLIT, - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL, -}; - -enum macro_keycodes { - KC_SAMPLEMACRO, -}; - - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO -//Macros -#define M_SAMPLE M(KC_SAMPLEMACRO) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, M_SAMPLE, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - - -#ifdef AUDIO_ENABLE - -float tone_startup[][2] = SONG(STARTUP_SOUND); -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -float tone_plover[][2] = SONG(PLOVER_SOUND); -float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -#endif - -// define variables for reactive RGB -bool TOG_STATUS = false; -int RGB_current_mode; - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -// Setting ADJUST layer RGB back to default -void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { - if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { - rgblight_mode(RGB_current_mode); - layer_on(layer3); - } else { - layer_off(layer3); - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - //not sure how to have keyboard check mode and set it to a variable, so my work around - //uses another variable that would be set to true after the first time a reactive key is pressed. - if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - rgblight_mode(16); - } - layer_on(_LOWER); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); - } else { - rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change - TOG_STATUS = false; - layer_off(_LOWER); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - //not sure how to have keyboard check mode and set it to a variable, so my work around - //uses another variable that would be set to true after the first time a reactive key is pressed. - if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - rgblight_mode(15); - } - layer_on(_RAISE); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); - } else { - rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change - layer_off(_RAISE); - TOG_STATUS = false; - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; - //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released - case RGB_MOD: - if (record->event.pressed) { - rgblight_mode(RGB_current_mode); - rgblight_step(); - RGB_current_mode = rgblight_config.mode; - } - return false; - break; - } - return true; -} - -void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - startup_user(); - #endif - RGB_current_mode = rgblight_config.mode; -} - -//SSD1306 OLED init and update loop, make sure to add #define SSD1306OLED in config.h -#ifdef SSD1306OLED -void matrix_master_OLED_init (void) { - TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000)); - iota_gfx_init(); // turns on the display -} - -void matrix_scan_user(void) { - iota_gfx_task(); // this is what updates the display continuously -} -#endif - -#ifdef AUDIO_ENABLE - -void startup_user() -{ - _delay_ms(20); // gets rid of tick - PLAY_SONG(tone_startup); -} - -void shutdown_user() -{ - PLAY_SONG(tone_goodbye); - _delay_ms(150); - stop_all_notes(); -} - -void music_on_user(void) -{ - music_scale_user(); -} - -void music_scale_user(void) -{ - PLAY_SONG(music_scale); -} - -#endif - -/* - * Macro definition - */ -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - - switch (id) { - case KC_SAMPLEMACRO: - if (record->event.pressed){ - return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END); - } - - } - - return MACRO_NONE; -} - - -void matrix_update(struct CharacterMatrix *dest, - const struct CharacterMatrix *source) { - if (memcmp(dest->display, source->display, sizeof(dest->display))) { - memcpy(dest->display, source->display, sizeof(dest->display)); - dest->dirty = true; - } -} - -//assign the right code to your layers for OLED display -#define L_BASE 0 -#define L_LOWER 8 -#define L_RAISE 16 -#define L_FNLAYER 64 -#define L_NUMLAY 128 -#define L_NLOWER 136 -#define L_NFNLAYER 192 -#define L_MOUSECURSOR 256 -#define L_ADJUST 65560 - -void iota_gfx_task_user(void) { -#if DEBUG_TO_SCREEN - if (debug_enable) { - return; - } -#endif - - struct CharacterMatrix matrix; - - matrix_clear(&matrix); - matrix_write_P(&matrix, PSTR("USB: ")); -#ifdef PROTOCOL_LUFA - switch (USB_DeviceState) { - case DEVICE_STATE_Unattached: - matrix_write_P(&matrix, PSTR("Unattached")); - break; - case DEVICE_STATE_Suspended: - matrix_write_P(&matrix, PSTR("Suspended")); - break; - case DEVICE_STATE_Configured: - matrix_write_P(&matrix, PSTR("Connected")); - break; - case DEVICE_STATE_Powered: - matrix_write_P(&matrix, PSTR("Powered")); - break; - case DEVICE_STATE_Default: - matrix_write_P(&matrix, PSTR("Default")); - break; - case DEVICE_STATE_Addressed: - matrix_write_P(&matrix, PSTR("Addressed")); - break; - default: - matrix_write_P(&matrix, PSTR("Invalid")); - } -#endif - -// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below - - char buf[40]; - snprintf(buf,sizeof(buf), "Undef-%ld", layer_state); - matrix_write_P(&matrix, PSTR("\n\nLayer: ")); - switch (layer_state) { - case L_BASE: - matrix_write_P(&matrix, PSTR("Default")); - break; - case L_RAISE: - matrix_write_P(&matrix, PSTR("Raise")); - break; - case L_LOWER: - matrix_write_P(&matrix, PSTR("Lower")); - break; - case L_ADJUST: - matrix_write_P(&matrix, PSTR("ADJUST")); - break; - default: - matrix_write(&matrix, buf); - } - - // Host Keyboard LED Status - char led[40]; - snprintf(led, sizeof(led), "\n%s %s %s", - (host_keyboard_leds() & (1< -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#ifdef SUBPROJECT_rev2 - /* RGB Underglow */ - #undef RGBLED_NUM - #define RGBLIGHT_ANIMATIONS - #define RGBLED_NUM 8 -#endif - -#undef TAPPING_TERM -#define TAPPING_TERM 200 //At 500 some bad logic takes hold -#define PREVENT_STUCK_MODIFIERS -#define IGNORE_MOD_TAP_INTERRUPT -#define PERMISSIVE_HOLD - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/adam/keymap.c b/keyboards/handwired/xeal60/keymaps/adam/keymap.c deleted file mode 100644 index b986ab780b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/adam/keymap.c +++ /dev/null @@ -1,78 +0,0 @@ -#include QMK_KEYBOARD_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 BASE 0 // default layer -#define FLOCK 1 // symbols arrows and F keys on F held down -#define JLOCK 2 // same as Flock but with fall thru J and mapped to J held down - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[BASE] = LAYOUT ( \ - TD(1), KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TAB, KC_TAB, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - SFT_T(KC_A), ALT_T(KC_S),CTL_T(KC_D), F(FLOCK), GUI_T(KC_G), KC_BSPC, KC_DELETE, GUI_T(KC_H), F(JLOCK), CTL_T(KC_K), ALT_T(KC_L), SFT_T(KC_SCLN), \ - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOTE -), -[FLOCK] = LAYOUT ( \ - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ - KC_LBRC, KC_GRV, KC_TILDE, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, XXXXXXX, KC_RBRC, \ - S(KC_LBRC), _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, S(KC_RBRC), \ - KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, KC_ESC, XXXXXXX, KC_END, KC_PGDOWN, KC_QUES, KC_SLASH \ -), -[JLOCK] = LAYOUT ( \ - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ - KC_LBRC, KC_GRV, KC_TILDE, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, XXXXXXX, KC_RBRC, \ - S(KC_LBRC), _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_LEFT, _______, KC_UP, KC_RIGHT, S(KC_RBRC), \ - KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, KC_ESC, XXXXXXX, KC_END, KC_PGDOWN, KC_QUES, KC_SLASH \ -) -}; - -const uint16_t PROGMEM fn_actions[] = { - [FLOCK] = ACTION_LAYER_TAP_KEY(FLOCK,KC_F), - [JLOCK] = ACTION_LAYER_TAP_KEY(JLOCK,KC_J) -}; -#ifdef TAP_DANCE_ENABLE -void tap_1(qk_tap_dance_state_t *state, void *user_data) { - switch (state->count) { - case 1: - register_code (KC_1); - unregister_code (KC_1); - break; - case 2: - register_code (KC_ESC); - unregister_code (KC_ESC); - break; - case 3: - register_code (KC_LSFT); - register_code (KC_1); - unregister_code (KC_1); - unregister_code (KC_LSFT); - } -} - -qk_tap_dance_action_t tap_dance_actions[] = { - [0] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_ESC), - [1] = ACTION_TAP_DANCE_FN(tap_1) -}; -#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md b/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md deleted file mode 100644 index 4b37d73555..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Lets Split Layout - -Check out [user readme](../../../../users/bbaserdem/README.md) for more info. - -# Usage - -**These commands depend on there being no other arduino connected!** -Also udev rules can be set instead of using sudo. -Please unplug all other usb devices. - -To make the hex files; -``` -make lets_split/rev2:bbaserdem -make lets_split/rev2:bbaserdem_right -``` - -For the left half, after plugging in and resetting; (from repo main directory) -``` -sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:.build/lets_split_rev2_bbaserdem.hex -sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -U eeprom:w:keyboards/lets_split/eeprom-lefthand.eep -``` - -For the right half; -``` -sudo avrdude -p atmgea34u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:.build/lets_split_rev2_bbaserdem_right.hex -sudo avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -U eeprom:w:keyboards/lets_split/eeprom-righhand.eep -``` diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h b/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h deleted file mode 100644 index 6a90e1c356..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem/config.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CONFIG_KEYMAP_H -#define CONFIG_KEYMAP_H - -#include "../../config.h" - -#define USE_SERIAL -#define EE_HANDS - -// LED strip stuff -#ifdef RGBLIGHT_ENABLE - -// Who thought it was a good idea to predefine these in the rev2/config.h ??? -#ifdef RGBLED_NUM -#undef RGBLED_NUM -#endif -#define RGBLED_NUM 12 - -#define RGBLIGHT_HUE_STEP 6 -#define RGBLIGHT_SAT_STEP 12 -#define RGBLIGHT_VAL_STEP 20 -#define RGBLIGHT_ANIMATIONS -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 6 -#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 2000 -#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 -#endif - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c b/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c deleted file mode 100644 index 623117530d..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem/keymap.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Let's Split - Dvorak turkish - * Keymap by @bbaserdem - * Dvorak layout with multiple features - * Most of the code is in the "user" directory. - * Check qmk_firmware/users/bbaserdem for the main part of the code - */ -#define KEYMAP(...) LAYOUT_ortho_4x12(__VA_ARGS__) - -#include "lets_split.h" -#include "bbaserdem.h" - - -void matrix_init_keymap (void) { -} - -uint32_t layer_state_set_keymap(uint32_t state) { - return state; -} - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // Main Dvorak layer - [_DV] = LAYOUT_letssplit_wrapper(DVORAK), - // Turkish and special character overlay - [_AL] = LAYOUT_letssplit_wrapper(ALTCHAR), - // Gaming layer - [_GA] = LAYOUT_letssplit_wrapper(GAME), - // Numbers layer - [_NU] = LAYOUT_letssplit_wrapper(NUMBERS), - // Settings layer - [_SE] = LAYOUT_letssplit_wrapper(SETTINGS), - // Mouse emulation layer - [_MO] = LAYOUT_letssplit_wrapper(MOUSE), - // Music layer - [_MU] = LAYOUT_letssplit_wrapper(MUSIC), -}; diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk b/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk deleted file mode 100644 index 4159db3fee..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem/rules.mk +++ /dev/null @@ -1,11 +0,0 @@ -# Build options - -BACKLIGHT_ENABLE = no # Switch LEDs -MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses -RGBLIGHT_ENABLE = yes # LED strips -TAP_DANCE_ENABLE = no # Use multi-tap features -AUDIO_ENABLE = no # Audio stuff - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md deleted file mode 100644 index 8608f23f79..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Lets Split - Right Half - -Keymap for my right half, to be used as a numpad. -Check [main readme](../bbaserdem/README.md) for flashing info. - diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h deleted file mode 100644 index 47545a059b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/config.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CONFIG_KEYMAP_H -#define CONFIG_KEYMAP_H - -#include "../../config.h" - -#define USE_SERIAL -#define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c deleted file mode 100644 index 2dcae0dca5..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/keymap.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Let's Split - Dvorak turkish - * Keymap by @bbaserdem - * Dvorak layout with multiple features - * Most of the code is in the "user" directory. - * Check qmk_firmware/users/bbaserdem for the main part of the code - */ - -#include "lets_split.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Navigation All Supered) Numpad - * ,-----------------------. ,-----------------------. - * | F4| ` | Q |Alt| L | > | | ) | - | + | = |Ent|Bkp| - * |---+---+---+---+---+---| |---+---+---+---+---+---| - * | F3| M |Ent|Ctl| K | ^ | | ( | * | 9 | 6 | 3 | . | - * |---+---+---+---+---+---| |---+---+---+---+---+---| - * | F2| T |Spc|Shf| J | v | | % | / | 8 | 5 | 2 | , | - * |---+---+---+---+---+---| |---+---+---+---+---+---| - * | F1| F | P |Tab| H | < | |Nlc|Tab| 7 | 4 | 1 | 0 | - * `-----------------------' `-----------------------' - */ - // Main Dvorak layer - [0] = LAYOUT_ortho_4x12( - LCTL(LALT(KC_DEL)), LGUI(KC_GRV), LGUI(KC_Q), LGUI(KC_LALT), LGUI(KC_L), LGUI(KC_RGHT), KC_RPRN, KC_PMNS, KC_PPLS, KC_PEQL, KC_PENT, KC_BSPC, \ - LGUI(KC_F3), LGUI(KC_M), LGUI(KC_ENT), LGUI(KC_LCTL), LGUI(KC_K), LGUI(KC_UP), KC_LPRN, KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, \ - LGUI(KC_F2), LGUI(KC_T), LGUI(KC_SPC), LGUI(KC_LSFT), LGUI(KC_J), LGUI(KC_DOWN), KC_PERC, KC_PSLS, KC_P8, KC_P5, KC_P2, KC_PCMM, \ - LGUI(KC_F1), LGUI(KC_F), LGUI(KC_P), LGUI(KC_TAB), LGUI(KC_H), LGUI(KC_LEFT), KC_NLCK, KC_TAB, KC_P7, KC_P4, KC_P1, KC_P0 \ - ) -}; diff --git a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk b/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk deleted file mode 100644 index 36b4b8fc25..0000000000 --- a/keyboards/handwired/xeal60/keymaps/bbaserdem_right/rules.mk +++ /dev/null @@ -1,26 +0,0 @@ -# Build options - -USER_NAME := bbaserdem-without-userspace - -BACKLIGHT_ENABLE = no # Switch LEDs -MOUSEKEY_ENABLE = no # Emulates mouse key using keypresses -RGBLIGHT_ENABLE = no # LED strips -TAP_DANCE_ENABLE = no # Use multi-tap features -AUDIO_ENABLE = no # Audio stuff -BLUETOOTH_ENABLE = no # No bluetooth -COMMAND_ENABLE = no # Some bootmagic thing -BOOTMAGIC_ENABLE = no # Access to EEPROM settings, not needed -CONSOLE_ENABLE = no # Allows console output with a command -SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. -NKRO_ENABLE = no # Default is 6KRO which is plenty -MIDI_ENABLE = no # Untested feature -FAUXCLICKY_ENABLE = no # Emulates clicks using speaker -KEY_LOCK_ENABLE = no # Allows locking any key. Not used -API_SYSEX_ENABLE = no # Allows OS to send signals. -KEY_LOCK_ENABLE = no # Allows locking any key. Not used -UNICODE_ENABLE = no # Used for unicode character emulation -EXTRAKEY_ENABLE = no # OS signals like volume control - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h b/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h deleted file mode 100644 index 3639b9c3f2..0000000000 --- a/keyboards/handwired/xeal60/keymaps/cpeters1982/config.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -// #define MASTER_LEFT -#define MASTER_RIGHT -// #define EE_HANDS - -// Define Tap Dance interval -//#define TAPPING_TERM 175 - -// // Enable LED strip -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 10 - -// Space Cadet -#define LSPO_KEY KC_9 -#define RSPC_KEY KC_0 -#define DISABLE_SPACE_CADET_ROLLOVER - -// Auto Shift settings -#define AUTO_SHIFT_TIMEOUT 165 -// #define NO_AUTO_SHIFT_SPECIAL - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c b/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c deleted file mode 100644 index 9c3eb94752..0000000000 --- a/keyboards/handwired/xeal60/keymaps/cpeters1982/keymap.c +++ /dev/null @@ -1,221 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -// #define _DVORAK 2 -#define _LOWER 1 -#define _RAISE 2 -#define _ADJUST 16 - - - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - // COLEMAK, - // DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -/* -// Tap dance declerations -enum { - TD_GRV_TILD = 0, -}; - -// Tap dance definitions -qk_tap_dance_action_t tap_dance_actions[] = { - [TD_GRV_TILD] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), -}; -*/ - - - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | ` ~ | Q | W | E | R | T | Y | U | I | O | P | Bspc | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Rshift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Lalt | GUI | Esc |Lower |KC_SPC |Enter |Raise | [cmd|] alt |= Hypr| - | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \ - KC_LCTRL,KC_LALT, KC_LGUI, KC_ESC, TG(_LOWER), LT(_ADJUST, KC_SPC), KC_ENT, TG(_RAISE), MT(MOD_RGUI, KC_LBRC), MT(MOD_RALT, KC_RBRC), MT(MOD_HYPR, KC_EQL), KC_MINS \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ESC | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bspc | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,_______,_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bspc | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | up | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | left | down |right | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | % | ` | ~ | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |AShftD|AShftU|REPORT| | | | [ | ] | - | = | \ | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, KC_LEFT, KC_DOWN, KC_RGHT, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PERC, KC_GRV, KC_TILD, \ - KC_ASDN, KC_ASUP, KC_ASRP, _______, _______, _______, _______, KC_RBRC, KC_LBRC, KC_MINS, KC_EQL, KC_BSLASH \ -) - - -}; - -/* #ifdef AUDIO_ENABLE -* float tone_qwerty[][2] = SONG(QWERTY_SOUND); -* float tone_dvorak[][2] = SONG(DVORAK_SOUND); -* float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif */ - - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -}; - -#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); -#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF); -#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF); -#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF); -#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); -#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); -#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF); -#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); -#define rgblight_set_white rgblight_sethsv (0x00, 0x00, 0xFF); - -uint32_t layer_state_set_user(uint32_t state) { -#ifdef RGBLIGHT_ENABLE - uint8_t default_layer = eeconfig_read_default_layer(); - if (rgb_layer_change) { - switch (biton32(state)) { - case _RAISE: - rgblight_set_orange; - rgblight_mode(5); - break; - case _LOWER: - rgblight_set_teal; - rgblight_mode(5); - break; - case _ADJUST: - rgblight_set_purple; - rgblight_mode(23); - break; - default: - if (default_layer & (1UL << _COLEMAK)) { - rgblight_set_magenta; - } - else if (default_layer & (1UL << _DVORAK)) { - rgblight_set_green; - } - else { - rgblight_set_blue; - } - rgblight_mode(1); - break; - } - } -#endif - return state; -} diff --git a/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk b/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk deleted file mode 100644 index f2fde785d4..0000000000 --- a/keyboards/handwired/xeal60/keymaps/cpeters1982/rules.mk +++ /dev/null @@ -1,8 +0,0 @@ - - - -ifndef QUANTUM_DIR - include ../../../../Makefile - AUTO_SHIFT_ENABLE = yes - RGBLIGHT_ENABLE = yes -endif diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/config.h b/keyboards/handwired/xeal60/keymaps/dlaroe/config.h deleted file mode 100644 index 6b31e8d14e..0000000000 --- a/keyboards/handwired/xeal60/keymaps/dlaroe/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c b/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c deleted file mode 100644 index b2282e0fe8..0000000000 --- a/keyboards/handwired/xeal60/keymaps/dlaroe/keymap.c +++ /dev/null @@ -1,255 +0,0 @@ -// Can't Remember Sh*t Keymap for Let's Split -// Trying to fit as many characters as possible on the default layer -// as its easier for me to remember logical functions than characters -// Also, I like me some numpad - - -#include QMK_KEYBOARD_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 _ARROW 1 -#define _GAME 2 -#define _LOWER 3 -#define _RAISE 4 -#define _PLOVER 5 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - ARROW, - GAME, - LOWER, - RAISE, - BACKLIT, - PLOVER, - EXT_PLV -}; - -// 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 | ; | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | \ | Alt | Lower|SpcRse| Space|Raise | [ | - | = | ] | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ - KC_LCTL, KC_LGUI, KC_BSLS, KC_LALT, LOWER, LT(4, KC_SPC), KC_SPC, RAISE, LT(3, KC_LBRC), KC_MINS, KC_EQL, CTL_T(KC_RBRC) \ -), - -/* Arrow - * ,-----------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | \ | Alt | Lower|SpcRse| Space|Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_ARROW] = LAYOUT( \ - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ - KC_LCTL, KC_LGUI, KC_BSLS, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ -), - -/* Game - * ,-----------------------------------------------------------------------------------. - * | 1 | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * |Shift | A | S | D | F | G | H | J | K | L | ; | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Ctrl | Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Alt | 4 | 3 | 2 | Lower| Space |Raise | Left | Down | Up | Right| - * `-----------------------------------------------------------------------------------' - */ -[_GAME] = LAYOUT( \ - KC_1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______ , \ - KC_LALT, KC_4, KC_3, KC_2, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ -), - - -/* Lower (switched to # because KP# were weird in terminal emulators) - * ,-----------------------------------------------------------------------------------. - * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | . | * | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | 1 | 2 | 3 | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Esc | | | | | | 0 | | | | KP_+ | | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_DOT, KC_ASTR, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, KC_SLSH, _______, \ - KC_ESC, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, KC_PLUS, _______ \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | Wh Up|RightC| M-Up | LeftC|QWERTY| Left | Down | Up | Right| | | ` | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Wh Dn| M-L | M-Dn | M-R | | - | = | [ | ] | \ | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | App | | | | | Ins | | Home | PGDN | PGUP | End | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_WH_U, KC_BTN2, KC_MS_U, KC_BTN1, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PIPE, KC_GRV, \ - _______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLASH, _______, \ - _______, KC_APP, _______, _______, _______, _______, KC_INS, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ -), - -/* Plover layer (http://opensteno.org) - * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | S | K | W | R | * | * | R | B | G | S | Z | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | E | U | | | | - * `-----------------------------------------------------------------------------------' - */ - -[_PLOVER] = LAYOUT ( \ - KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , \ - XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ - XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX \ -), - - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | C-A-I|Qwerty| | |Reset |Macro0| | | | | |C-A-D | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff| Game |AGswap|AGnorm| | | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff| Prev | Next | Mute | VolDn| VolUp| | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| | | | | Play/Pause | | BL_T |BL_DEC|BL_INC|BL_ST | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - LALT(LCTL(KC_INS)), QWERTY, _______, _______, RESET, M(0), _______, _______, _______, _______, _______, LALT(LCTL(KC_DEL)), \ - _______, _______, _______, AU_ON, AU_OFF, GAME, AG_SWAP, AG_NORM, _______, _______, _______, _______, \ - _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, \ - BACKLIT, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, BL_TOGG, BL_DEC , BL_INC , BL_STEP \ -) - - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. -{ - switch(id) { - case 0: // this would trigger when you hit a key mapped as M(0) - if (record->event.pressed) { - return MACRO( D(LSFT), T(LEFT), U(LSFT), D(LCTL), T(X), U(LCTL), T(RIGHT), D(LCTL), T(V), U(LCTL), T(LEFT), END ); // this swaps the characters on either side of the cursor when the macro executes - } - break; - } - return MACRO_NONE; -}; - - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -#endif - - -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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistant_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case GAME: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(music_scale); - #endif - persistant_default_layer_set(1UL<<_GAME); - } - return false; - break; - - - 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; - break; - 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; - break; - case BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; - } - return true; -} - -void matrix_init_user(void) { - -} diff --git a/keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk b/keyboards/handwired/xeal60/keymaps/dlaroe/rules.mk deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/keyboards/handwired/xeal60/keymaps/drashna/config.h b/keyboards/handwired/xeal60/keymaps/drashna/config.h deleted file mode 100644 index 5bc5598ee0..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna/config.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -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 . -*/ - -#pragma once - -#ifdef RGBLIGHT_ENABLE -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 16 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 -#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 -#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 -#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 -#endif // RGBLIGHT_ENABLE - - -#undef LOCKING_SUPPORT_ENABLE -#undef LOCKING_RESYNC_ENABLE - -#ifndef NO_DEBUG -#define NO_DEBUG -#endif // !NO_DEBUG -#ifndef NO_PRINT -#define NO_PRINT -#endif // !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 - -#undef PRODUCT -#define PRODUCT Drashnas Viterbi Macro Pad - -#define USE_I2C - -#ifdef AUDIO_ENABLE -#define C6_AUDIO -#define NO_MUSIC_MODE -#endif - -#define LAYOUT_ortho_5x7( \ - L00, L01, L02, L03, L04, L05, L06, \ - L10, L11, L12, L13, L14, L15, L16, \ - L20, L21, L22, L23, L24, L25, L26, \ - L30, L31, L32, L33, L34, L35, L36, \ - L40, L41, L42, L43, L44, L45, L46 \ - ) \ - LAYOUT( \ - L00, L01, L02, L03, L04, L05, L06, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L10, L11, L12, L13, L14, L15, L16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L20, L21, L22, L23, L24, L25, L26, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ - ) - -#define QMK_ESC_OUTPUT F5 // usually COL -#define QMK_ESC_INPUT D4 // usually ROW -#define QMK_LED B0 -#define QMK_SPEAKER C6 diff --git a/keyboards/handwired/xeal60/keymaps/drashna/keymap.c b/keyboards/handwired/xeal60/keymaps/drashna/keymap.c deleted file mode 100644 index 68ca593db8..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna/keymap.c +++ /dev/null @@ -1,98 +0,0 @@ -#include QMK_KEYBOARD_H -#include "drashna.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. - - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -#define LMACRO TG(_MACROS) -#define DIABLO TG(_DIABLO) -#define GAMEPAD TG(_GAMEPAD) -#define MEDIA TT(_MEDIA) - - -//enum more_custom_keycodes { -// KC_P00 = NEW_SAFE_RANGE -//}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_NUMLOCK] = LAYOUT_ortho_5x7( - LMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, - MEDIA, KC_CALC, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, - KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, - KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, - KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_COLN, KC_PENT - ), - - [_DIABLO] = LAYOUT_ortho_5x7( - KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, - KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, - KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, - KC_LCTL, KC_D3_3, KC_D3_3, KC_D3_3, KC_D3_3, KC_Z, KC_DIABLO_CLEAR, - KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE) - ), - - [_GAMEPAD] = LAYOUT_ortho_5x7( // Game pad layout designed primarily for Overwatch - LMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, - MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, - KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V - ), - - [_MACROS] = LAYOUT_ortho_5x7( - LMACRO, KC_OVERWATCH,GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_C9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_SYMM, KC_TORB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_GLHF, KC_GOODGAME, KC_GGEZ, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_SALT, KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM, XXXXXXX, KC_PENT - ), - - - [_MEDIA] = LAYOUT_ortho_5x7( - KC_MAKE, KC_RESET,MU_TOG, AU_ON, AU_OFF, CK_TOGG, RGB_SAD, - MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, - RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, - KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, - KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI - ) - - -}; - - - -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - - //switch (keycode) { - //case KC_P00: - // if (!record->event.pressed) { - // tap(KC_KP_0); - // tap(KC_KP_0); - // } - // return false; - // break; - //} - return true; -} - - - -void matrix_init_keymap(void) { - DDRD &= ~(1<<5); - PORTD &= ~(1<<5); - - DDRB &= ~(1<<0); - PORTB &= ~(1<<0); -} - - diff --git a/keyboards/handwired/xeal60/keymaps/drashna/rules.mk b/keyboards/handwired/xeal60/keymaps/drashna/rules.mk deleted file mode 100644 index ec3befc0b7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -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 -TAP_DANCE_ENABLE = no -RGBLIGHT_ENABLE = yes -AUDIO_ENABLE = yes -NKRO_ENABLE = yes - -NO_SECRETS = yes -MACROS_ENABLED = yes -INDICATOR_LIGHTS = no -RGBLIGHT_TWINKLE = no - -LAYOUTS = ortho_5x7 - -# SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC)) -# SRC := $(filter-out serial.c,$(SRC)) -# SRC := $(filter-out matrix.c,$(SRC)) -# SRC := $(filter-out i2c.c,$(SRC)) -# SRC := $(filter-out split_util.c,$(SRC)) -# SRC += quantum/matrix.c - -BOOTLOADER = qmk-dfu diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/config.h b/keyboards/handwired/xeal60/keymaps/drashna_old/config.h deleted file mode 100644 index ddf9d1a40f..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna_old/config.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -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 . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include QMK_KEYBOARD_CONFIG_H - - -#ifdef RGBLIGHT_ENABLE -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 12 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 -#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 -#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 -#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 -#endif // RGBLIGHT_ENABLE - - -#undef LOCKING_SUPPORT_ENABLE -#undef LOCKING_RESYNC_ENABLE - -#ifndef NO_DEBUG -#define NO_DEBUG -#endif // !NO_DEBUG -#ifndef NO_PRINT -#define NO_PRINT -#endif // !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 - -#undef PRODUCT -#define PRODUCT Drashnas Viterbi Macro Pad - -#define USE_I2C - -#ifdef AUDIO_ENABLE -#define C6_AUDIO -#define NO_MUSIC_MODE -#endif - -#define LAYOUT_ortho_5x7( \ - L00, L01, L02, L03, L04, L05, L06, \ - L10, L11, L12, L13, L14, L15, L16, \ - L20, L21, L22, L23, L24, L25, L26, \ - L30, L31, L32, L33, L34, L35, L36, \ - L40, L41, L42, L43, L44, L45, L46 \ - ) \ - LAYOUT( \ - L00, L01, L02, L03, L04, L05, L06, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L10, L11, L12, L13, L14, L15, L16, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L20, L21, L22, L23, L24, L25, L26, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ - ) - -#endif - -#define QMK_ESC_OUTPUT F5 // usually COL -#define QMK_ESC_INPUT D4 // usually ROW -#define QMK_LED B0 -#define QMK_SPEAKER C6 diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c b/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c deleted file mode 100644 index 2d361da9a3..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna_old/keymap.c +++ /dev/null @@ -1 +0,0 @@ -//placeholder \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk b/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk deleted file mode 100644 index 14ac6a6b3c..0000000000 --- a/keyboards/handwired/xeal60/keymaps/drashna_old/rules.mk +++ /dev/null @@ -1,28 +0,0 @@ -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 -TAP_DANCE_ENABLE = no -RGBLIGHT_ENABLE = yes -AUDIO_ENABLE = yes -NKRO_ENABLE = yes - -NO_SECRETS = yes -MACROS_ENABLED = yes -INDICATOR_LIGHTS = no -RGBLIGHT_TWINKLE = no - -LAYOUTS = ortho_5x7 - -# SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC)) -# SRC := $(filter-out serial.c,$(SRC)) -# SRC := $(filter-out matrix.c,$(SRC)) -# SRC := $(filter-out i2c.c,$(SRC)) -# SRC := $(filter-out split_util.c,$(SRC)) -# SRC += quantum/matrix.c - -USER_NAME := drashna -SRC += ../drashna/keymap.c - -BOOTLOADER = qmk-dfu diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/config.h b/keyboards/handwired/xeal60/keymaps/dwallace/config.h deleted file mode 100644 index 585b41dbcf..0000000000 --- a/keyboards/handwired/xeal60/keymaps/dwallace/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -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 . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#define TAPPING_TERM 150 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 14 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c b/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c deleted file mode 100644 index 2410244828..0000000000 --- a/keyboards/handwired/xeal60/keymaps/dwallace/keymap.c +++ /dev/null @@ -1,224 +0,0 @@ -#include "viterbi.h" -#include "action_layer.h" -#include "eeconfig.h" -#ifdef RGBLIGHT_ENABLE -#include "rgblight.h" -#endif - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _FN 1 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - STK_SHIFT, - STK_CTRL, - STK_ALT, - STK_GUI, - STK_META, - STK_CLEAR, - RGB_LEVEL_UP, - RGB_LEVEL_DOWN, -}; - -#define KC_ KC_TRNS -#define _______ KC_TRNS - -#define KC_SWIN LGUI(KC_TILD) // Switch between windows -#define KC_SAPP LGUI(KC_TAB) // Switch between applications -#define KC_FN1 MO(_FN) -#define KC_LCAG LCAG(KC_NO) -#define KC_RTOG RGB_TOG -#define KC_RGUP RGB_LEVEL_UP -#define KC_RGDN RGB_LEVEL_DOWN -#define KC_RST RESET -#define KC_SSFT STK_SHIFT -#define KC_SCTL STK_CTRL -#define KC_SALT STK_ALT -#define KC_SGUI STK_GUI -#define KC_SMTA STK_META -#define KC_SCLR STK_CLEAR - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,BSPC, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - TAB , Q , W , E , R , T ,LBRC, Y , U , I , O , P ,BSLS,PGUP, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ESC , A , S , D , F , G ,RBRC, H , J , K , L ,SCLN,QUOT,ENT , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - SSFT, Z , X , C , V , B ,SWIN, N , M ,COMM,DOT , UP ,SLSH,RSFT, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - SCTL,SMTA,SALT,SGUI,SPC ,SCLR,SAPP, FN1 ,SPC ,RGUI,LEFT,DOWN,RGHT,PGDN - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_FN] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , ,RST , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , RTOG, ,RGDN,RGUP, , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , ,MUTE,VOLD,VOLU, , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ) - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -#endif - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -bool modifier_already_applied = false; -uint8_t physically_held_modifiers = 0; -uint8_t last_mods = 0xFF; -uint8_t rgb_dimming = 0; -#define SET_LED_RGB(val, led_num) setrgb(((val >> 16) & 0xFF) >> rgb_dimming, ((val >> 8) & 0xFF) >> rgb_dimming, (val & 0xFF) >> rgb_dimming, (LED_TYPE *)&led[led_num]) - -void update_underglow_level(void) { - if (get_mods() == last_mods) - return; - - last_mods = get_mods(); - - if (get_mods() == 0) { - uint8_t level = 0x10 >> rgb_dimming; - rgblight_setrgb(level, level, level); - return; - } - - uint32_t mod_colors[4] = {0}; - uint8_t mod_count = 0; - rgblight_setrgb(0x00, 0x00, 0x00); - - if (get_mods() & MOD_BIT(KC_LSFT)) - mod_colors[mod_count++] = 0xFF0000; - if (get_mods() & MOD_BIT(KC_LCTL)) - mod_colors[mod_count++] = 0x00FF00; - if (get_mods() & MOD_BIT(KC_LALT)) - mod_colors[mod_count++] = 0x0000FF; - if (get_mods() & MOD_BIT(KC_LGUI)) - mod_colors[mod_count++] = 0xFFFF00; - - uint8_t led_num = 0; - for (int m = 0; m < mod_count; m++) { - for (; led_num < RGBLED_NUM*(m+1)/mod_count; led_num++) { - SET_LED_RGB(mod_colors[m], led_num); - } - } - rgblight_set(); -} - -void add_sticky_modifier(uint16_t keycode) { - add_mods(MOD_BIT(keycode)); - register_code(keycode); - modifier_already_applied = false; -} - -void clear_sticky_modifiers(void) { - unregister_code(KC_LSFT); - unregister_code(KC_LCTL); - unregister_code(KC_LALT); - unregister_code(KC_LGUI); - update_underglow_level(); -} - -void handle_sticky_modifier_event(uint16_t keycode, bool pressed) { - if (pressed) { - add_sticky_modifier(keycode); - physically_held_modifiers |= MOD_BIT(keycode); - } else { - del_mods(MOD_BIT(keycode)); - physically_held_modifiers &= ~MOD_BIT(keycode); - if (modifier_already_applied) { - clear_sticky_modifiers(); - } else { - add_sticky_modifier(keycode); - } - } - update_underglow_level(); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case STK_SHIFT: - handle_sticky_modifier_event(KC_LSFT, record->event.pressed); - return false; - break; - case STK_CTRL: - handle_sticky_modifier_event(KC_LCTL, record->event.pressed); - return false; - break; - case STK_ALT: - handle_sticky_modifier_event(KC_LALT, record->event.pressed); - return false; - break; - case STK_GUI: - handle_sticky_modifier_event(KC_LGUI, record->event.pressed); - return false; - break; - case STK_META: - handle_sticky_modifier_event(KC_LCTL, record->event.pressed); - handle_sticky_modifier_event(KC_LALT, record->event.pressed); - handle_sticky_modifier_event(KC_LGUI, record->event.pressed); - return false; - break; - case STK_CLEAR: - if (record->event.pressed) { - clear_sticky_modifiers(); - } - return false; - break; - case RGB_LEVEL_DOWN: - if (record->event.pressed && rgb_dimming < 8) { - rgb_dimming++; - } - return false; - break; - case RGB_LEVEL_UP: - if (record->event.pressed && rgb_dimming > 0) { - rgb_dimming--; - } - return false; - break; - } - if (!record->event.pressed && IS_KEY(keycode)) { - modifier_already_applied = true; - if (physically_held_modifiers == 0) - clear_sticky_modifiers(); - } - return true; -} - -void matrix_init_user(void) { - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - #endif //RGBLIGHT_ENABLE -} - -void matrix_scan_user(void) { - #ifdef RGBLIGHT_ENABLE - update_underglow_level(); - #endif //RGBLIGHT_ENABLE -} diff --git a/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk b/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk deleted file mode 100644 index 1e3cebb145..0000000000 --- a/keyboards/handwired/xeal60/keymaps/dwallace/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/fabian/config.h b/keyboards/handwired/xeal60/keymaps/fabian/config.h deleted file mode 100644 index 6ae40cc2ba..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fabian/config.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -Copyright 2012 Jun Wako - -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 . -*/ - - -#define USE_SERIAL - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - - -#ifdef SUBPROJECT_rev1 - #include "../../rev1/config.h" -#endif -#ifdef SUBPROJECT_rev2 - #include "../../rev2/config.h" -#endif -#ifdef SUBPROJECT_rev2fliphalf - #include "../../rev2fliphalf/config.h" -#endif diff --git a/keyboards/handwired/xeal60/keymaps/fabian/keymap.c b/keyboards/handwired/xeal60/keymaps/fabian/keymap.c deleted file mode 100644 index 37053a8e4b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fabian/keymap.c +++ /dev/null @@ -1,271 +0,0 @@ -/* Copyright 2015-2017 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 . - */ - -#include QMK_KEYBOARD_H - - -extern keymap_config_t keymap_config; - -enum custom_layers { - _QWERTY, - _COLEMAK, - _DVORAK, - _LOWER, - _RAISE, - _PLOVER, - _ADJUST -}; - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - PLOVER, - LOWER, - RAISE, - BACKLIT, - EXT_PLV, -}; - -#define XXXXXXX KC_NO -#define _______ KC_TRNS - -#define CTL_ESC CTL_T(KC_ESC) // Tap for Escape, hold for Control -#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) -#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) -#define SFT_BSP SFT_T(KC_BSPC) // Tap for Backspace, hold for Shift -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define SFT_SPC SFT_T(KC_SPC) // Tap for Space, hold for Shift -#define UMLAUT RALT(KC_U) // Combine Alt and U - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , \ - KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - SFT_BSP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , \ - KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Meh | Alt | GUI |Lower |Space | Tab |Raise | GUI |AltGr | Umlt | Ctrl | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - SFT_BSP, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT , \ - KC_LCTL, MEH_GRV, KC_LALT, KC_LGUI, LOWER, KC_SPC, HPR_TAB, RAISE, KC_RGUI, KC_RALT, UMLAUT, KC_RCTL \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | MS L | MS D |MS U | MS R |MS Btn| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | Left | Down | Up | Rght |MS_BN2| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BTN2, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Plover layer (http://opensteno.org) - * ,-----------------------------------------------------------------------------------. - * | # | # | # | # | # | # | # | # | # | # | # | # | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | S | T | P | H | * | * | F | P | L | T | D | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | S | K | W | R | * | * | R | B | G | S | Z | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Exit | | | A | O | | | E | U | | | | - * `-----------------------------------------------------------------------------------' - */ - -[_PLOVER] = LAYOUT( \ - KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, \ - XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ - XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | Reset| Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_DEL , \ - _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, \ - _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - -}; - -#ifdef AUDIO_ENABLE - float plover_song[][2] = SONG(PLOVER_SOUND); - float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); -#endif - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; - case PLOVER: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - stop_all_notes(); - PLAY_SONG(plover_song); - #endif - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; - case EXT_PLV: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(plover_gb_song); - #endif - layer_off(_PLOVER); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/fabian/rules.mk b/keyboards/handwired/xeal60/keymaps/fabian/rules.mk deleted file mode 100644 index b8c82cb99d..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fabian/rules.mk +++ /dev/null @@ -1,9 +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 -# -# UNICODE_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/fido/config.h b/keyboards/handwired/xeal60/keymaps/fido/config.h deleted file mode 100644 index 5cb1083652..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fido/config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2018 Danny Nguyen - -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 . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -#ifndef MASTER_LEFT - #define MASTER_RIGHT -#endif -// #define EE_HANDS - -#define TAPPING_TERM 150 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 2 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/fido/keymap.c b/keyboards/handwired/xeal60/keymaps/fido/keymap.c deleted file mode 100644 index b8ef460082..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fido/keymap.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "viterbi.h" -#include "action_layer.h" -#include "eeconfig.h" -#ifdef RGBLIGHT_ENABLE -#include "rgblight.h" -#endif - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _FN 1 - -#define KC_ KC_TRNS -#define _______ KC_TRNS - -#define KC_FN1 MO(_FN) -#define KC_WD_L LCTL(KC_LEFT) -#define KC_WD_R LCTL(KC_RGHT) -#define KC_RTOG RGB_TOG -#define KC_RMOD RGB_MOD -#define KC_RHUI RGB_HUI -#define KC_RHUD RGB_HUD -#define KC_RSAI RGB_SAI -#define KC_RSAD RGB_SAD -#define KC_RVAI RGB_VAI -#define KC_RVAD RGB_VAD -#define KC_RST RESET -#define KC_CTLZ LCTL(KC_Z) -#define KC_CTLX LCTL(KC_X) -#define KC_CTLC LCTL(KC_C) -#define KC_CTLV LCTL(KC_V) -#define KC_ATAB LALT(KC_TAB) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - 1 , 2 , 3 , 4 , 5 , 6 ,ESC , DEL , 7 , 8 , 9 , 0 ,MINS,EQL , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - RBRC, Q , W , E , R , T ,TAB , BSPC, Y , U , I , O , P ,LBRC, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - GRV , A , S , D , F , G ,LALT, CAPS, H , J , K , L ,SCLN,QUOT, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - BSLS, Z , X , C , V , B ,LSFT, RSFT, N , M ,COMM,DOT ,SLSH,ENT , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - INS ,PSCR,MENU,LGUI,LCTL,SPC ,FN1 , FN1 ,SPC ,RCTL,RALT, , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_FN] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - F1 , F2 , F3 , F4 , F5 , F6 , , , F7 , F8 , F9 ,F10 ,F11 ,F12 , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ,PGUP,WD_L, UP ,WD_R, ,ATAB, ,RMOD,RHUI,RSAI,RVAI, , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ,HOME,LEFT,DOWN,RGHT, , , , ,RHUD,RSAD,RVAD, , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ,CTLZ,CTLX,CTLC,CTLV, , , ,MUTE,VOLD,VOLU, , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ) - -}; - -void led_set_user(uint8_t usb_led) { - #ifdef RGBLIGHT_ENABLE - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { - rgblight_enable(); - } else { - rgblight_disable(); - } - #endif //RGBLIGHT_ENABLE -} diff --git a/keyboards/handwired/xeal60/keymaps/fido/rules.mk b/keyboards/handwired/xeal60/keymaps/fido/rules.mk deleted file mode 100644 index 1e3cebb145..0000000000 --- a/keyboards/handwired/xeal60/keymaps/fido/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h b/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h deleted file mode 100644 index bb3556e574..0000000000 --- a/keyboards/handwired/xeal60/keymaps/heartrobotninja/config.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 1000 - -#undef LEADER_TIMEOUT -#define LEADER_TIMEOUT 1000 - -#undef TAPPING_TERM -#define TAPPING_TERM 200 - -#undef TAPPING_TOGGLE -#define TAPPING_TOGGLE 2 - -#ifdef SUBPROJECT_rev1 -#include "../../rev1/config.h" -#endif -#ifdef SUBPROJECT_rev2 -#include "../../rev2/config.h" -#endif -#ifdef SUBPROJECT_rev2fliphalf -#include "../../rev2fliphalf/config.h" -#endif - -#endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c b/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c deleted file mode 100644 index 3a7ef9db39..0000000000 --- a/keyboards/handwired/xeal60/keymaps/heartrobotninja/keymap.c +++ /dev/null @@ -1,180 +0,0 @@ -#include QMK_KEYBOARD_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 _COLE 0 -#define _LOWER 1 -#define _RAISE 2 -#define _AUX 16 - -/* Layers */ -enum -{ - COLE = 0, - LOWER, // right hand 10 key. - RAISE, // left hand Fn, right hand symbols. - AUX, -}; - -/* Tap Dancery */ -enum -{ - TD_BTK, - TD_TDE, - TD_LPRN, - TD_RPRN, - TD_MIN, - TD_USC, -}; - -bool time_travel = false; - -// Fillers to make layering more clear -#define ____ KC_TRNS - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Colemak - * ,-----------------------------------------------------------------------------------. - * | ' " `| Q | W | F | P | G | J | L | U | Y | = + | ~ ; :| - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ( [ {| A | R | S | T | D | H | N | E | I | O | ) ] }| - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | - , <| Z | X | C | V | B | K | M | ? | | | ^ | _ . >| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Lower |Raise | Ctrl | Alt | Bksp | Spc |Enter |LShft | ESC | < | v | > | - * `-----------------------------------------------------------------------------------' - */ - [_COLE] = LAYOUT( - TD(TD_BTK), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_EQL, TD(TD_TDE), - TD(TD_LPRN), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, TD(TD_RPRN), - TD(TD_MIN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_SLSH, KC_BSLS, KC_UP, TD(TD_USC), - LOWER, RAISE, OSM(MOD_LCTL), OSM(MOD_LALT), KC_SPC, KC_BSPC, KC_ENT, OSM(MOD_LSFT), KC_ESC, KC_LEFT, KC_DOWN, KC_RGHT), - - /* Lower - * ,-----------------------------------------------------------------------------------. - * | ---- | ---- | ---- | ---- | ---- | ---- | 7 | 8 | 9 | * | / | ^ | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ---- | ---- | ---- | ---- | ---- | ---- | 4 | 5 | 6 | + | - | ---- | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | ---- | ---- | ---- | ---- | ---- | ---- | 1 | 2 | 3 | = | ---- | ---- | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ---- | ---- | ---- | ---- | ---- | ---- | ---- | 0 | . | ---- | ---- | ---- | - * `-----------------------------------------------------------------------------------' - */ - [_LOWER] = LAYOUT( - ____, ____, ____, ____, ____, ____, KC_7, KC_8, KC_9, KC_PAST, KC_PSLS, KC_CIRC, - ____, ____, ____, ____, ____, ____, KC_4, KC_5, KC_6, KC_PPLS, KC_PMNS, ____, - ____, ____, ____, ____, ____, ____, KC_1, KC_2, KC_3, KC_PEQL, ____, ____, - ____, ____, ____, ____, ____, ____, ____, KC_0, KC_MNXT, ____, ____, ____), - - /* Raise - * ,-----------------------------------------------------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | ! | @ | # | $ | % | ` ~ | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | F7 | F8 | F9 | F10 | F11 | F12 | ^ | & | * | ( | ) | - _ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | ____ | ____ | ____ | ____ | ____ | ____ | [ { | ] } | \ | | ; : | ' " | = + | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | , < | . > | / ? | - * `-----------------------------------------------------------------------------------' - */ - [_RAISE] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_GRV, - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_MINS, - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_EQL, - ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_COMM, KC_DOT, KC_SLSH), - - /* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | Reset| ____ | ____ | ____ | ____ | ____ | ____ | LOCK | ____ | ____ | ____ | VUP | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | ____ | ____ | RUN | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | VDWN | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | PGUP | MUTE | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | HOME | PGDN | END | - * `-----------------------------------------------------------------------------------' - */ - [_AUX] = LAYOUT( - RESET, ____, ____, ____, ____, ____, ____, LGUI(KC_L), ____, ____, ____, KC_VOLU, - ____, ____, LGUI(KC_R), ____, ____, ____, ____, ____, ____, ____, ____, KC_VOLD, - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_MUTE, - ____, ____, ____, ____, KC_TAB, KC_DEL, ____, ____, ____, KC_HOME, KC_PGDOWN, KC_END) - -}; - -qk_tap_dance_action_t tap_dance_actions[] = { - [TD_BTK] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_GRV), - [TD_TDE] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_TILD), - [TD_LPRN] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LPRN), - [TD_RPRN] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RPRN), - [TD_MIN] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_MINS), - [TD_USC] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_UNDS)}; - -void persistent_default_layer_set(uint16_t default_layer) -{ - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -}; - -void matrix_scan_user(void){}; - -void matrix_init_user(void){}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) -{ - switch (keycode) - { - case COLE: - if (record->event.pressed) - { - persistent_default_layer_set(1UL << _COLE); - } - return false; - break; - case LOWER: - if (record->event.pressed) - { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _AUX); - } - else - { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _AUX); - } - return false; - break; - case RAISE: - if (record->event.pressed) - { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _AUX); - } - else - { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _AUX); - } - return false; - break; - case AUX: - if (record->event.pressed) - { - layer_on(_AUX); - } - else - { - layer_off(_AUX); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk b/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk deleted file mode 100644 index 2261a848aa..0000000000 --- a/keyboards/handwired/xeal60/keymaps/heartrobotninja/rules.mk +++ /dev/null @@ -1,26 +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 -TAP_DANCE_ENABLE = yes -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 # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -SWAP_HANDS_ENABLE = no # Enable one-hand typing - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif - diff --git a/keyboards/handwired/xeal60/keymaps/henxing/Readme.md b/keyboards/handwired/xeal60/keymaps/henxing/Readme.md deleted file mode 100644 index 231aa6adf3..0000000000 --- a/keyboards/handwired/xeal60/keymaps/henxing/Readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# Let's Split the Atreus - -This keymap is a port of the Atreus keymap to the Let's Split keyboard, using a -similar method of handling layer switches as the `default` keymap. - - -# Layers - -The following tables are the layers as implemented. - -### Underscores in Layer - -Any underscore represents a key that is mapped to `KC_NO`, or no keypress. The -2x3 block in the middle is like this because the Atreus does not have any keys -there. It has been left blank for the user to add her own special keypresses or -macros that she finds useful to have on that particular layer. - - -## `_QWERTY` - -```c -/* - * q w e r t _ _ y u i o p - * a s d f g _ _ h j k l ; - * z x c v b _ _ n m , . / - * esc tab gui shift bksp ctrl alt space fn - ' enter - */ - ``` - - -## `_LOWER` - -```c -/* - * ! @ up { } _ _ pgup 7 8 9 * - * # left down right $ _ _ pgdn 4 5 6 + - * [ ] ( ) & _ _ ` 1 2 3 \ - * lower insert gui shift bksp ctrl alt space fn . 0 = - */ - ``` - -## `_RAISE` - -```c -/* - * insert home up end pgup _ _ up F7 F8 F9 F10 - * del left down right pgdn _ _ down F4 F5 F6 F11 - * _ volup _ _ reset _ _ F1 F2 F3 F12 - * _ voldn super shift bksp ctrl alt space L0 prtsc scroll pause - */ - ``` diff --git a/keyboards/handwired/xeal60/keymaps/henxing/config.h b/keyboards/handwired/xeal60/keymaps/henxing/config.h deleted file mode 100644 index 5a6261c4f7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/henxing/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/henxing/keymap.c b/keyboards/handwired/xeal60/keymaps/henxing/keymap.c deleted file mode 100644 index aab75dc543..0000000000 --- a/keyboards/handwired/xeal60/keymaps/henxing/keymap.c +++ /dev/null @@ -1,113 +0,0 @@ -#include QMK_KEYBOARD_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 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* - * q w e r t _ _ y u i o p - * a s d f g _ _ h j k l ; - * z x c v b _ _ n m , . / - * esc tab gui shift bksp ctrl alt space fn - ' enter - */ - [_QWERTY] = LAYOUT( \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ - KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, LOWER, KC_MINS, KC_QUOT, KC_ENT \ - ), - - /* - * ! @ up { } _ _ pgup 7 8 9 * - * # left down right $ _ _ pgdn 4 5 6 + - * [ ] ( ) & _ _ ` 1 2 3 \ - * lower insert gui shift bksp ctrl alt space fn . 0 = - */ - [_LOWER] = LAYOUT( \ - KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_NO, KC_NO, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, \ - KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_NO, KC_NO, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, \ - KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, \ - RAISE, KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL \ - ), - - /* - * insert home up end pgup _ _ up F7 F8 F9 F10 - * del left down right pgdn _ _ down F4 F5 F6 F11 - * _ volup _ _ reset _ _ F1 F2 F3 F12 - * _ voldn super shift bksp ctrl alt space L0 prtsc scroll pause - */ - [_RAISE] = LAYOUT( \ - KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10, \ - KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_NO, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11, \ - KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_NO, KC_NO, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, \ - KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, QWERTY, KC_PSCR, KC_SLCK, KC_PAUS \ - ) - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - - // The value to return - bool return_value = false; - - switch (keycode) { - case QWERTY: - if (record->event.pressed) { -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); -#endif - persistent_default_layer_set(1UL<<_QWERTY); - } - break; - - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - } else { - layer_off(_LOWER); - } - break; - - case RAISE: - persistent_default_layer_set(1UL<<_RAISE); - break; - default: - - // If the keycode is not handled by any of the other cases, we - // should return true - return_value = true; - break; - } - - return return_value; -} diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/README.md b/keyboards/handwired/xeal60/keymaps/hexwire/README.md deleted file mode 100644 index 3ce3f6af33..0000000000 --- a/keyboards/handwired/xeal60/keymaps/hexwire/README.md +++ /dev/null @@ -1,116 +0,0 @@ -Hexwire's Nyquist Layout -============================ - -### Changes from default layout - -- Main layer - - The right space bar key has been changed to backspace, as I only hit space with my left thumb - - Backtick is at the lower right and also serves goes to the 3rd function layer when held - - Enter key acts as shift when held - - Escape key acts as control when held - - Minus key at upper right -- Lower layer - - Numbers are on the lower layer, to make it easier to use a numpad on the right hand - - Arrow keys - - Straight and curly brackets in the middle two columns - - Screenshot keys for MacOS -- Upper layer - - Symbols are on the upper layer - - Media keys - - Page Up/Down, Home/End -- 3rd function layer - - Function keys - -## Layouts - -### QWERTY - -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` - -### Colemak -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X0 , A , R , S , T , D , H , N , E , I , O ,QUOT| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` - -### Dvorak -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X0 , A , O , E , U , I , D , H , T , N , S ,SLSH| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| X3 ,LCTL,LALT,LGUI, X1 ,SPC , BSPC, X2 ,LEFT,DOWN, UP ,RGHT| -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` - -### Lower -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , | -|----+----+----+----+----+----| |----+----+----+----+----+----| -|DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| ,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , DEL , , P0 ,PDOT, , | -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` - -### Raise -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC| -|----+----+----+----+----+----| |----+----+----+----+----+----| -| ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, | -|----+----+----+----+----+----| |----+----+----+----+----+----| -|DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS| -|----+----+----+----+----+----| |----+----+----+----+----+----| -|MUTE,MSTP,MPLY,VOLD,PGDN,MINS, PLUS,END , , , , | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , , , , , , | -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` - -### 3rd function layer - -``` -,----+----+----+----+----+----. ,----+----+----+----+----+----. -|F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , , , , , , | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , , , , , , | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , , , , , , | -|----+----+----+----+----+----| |----+----+----+----+----+----| -| , , , , , , , , , , , | -`----+----+----+----+----+----' `----+----+----+----+----+----' -``` diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/config.h b/keyboards/handwired/xeal60/keymaps/hexwire/config.h deleted file mode 100644 index 7acf84510e..0000000000 --- a/keyboards/handwired/xeal60/keymaps/hexwire/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -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 . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#define TAPPING_TERM 150 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 12 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c b/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c deleted file mode 100644 index 2050c03793..0000000000 --- a/keyboards/handwired/xeal60/keymaps/hexwire/keymap.c +++ /dev/null @@ -1,218 +0,0 @@ -#include "viterbi.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _FN3 5 -#define _FN4 6 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - FN3, - FN4, - ADJUST, -}; - -#define KC_ KC_TRNS -#define _______ KC_TRNS - -#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen -#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen -#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen -#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen -#define KC_X0 MT(MOD_LCTL, KC_ESC) -#define KC_X1 LOWER -#define KC_X2 RAISE -#define KC_X3 LT(_FN3, KC_GRV) -#define KC_X4 MT(MOD_LSFT, KC_ENT) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - TAB , Q , W , E , R , T , , Y , U , I , O , P ,MINS, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X0 , A , S , D , F , G , , H , J , K , L ,SCLN,QUOT, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - LSFT, Z , X , C , V , B , , N , M ,COMM,DOT ,SLSH, X4 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_COLEMAK] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - TAB , Q , W , F , P , G , , J , L , U , Y ,SCLN,MINS, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X0 , A , R , S , T , D , , H , N , E , I , O ,QUOT, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - LSFT, Z , X , C , V , B , , K , M ,COMM,DOT ,SLSH, X4 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_DVORAK] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - ESC , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 ,BSPC, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - TAB ,QUOT,COMM,DOT , P , Y , , F , G , C , R , L ,MINS, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X0 , A , O , E , U , I , , D , H , T , N , S ,SLSH, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - LSFT,SCLN, Q , J , K , X , , B , M , W , V , Z , X4 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - X3 ,LCTL,LALT,LGUI, X1 ,SPC , , BSPC, X2 ,LEFT,DOWN, UP ,RGHT, - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_LOWER] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - TILD,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , 1 , 2 , 3 , 4 , 5 , , 6 , 7 , 8 , 9 , 0 , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - DEL ,CAPP,LEFT,RGHT, UP ,LBRC, , RBRC, P4 , P5 , P6 ,PLUS,PIPE, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ,CPYP, , ,DOWN,LCBR, , RCBR, P1 , P2 , P3 ,MINS, , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , DEL , , P0 ,PDOT, , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_RAISE] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - TILD,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - ,EXLM, AT ,HASH,DLR ,PERC, , CIRC,AMPR,ASTR,LPRN,RPRN, , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, , EQL ,HOME, , , ,BSLS, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - MUTE,MSTP,MPLY,VOLD,PGDN,MINS, , PLUS,END , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_FN3] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - F12 , F1 , F2 , F3 , F4 , F5 , , F6 , F7 , F8 , F9 ,F10 ,F11 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ - [_ADJUST] = LAYOUT( \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, _______, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ - ) - - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk b/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk deleted file mode 100644 index 1e3cebb145..0000000000 --- a/keyboards/handwired/xeal60/keymaps/hexwire/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/khord/config.h b/keyboards/handwired/xeal60/keymaps/khord/config.h deleted file mode 100644 index 4ebdbad769..0000000000 --- a/keyboards/handwired/xeal60/keymaps/khord/config.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define TAPPING_TERM 150 - -/* prevent stuck modifiers */ -#define PREVENT_STUCK_MODIFIERS - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -//#define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#define RGBLIGHT_ANIMATIONS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/khord/keymap.c b/keyboards/handwired/xeal60/keymaps/khord/keymap.c deleted file mode 100644 index 41042065d6..0000000000 --- a/keyboards/handwired/xeal60/keymaps/khord/keymap.c +++ /dev/null @@ -1,170 +0,0 @@ -#include QMK_KEYBOARD_H - - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, - ADMIN, - SMSPC1 -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -// Tap Dance Declarations -enum { - SFT_CAP = 0 -}; - -// Dylan's additions -#define C_A_DEL LALT(LCTL(KC_DEL)) -#define C_A_INS LALT(LCTL(KC_INS)) -//#define MAC_LOK S(LCTL(KC_PWR)) -#define MAC_LOK LCTL(LGUI(KC_Q)) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | END | HOME |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MAC_LOK, _______, KC_END, KC_HOME, _______, \ - LCTL(KC_UP), KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | |PG DN |PG UP |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | MB1 | MB2 | MB3 | MB4 | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGDN, KC_PGUP, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4 \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | |AGnorm|AGswap| | | |string|string| Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | |RGBMOD|HUE-UP|SAT-UP|BRI-UP| |PLAIN |BREATH|RANBOW| SWIRL| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |RGBTOG|HUE-DN|SAT-DN|BRI-DN| |GRDNT | XMAS |KNIGHT| SNAKE| | CAIns| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | CADel| - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, AG_NORM, AG_SWAP, _______, _______, _______, ADMIN, SMSPC1, KC_DEL, \ - _______, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, _______, _______, \ - _______, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, _______, RGB_M_G, RGB_M_X, RGB_M_K, RGB_M_SN, _______, C_A_INS, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_A_DEL \ -) - -}; - -qk_tap_dance_action_t tap_dance_actions[] = { - [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS) -}; - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - case ADMIN: - if (record->event.pressed) { - SEND_STRING("Administrator"); - } - return false; - break; - case SMSPC1: - if (record->event.pressed) { - SEND_STRING("Simspace1!"); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/khord/rules.mk b/keyboards/handwired/xeal60/keymaps/khord/rules.mk deleted file mode 100644 index c90523e5d6..0000000000 --- a/keyboards/handwired/xeal60/keymaps/khord/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -TAP_DANCE_ENABLE = yes -RGBLIGHT_ENABLE = yes -USE_I2C = no - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/kris/keymap.c b/keyboards/handwired/xeal60/keymaps/kris/keymap.c deleted file mode 100644 index 34d2e86da0..0000000000 --- a/keyboards/handwired/xeal60/keymaps/kris/keymap.c +++ /dev/null @@ -1,213 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Ctrl | A | S | D | F | G | H | J | K | L | ; |Enter | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift|| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Alt | Gui |Caps |Lower |Space |Space |Raise | [ | ] | - |Ctrl | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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 , \ - ADJUST, KC_LALT, KC_LGUI, KC_CAPS, LOWER, KC_SPC, KC_SPC, RAISE, KC_LBRC, KC_RBRC, KC_MINS, KC_RCTRL \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LALT, KC_LGUI, KC_CAPS, LOWER, KC_SPC, KC_SPC, RAISE, KC_LBRC, KC_RBRC, KC_MINS, KC_RCTRL \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | 4 | 5 | 6 | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/krusli/keymap.c b/keyboards/handwired/xeal60/keymaps/krusli/keymap.c deleted file mode 100644 index 9b49bab3b4..0000000000 --- a/keyboards/handwired/xeal60/keymaps/krusli/keymap.c +++ /dev/null @@ -1,238 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _NUMPAD 5 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, - NUMPAD -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Numpad| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - NUMPAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT_ortho_4x12( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | Home | End | PgUp | PgDn |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT_ortho_4x12( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Numpad - * ,-----------------------------------------------------------------------------------. - * | Esc | 7 | 8 | 9 | * | / | | | | | | | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | <-- | 4 | 5 | 6 | + | - | | | | | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | 1 | 2 | 3 |Enter |Enter | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Qwerty| 0 | . | . |Enter |Enter | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_NUMPAD] = LAYOUT_ortho_4x12( \ - KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \ - KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \ - _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \ - QWERTY, KC_P0, KC_PDOT, KC_PDOT, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______ \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT_ortho_4x12( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case NUMPAD: - if (record->event.pressed) - persistent_default_layer_set(1UL<<_NUMPAD); - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/krusli/readme.md b/keyboards/handwired/xeal60/keymaps/krusli/readme.md deleted file mode 100644 index 175ef3c11a..0000000000 --- a/keyboards/handwired/xeal60/keymaps/krusli/readme.md +++ /dev/null @@ -1,2 +0,0 @@ -# krusli -Let's Split keymap based off the default Planck layout with a numpad layer. diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h b/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h deleted file mode 100644 index 6469b4846d..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mbsurfer/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define TAPPING_TERM 100 - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -//#define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c b/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c deleted file mode 100644 index 5f6589337f..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mbsurfer/keymap.c +++ /dev/null @@ -1,274 +0,0 @@ -#include QMK_KEYBOARD_H - - -extern rgblight_config_t rgblight_config; -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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -// Tap Dance Declarations -enum { - SFT_CAP = 0, - LFT_HOM, - DWN_PDN, - UPP_PUP, - RGT_END -}; - -// Task Manager -#define C_S_ESC LSFT(LCTL(KC_ESC)) -#define C_A_DEL LALT(LCTL(KC_DEL)) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,------------------------------------------ ------------------------------------------. - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| -* |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `------------------------------------------ ------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - TD(SFT_CAP), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, TD(LFT_HOM), TD(DWN_PDN), TD(UPP_PUP), TD(RGT_END) \ -), - -/* Colemak - * ,------------------------------------------ ------------------------------------------. - * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Esc | A | R | S | T | D | | H | N | E | I | O | " | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `------------------------------------------ ------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,------------------------------------------ ------------------------------------------. - * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Esc | A | O | E | U | I | | D | H | T | N | S | / | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `------------------------------------------ ------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,------------------------------------------ ------------------------------------------. - * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | END | HOME |Enter | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | | | | | | | | | | Next | Vol- | Vol+ | Play | - * `------------------------------------------ ------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_END, KC_HOME, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,------------------------------------------ ------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / |PG DN |PG UP |Enter | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | | | | | | | | | | Next | Vol- | Vol+ | Play | - * `------------------------------------------ ------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,------------------------------------------ ------------------------------------------. - * | Reset| | Plain|Breath|Rainbw| Swirl| | Snake|Knight| Xmas |Grdent| | Del | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------- -------+------+------+------+------+------| - * | |Toggle| Mode | Hue- | Hue+ | Sat- | | Sat+ | Val- | Val+ | | | | (RGB) - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | | | | | | | | | | | |TskMng|CAltDe| - * `------------------------------------------ ------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - RESET, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_S_ESC, C_A_DEL \ -) - - -}; - -int RGB_current_mode; -int RGB_current_hue; - -qk_tap_dance_action_t tap_dance_actions[] = { - [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), - [LFT_HOM] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME), - [DWN_PDN] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN, KC_PGDN), - [UPP_PUP] = ACTION_TAP_DANCE_DOUBLE(KC_UP, KC_PGUP), - [RGT_END] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT, KC_END) -}; - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - - if (IS_LAYER_OFF(_RAISE) && IS_LAYER_OFF(_ADJUST)) { - // Save current RGB info - RGB_current_mode = rgblight_config.mode; - RGB_current_hue = rgblight_config.hue; - - // Set RGB to Blue - rgblight_mode(1); - rgblight_setrgb(0, 0, 255); - } - - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - - if (IS_LAYER_ON(_ADJUST)){ - // Set RGB to cyan - rgblight_setrgb(0, 255, 255); - } - } else { - - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - - if (IS_LAYER_OFF(_RAISE) && IS_LAYER_OFF(_ADJUST)) { - // Reset RGB - rgblight_mode(RGB_current_mode); - rgblight_sethsv(RGB_current_hue, rgblight_config.sat, rgblight_config.val); - } else if (IS_LAYER_ON(_RAISE)){ - // Set RGB to Red - rgblight_setrgb(0, 255, 0); - } - } - return false; - break; - case RAISE: - if (record->event.pressed) { - - if (IS_LAYER_OFF(_LOWER) && IS_LAYER_OFF(_ADJUST)) { - // Save current RGB info - RGB_current_mode = rgblight_config.mode; - RGB_current_hue = rgblight_config.hue; - - // Set RGB to Green - rgblight_mode(1); - rgblight_setrgb(0, 255, 0); - } - - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - - if (IS_LAYER_ON(_ADJUST)){ - // Set RGB to cyan - rgblight_setrgb(0, 255, 255); - } - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - - if (IS_LAYER_OFF(_LOWER) && IS_LAYER_OFF(_ADJUST)) { - // Reset RGB - rgblight_mode(RGB_current_mode); - rgblight_sethsv(RGB_current_hue, rgblight_config.sat, rgblight_config.val); - } else if (IS_LAYER_ON(_LOWER)){ - // Set RGB to Blue - rgblight_setrgb(0, 0, 255); - } - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk b/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk deleted file mode 100644 index c90523e5d6..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mbsurfer/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -TAP_DANCE_ENABLE = yes -RGBLIGHT_ENABLE = yes -USE_I2C = no - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/mike808/config.h b/keyboards/handwired/xeal60/keymaps/mike808/config.h deleted file mode 100644 index bfca915f24..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mike808/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2018 Danny Nguyen - -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 . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include QMK_KEYBOARD_CONFIG_H - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#define TAPPING_TERM 150 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 2 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/mike808/keymap.c b/keyboards/handwired/xeal60/keymaps/mike808/keymap.c deleted file mode 100644 index c7e48b135c..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mike808/keymap.c +++ /dev/null @@ -1,158 +0,0 @@ -#include QMK_KEYBOARD_H - -#define _DVORAK 0 -#define _QWERTY 1 -#define _FN1 2 -#define _MOUSE 3 - -enum custom_keycodes { - DVORAK = SAFE_RANGE, - QWERTY, -}; - -#define KC_ KC_TRNS -#define _______ KC_TRNS - -#define KC_DVOR DVORAK -#define KC_QWER QWERTY -#define KC_FN1 MO(_FN1) - -// Tap-Hold keys (QWERTY) -#define KC_S_C MT(MOD_LCTL, KC_S) -#define KC_D_A MT(MOD_LALT, KC_D) -#define KC_F_G MT(MOD_LGUI, KC_F) -#define KC_J_G MT(MOD_RGUI, KC_J) -#define KC_K_A MT(MOD_RALT, KC_K) -#define KC_L_C MT(MOD_RCTL, KC_L) - -// Tap-Hold keys (Dvorak) -#define KC_O_C MT(MOD_LCTL, KC_O) -#define KC_E_A MT(MOD_LALT, KC_E) -#define KC_U_G MT(MOD_LGUI, KC_U) -#define KC_H_G MT(MOD_RGUI, KC_H) -#define KC_T_A MT(MOD_RALT, KC_T) -#define KC_N_C MT(MOD_RCTL, KC_N) - -#define KC_G_A LGUI(KC_A) -#define KC_G_C LGUI(KC_C) -#define KC_G_V LGUI(KC_V) -#define KC_G_X LGUI(KC_X) -#define KC_G_Z LGUI(KC_Z) -#define KC_G_BL LGUI(KC_BSLS) -#define KC_G_TB LGUI(KC_TAB) -#define KC_G_SP LGUI(KC_SPC) - -#define KC_ENTM LT(_MOUSE, KC_ENT) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - DVOR,ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,PGUP, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_A ,TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS,PGDN, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_X ,CAPS, A ,S_C ,D_A ,F_G , G , H ,J_G ,K_A ,L_C ,SCLN,QUOT, UP , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_C ,LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSFT,DOWN, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC , ENTM,ENTM,G_Z ,GRV ,EQL ,LEFT,RGHT - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_DVORAK] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - QWER,ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,EQL ,PGUP, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_A ,TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,PGDN, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_X ,CAPS, A ,O_C ,E_A ,U_G , I , D ,H_G ,T_A ,N_C , S ,MINS, UP , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_C ,LSFT,SCLN, Q , J , K , X , B , M , W , V , Z ,RSFT,DOWN, - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC , ENTM,ENTM,G_Z ,GRV ,BSLS,LEFT,RGHT - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_FN1] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - , , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , ,EXLM, AT ,LCBR,RCBR,PIPE, , P7 , P8 , P9 ,ASTR,F12 , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , ,HASH,DLR ,LPRN,RPRN,GRV , , P4 , P5 , P6 ,PLUS,MINS, , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , ,PERC,CIRC,LBRC,RBRC,TILD, AMPR, P1 , P2 , P3 ,SLSH, , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , ,PDOT, P0 ,EQL , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ), - - [_MOUSE] = LAYOUT_kc( - //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. - , , , , , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , ,MS_U, , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , ,MS_L,MS_D,MS_R, , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , , , , , , , , , , , , - //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| - , , , ,BTN1,BTN2, , , , , , , , - //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' - ) -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -#endif - -void update_rgblight(uint16_t layer) { - if (layer & (1UL << _DVORAK)) { - rgblight_sethsv_green(); - } else if (layer & (1UL << _QWERTY)) { - rgblight_sethsv_goldenrod(); - } -} - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); - #ifdef RGBLIGHT_ENABLE - update_rgblight(default_layer); - #endif // RGBLIGHT_ENABLE -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif - persistent_default_layer_set(1UL << _QWERTY); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistent_default_layer_set(1UL << _DVORAK); - } - return false; - break; - } - return true; -} - - -void matrix_init_user(void) { - #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - uint8_t default_layer = eeconfig_read_default_layer(); - update_rgblight(default_layer); - #endif -} diff --git a/keyboards/handwired/xeal60/keymaps/mike808/rules.mk b/keyboards/handwired/xeal60/keymaps/mike808/rules.mk deleted file mode 100644 index 1e3cebb145..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mike808/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/mjt/config.h b/keyboards/handwired/xeal60/keymaps/mjt/config.h deleted file mode 100644 index 735a58b11a..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mjt/config.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2012 Jun Wako - -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 . -*/ - - -#define USE_SERIAL - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - - -#ifdef SUBPROJECT_rev1 - #include "../../rev1/config.h" -#endif -#ifdef SUBPROJECT_rev2 - #include "../../rev2/config.h" -#endif -#ifdef SUBPROJECT_rev2fliphalf - #include "../../rev2fliphalf/config.h" -#endif - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 10 diff --git a/keyboards/handwired/xeal60/keymaps/mjt/keymap.c b/keyboards/handwired/xeal60/keymaps/mjt/keymap.c deleted file mode 100644 index 2c61cce3bc..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mjt/keymap.c +++ /dev/null @@ -1,213 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_qwerty, false, 0); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_colemak, false, 0); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_dvorak, false, 0); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/mjt/rules.mk b/keyboards/handwired/xeal60/keymaps/mjt/rules.mk deleted file mode 100644 index 874d09eab5..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mjt/rules.mk +++ /dev/null @@ -1,25 +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 = 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 -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 # 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. -SWAP_HANDS_ENABLE = no # Enable one-hand typing - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/config.h b/keyboards/handwired/xeal60/keymaps/mtdjr/config.h deleted file mode 100644 index afbf735695..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mtdjr/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define SOLENOID_ENABLE -#define SOLENOID_PIN F4 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 8 - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C -/* Select hand configuration */ - - #define MASTER_LEFT -// #define _MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c b/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c deleted file mode 100644 index 47972fcd35..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mtdjr/keymap.c +++ /dev/null @@ -1,55 +0,0 @@ -#include QMK_KEYBOARD_H -#include "mtdjr.h" - -extern keymap_config_t keymap_config; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT_kc( -// ,-----------------------------. .-----------------------------. - TAB, Q , W , E , R , T , Y , U , I , O , P ,BSPC, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - EXC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - LSFT, Z , X , C , V , B , N , M ,COMM, DOT,SLSH, ENT, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - LOWR,LCTL,LALT,LGUI,LOWR, SPC, SPC,RASE,LEFT,DOWN, UP ,RGHT -// '-----------------------------' '-----------------------------' - ), - - [_LOWER] = LAYOUT_kc( -// ,-----------------------------. .-----------------------------. - TILD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , DEL, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LBRC,RBRC,BSLS, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - ,UNDO, CUT,XCPY,XINS,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, , -// |----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , , , , , -// '-----------------------------' '-----------------------------' - ), - - [_RAISE] = LAYOUT_kc( -// ,-----------------------------. .-----------------------------. - GRV,EXLM, AT ,HASH, DLR,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, , -// |----+----+----+----+----+----| |----+----+----+----+----+----| - xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, MINS, EQL,xxxx,LCBR,RCBR,PIPE, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - ,xxxx,xxxx,xxxx,xxxx,xxxx, UNDS,PLUS,xxxx,xxxx,xxxx, , -// |----+----+----+----+----+----| |----+----+----+----+----+----| - , , , , , , , ,MNXT,VOLD,VOLU,MPLY -// '-----------------------------' '-----------------------------' - ), - - [_ADJUST] = LAYOUT_kc( \ -// ,-----------------------------. .-----------------------------. - xxxx,ROOT,PPLY,PSEF,xxxx,xxxx, RST,STOG,xxxx,xxxx,xxxx, DEL, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - RGB,RHUI,RSAI,RVAI, MOD,xxxx, F1 , F2 , F3 , F4 , F5 , F6 , -// |----+----+----+----+----+----| |----+----+----+----+----+----| - RBTH,RHUD,RSAD,RVAD,RMOD,xxxx, F7 , F8 , F9 , F10, F11, F12, -// |----+----+----+----+----+----| |----+----+----+----+----+----| - ,xxxx,xxxx,xxxx, ,xxxx, xxxx, ,xxxx,xxxx,xxxx,xxxx -// '-----------------------------' '-----------------------------' - ) -}; diff --git a/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk b/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk deleted file mode 100644 index 75e9c6503e..0000000000 --- a/keyboards/handwired/xeal60/keymaps/mtdjr/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif - -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/xeal60/keymaps/normacos/config.h b/keyboards/handwired/xeal60/keymaps/normacos/config.h deleted file mode 100644 index 9f95a869df..0000000000 --- a/keyboards/handwired/xeal60/keymaps/normacos/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define _MASTER_RIGHT -#define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/normacos/keymap.c b/keyboards/handwired/xeal60/keymaps/normacos/keymap.c deleted file mode 100644 index 8902b7b56f..0000000000 --- a/keyboards/handwired/xeal60/keymaps/normacos/keymap.c +++ /dev/null @@ -1,213 +0,0 @@ -#include QMK_KEYBOARD_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 _NORMAN 0 -#define _LOWER 1 -#define _RAISE 2 -#define _ADJUST 3 - -// To be used in process_record_user -enum custom_keycodes { - NORMAN = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, - SH_LOG, - SH_GOUP, - SH_TERM, - SPOT, - SLACK, - OUTLOOK, - CHROME -}; - -// Fillers (to make layering more clear) -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -// Mod taps -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define CTL_ESC CTL_T(KC_ESC) // Tap for Escape, hold for Control - -// Custom macros -#define SCN_SHT LSFT(LGUI(KC_4)) // Take a screenshot (MacOS) -#define SCN_LCK LCTL(LGUI(KC_Q)) // Lock screen (MacOS) -#define SH_HOME LCTL(KC_A) // Go to start of line -#define SH_END LCTL(KC_E) // Go to end of line -#define SH_RSCH LCTL(KC_R) // Search command history -#define SH_CLRH LCTL(KC_U) // Erase to beginning of line -#define SH_CLRE LCTL(KC_K) // Erase to end of line - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Norman - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | Q | W | D | F | K | | J | U | R | L | ; | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |CtlEsc| A | S | E | T | G | | Y | N | I | O | H | ' | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | P | M | , | . | / |SftEnt| - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| - * `-----------------------------------------' `-----------------------------------------' - */ -[_NORMAN] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_BSPC, \ - CTL_ESC, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ - SCN_LCK, KC_HOME, KC_END, KC_LALT, LOWER, KC_LGUI, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Lower - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | F1 | F2 | F3 | F4 | | |NumLck| 7 | 8 | 9 | = | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |CtlEsc| F5 | F6 | F7 | F8 | | | * | 4 | 5 | 6 | + | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| F9 | F10 | F11 | F12 | | | / | 1 | 2 | 3 | - |SftEnt| - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Lock | Home | End | Alt | Lower| GUI | | . | Raise| 0 | Spot |Chrome| | - * `-----------------------------------------' `-----------------------------------------' - */ -[_LOWER] = LAYOUT_ortho_4x12( \ - _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PEQL, _______, \ - _______, KC_F5, KC_F6, KC_F8, KC_F9, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_DEL, \ - _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_PSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, _______, \ - _______, _______, _______, _______, _______, _______, KC_PDOT, _______, KC_P0, SPOT, CHROME, XXXXXXX -), - -/* Raise - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |CtlEsc| Log | UpDir| Slack| Term | OutLk| | = | - | \ | [ | ] | ` | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift|ClrHom|ClrEnd|ShHome| ShEnd|Search| | Play | Mute | VolDn| VolUp|ScnSht|SftEnt| - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| - * `-----------------------------------------' `-----------------------------------------' - */ -[_RAISE] = LAYOUT_ortho_4x12( \ - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - _______, SH_LOG, SH_GOUP, SLACK, SH_TERM, OUTLOOK, KC_EQL, KC_MINS, KC_BSLS, KC_LBRC, KC_RBRC, KC_GRV, \ - _______, SH_CLRH, SH_CLRE, SH_HOME, SH_END, SH_RSCH, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, SCN_SHT, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------. ,-----------------------------------------. - * | | | | | | | | | | | | Reset| | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | AudOn|AudOff| | |Norman| | | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | | | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | Lower| | | | Raise| | | | | - * `-----------------------------------------' `-----------------------------------------' - */ -[_ADJUST] = LAYOUT_ortho_4x12( \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, XXXXXXX, NORMAN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX -) - -}; - -#ifdef AUDIO_ENABLE -float tone_norman[][2] = SONG(QWERTY_SOUND); -#endif - -void persistent_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 (record->event.pressed) { - switch(keycode) { - case NORMAN: - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_norman); - #endif - persistent_default_layer_set(1UL<<_NORMAN); - return false; - case LOWER: - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - case RAISE: - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - case ADJUST: - layer_on(_ADJUST); - return false; - case SH_LOG: // Open Jira log work window - SEND_STRING(SS_TAP(X_DOT)); - _delay_ms(100); - SEND_STRING("log work"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - case SH_GOUP: // Go up a directory - SEND_STRING("cd .."SS_TAP(X_ENTER)); - return false; - case SH_TERM: // Open Terminal - SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); - _delay_ms(100); - SEND_STRING("terminal"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - case SPOT: // Open Spotify - SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); - _delay_ms(100); - SEND_STRING("spotify app"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - case SLACK: // Open Slack - SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); - _delay_ms(100); - SEND_STRING("slack"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - case OUTLOOK: // Open MS Outlook - SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); - _delay_ms(100); - SEND_STRING("outlook"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - case CHROME: // Open Chrome - SEND_STRING(SS_LGUI(SS_TAP(X_SPACE))); - _delay_ms(100); - SEND_STRING("chrome"); - _delay_ms(100); - SEND_STRING(SS_TAP(X_ENTER)); - return false; - } - } else { - switch(keycode) { - case LOWER: - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - case RAISE: - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - case ADJUST: - layer_off(_ADJUST); - return false; - } - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/normacos/readme.md b/keyboards/handwired/xeal60/keymaps/normacos/readme.md deleted file mode 100644 index 3b7a20632b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/normacos/readme.md +++ /dev/null @@ -1,86 +0,0 @@ -# normacos -This keymap was designed specifically to be used on a MacOS High Sierra system with constant use of the Terminal, as it includes a multitude of macros for both the terminal as well as Spotlight Search. - -Norman keyboard layout [info page.](https://normanlayout.info/) - -Some Norman layout keys were placed on different layers and different positions based on available space and preference. - - -Macros: -- CtlEsc sends Escape when tapped, and Control when held. -- SftEnt sends Enter when tapped, and Shift when held. -- Lock locks the computer -- Slack opens Slack through Spotlight Search -- Term opens Terminal through Spotlight Search -- Spot opens Spotify through Spotlight Search -- Chrome opens Chrome through Spotlight Search -- OutLk opens Microsoft Outlook through Spotlight Search -- ScnSht allows the user to take a screenshot of a selected portion of the screen -- ClrHom clears Terminal line from beginning of line up to cursor -- ClrEnd clears Terminal line from cursor up to end of line -- ShHome moves Terminal cursor to beginning of line -- ShEnd moves Terminal cursor to end of line -- Search activates Terminal Reverse Search Command History -- Log opens the 'Log Work' modal on Atlassian's Jira web client -- UpDir moves working directory to its parent - -All macros that make use of the SEND_STRING command have a 100 millisecond wait before and after "writing" to let the computer/OS/app catch up. -Any and all empty keys shown below are will be set in the future, and do nothing as of the time of this writing. - - - -## Default (Norman) -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | Q | W | D | F | K | | J | U | R | L | ; | Bksp | -|------+------+------+------+------+------| |------+------+------+------+------+------| -|CtlEsc| A | S | E | T | G | | Y | N | I | O | H | ' | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift| Z | X | C | V | B | | P | M | , | . | / |SftEnt| -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| -`-----------------------------------------' `-----------------------------------------' -``` - - -## Lower -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | F1 | F2 | F3 | F4 | | |NumLck| 7 | 8 | 9 | = | Bksp | -|------+------+------+------+------+------| |------+------+------+------+------+------| -|CtlEsc| F5 | F6 | F7 | F8 | | | * | 4 | 5 | 6 | + | Del | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift| F9 | F10 | F11 | F12 | | | / | 1 | 2 | 3 | - |SftEnt| -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Lock | Home | End | Alt | Lower| GUI | | . | Raise| 0 | Spot |Chrome| | -`-----------------------------------------' `-----------------------------------------' -``` - - -## Raise - -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------| |------+------+------+------+------+------| -|CtlEsc| Log | UpDir| Slack| Term | OutLk| | = | - | \ | [ | ] | ` | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift|ClrHom|ClrEnd|ShHome| ShEnd|Search| | Play | Mute | VolDn| VolUp|ScnSht|SftEnt| -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Lock | Home | End | Alt | Lower| GUI | | Space| Raise| Left | Down | Up | Right| -`-----------------------------------------' `-----------------------------------------' -``` - -## Adjust (Lower + Raise) - -``` -,-----------------------------------------. ,-----------------------------------------. -| | | | | | | | | | | | Reset| | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | AudOn|AudOff| | |Norman| | | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | | | | | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | Lower| | | | Raise| | | | | -`-----------------------------------------' `-----------------------------------------' -``` diff --git a/keyboards/handwired/xeal60/keymaps/piemod/README.md b/keyboards/handwired/xeal60/keymaps/piemod/README.md deleted file mode 100644 index f2a051da14..0000000000 --- a/keyboards/handwired/xeal60/keymaps/piemod/README.md +++ /dev/null @@ -1,31 +0,0 @@ -PieMod -====== - -A keymap for users that need: - -- *P*: Programming symbols. - -- *I*: i3wm. - -- *E*: Emacs. - -- *M*: Macros. - -- *O*: Ortholinear. - -- *D*: Dvorak. - -Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod. - -### Keymap - -![PieMod Keymap](./keymap.png) - -### TODO - -- [ ] Add Emacs layer. -- [ ] Add Macro layer. -- [ ] Add system control keys (rotation, brightness). -- [ ] Switch " and ' quotes (or function to toggle default). -- [ ] Add capslock. -. diff --git a/keyboards/handwired/xeal60/keymaps/piemod/config.h b/keyboards/handwired/xeal60/keymaps/piemod/config.h deleted file mode 100644 index 001b62e41b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/piemod/config.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -// RGB Options -#undef RGBLED_NUM -#define RGBLED_NUM 10 -#define RGBLIGHT_SLEEP -#define RGBLIGHT_ANIMATIONS -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 1 - -// Typing Options -#define PREVENT_STUCK_MODIFIERS -#define QMK_KEYS_PER_SCAN 4 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/piemod/keymap.c b/keyboards/handwired/xeal60/keymaps/piemod/keymap.c deleted file mode 100644 index d789b7a8be..0000000000 --- a/keyboards/handwired/xeal60/keymaps/piemod/keymap.c +++ /dev/null @@ -1,99 +0,0 @@ -#include QMK_KEYBOARD_H - - -extern keymap_config_t keymap_config; - -#define _DVORAK 0 -#define _ARROW 1 //F(1) -#define _SYMBOL 2 // F(2) -#define _NUMBER 3 // F(3) -#define _FUNCTION 4 // F(4) -#define _EMACS 5 // F(5) -#define _COMBOS 6 // F(6) -#define _MOUSE 7 // F(7) - -enum custom_keycodes { - DVORAK = SAFE_RANGE, - ARROW, - SYMBOL, - NUMBER, - FUNCTION, - EMACS, - COMBOS, - MOUSE, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[_DVORAK] = LAYOUT( \ - KC_ESC, KC_QUOTE, LT(7, KC_COMMA), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE, \ - KC_TAB, LT(1, KC_A), LT(2, KC_O), LT(3, KC_E), LT(4, KC_U), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER, \ - KC_LSHIFT, KC_SCOLON, LT(5, KC_Q), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS, \ - F(1), LT(6, KC_LCTRL), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ -), - -[_ARROW] = LAYOUT( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, \ - KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, 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 \ -), - -[_SYMBOL] = LAYOUT( \ - KC_TILD, KC_GRAVE, KC_NO, KC_EQUAL, KC_PLUS, KC_NO, KC_LBRACKET, KC_RBRACKET, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ - KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(2), \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSLASH, KC_SLASH, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \ -), - -[_NUMBER] = LAYOUT( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \ -), - -[_FUNCTION] = LAYOUT( \ - KC_PSCREEN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, \ - KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, \ - RESET, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ -), - -[_EMACS] = LAYOUT( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ -), - -[_COMBOS] = LAYOUT( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ -), - -[_MOUSE] = LAYOUT( \ - KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, KC_NO \ -) -}; - -enum function_id { - TEENSY_KEY, - CUSTOM_KEY, - L_CTRL_ALT_ENT, - R_CTRL_ALT_ENT, -}; - -int CAPSLOCKED = 0; - - const uint16_t PROGMEM fn_actions[] = { - // Special Keys - [1] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt. - // Symbols - [2] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark. - }; diff --git a/keyboards/handwired/xeal60/keymaps/piemod/rules.mk b/keyboards/handwired/xeal60/keymaps/piemod/rules.mk deleted file mode 100644 index 027ea977e7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/piemod/rules.mk +++ /dev/null @@ -1,13 +0,0 @@ -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 = 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 # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = yes # 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. -SUBPROJECT_rev1 = no diff --git a/keyboards/handwired/xeal60/keymaps/pitty/README.md b/keyboards/handwired/xeal60/keymaps/pitty/README.md deleted file mode 100644 index 1662fce7ab..0000000000 --- a/keyboards/handwired/xeal60/keymaps/pitty/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Pittyolo's Let's Split Layout - -This is my Let's Split layout, modified for my ISO Hungarian taste :) - -Added some layer feedback in the underglow, but it's still a WIP. - -I wrote the keys that will appear when using Hungarian layout in Windows and the respective English keys in brackets. - - - ### Qwerty -``` -,-----------------------------------------------------------------------------------. -| Tab | Q | W | E | R | T | Z(Y)| U | I | O | P | Bksp | -|------+------+------+------+------+-------------+------+------+------+------+------| -| Esc | A | S | D |LTVIMF| G | H | J | K | L | É(;)| Á(") | -|------+------+------+------+------+------|------+------+------+------+------+------| -|Í/Shft| Y(Z) | X | C | V | B | N | M | , | . | -(/)| Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| Ctrl | GUI | Alt |ADJUST| Spc | LOWER| Bksp | Ent | Alt | =(&) | GAME | Del | -`-----------------------------------------------------------------------------------' -``` - - Tap left shift writes the missing ISO key, hold is Shift. - - - ### Gaming mode (Toggle layer) -``` -,-----------------------------------------------------------------------------------. -| | | | | | | | | | | |Lower | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | F | | | | | | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| Shift| | | | | | | | | | |QWERTY| -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | Left | Down | Up | Right| -`-----------------------------------------------------------------------------------' -``` - -Disabled some of the functions in the main layer to help with better gaming experience. - - - ### Lower (Hold down right Space) -``` -,-----------------------------------------------------------------------------------. -| 0(') | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Ö(0) | Ü(-) | -|------+------+------+------+------+------+------+------+------+------+------+------| -| F10 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F11 | F12 | -|------+------+------+------+------+-------------+------+------+------+------+------| -| | | | | | | | | Ins | Home | PgUp | Shift| -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | | | | | Del | End | PgDn | AltGr| -`-----------------------------------------------------------------------------------' -``` - - Function layer with everything that is missing from the main layer. - - - ### NAV (double tap toggles the layer, and hold for momentary switch) -``` -,-----------------------------------------------------------------------------------. -| | | Up | | F2 | | | 7 | 8 | 9 | / | | -|------+------+------+------+------+------|------+------+------+------+------+------| -| | Left | Down | Right| | | | 4 | 5 | 6 | * | | -|------+------+------+------+------+------|------+------+------+------+------+------| -| Shift| | | | | | | 1 | 2 | 3 | - | | -|------+------+------+------+------+------|------+------+------+------+------+------| -| | | | | | | | 0 | . | = | + | | -`-----------------------------------------------------------------------------------' -``` - - Navigation layer with a numpad on the right side. - - - - ### Vim Movement (Hold down F) -``` -,-----------------------------------------------------------------------------------. -|RGBMOD|RGBTOG| | | | | | Ú | Í | Ó | Ő | Ű | -|------+------+------+------+------+------+------+------+------+------+------+------| -|DM_stp| | | LCTRL| | | Left | Down | Up | Right| | | -|------+------+------+------+------+------+------+------+------+------+------+------| -|DM_REC| | | | | | | | | | | | -|------+------+------+------+------+------+------+------+------+------+------+------| -| | | | | LShft| | | | | | | RESET| -`-----------------------------------------------------------------------------------' -``` - - Turns hjkl into vim movement. I moved accented Hungarian letters here. - - - diff --git a/keyboards/handwired/xeal60/keymaps/pitty/config.h b/keyboards/handwired/xeal60/keymaps/pitty/config.h deleted file mode 100644 index 3798f9a647..0000000000 --- a/keyboards/handwired/xeal60/keymaps/pitty/config.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#define TAPPING_TOGGLE 2 - -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 2 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/pitty/keymap.c b/keyboards/handwired/xeal60/keymaps/pitty/keymap.c deleted file mode 100644 index 0fd4c1384f..0000000000 --- a/keyboards/handwired/xeal60/keymaps/pitty/keymap.c +++ /dev/null @@ -1,169 +0,0 @@ -#include QMK_KEYBOARD_H - - -//Following line allows macro to read current RGB settings -extern rgblight_config_t rgblight_config; - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _GAME 1 -#define _LOWER 2 -#define _NAV 3 -#define _VIM 4 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - GAME, - LOWER, - NAV, - VIM, -}; - - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Z(Y)| U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D |LTVIMF| G | H | J | K | L | É(;)| Á(") | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |Í/Shft| Y(Z) | X | C | V | B | N | M | , | . | -(/)| Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt |ADJUST| Spc | LOWER| Bksp | Ent | Alt | =(&) | GAME | Del | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, LT(_VIM, KC_F), KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - MT(MOD_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_LCTL, KC_LGUI, KC_LALT, TT(_NAV), KC_SPC, LT(_LOWER, KC_SPC), KC_BSPC, KC_ENT, KC_RALT, KC_AMPERSAND, TG(_GAME), KC_DEL \ -), - -/* Gaming mode - * ,-----------------------------------------------------------------------------------. - * | | | | | | | | | | | |Lower | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | F | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| | | | | | | | | | |QWERTY| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Left | Down | Up | Right| - * `-----------------------------------------------------------------------------------' - */ -[_GAME] = LAYOUT( \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OSL(_LOWER), \ - _______, _______, _______, _______, KC_F, _______, _______, _______, _______, _______, _______, _______, \ - KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | 0(') | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Ö(0) | Ü(-) | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | F10 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F11 | F12 | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | | | | | | Ins | Home | PgUp | Shift| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Del | End | PgDn | AltGr| - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, \ - KC_F10, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F11, KC_F12, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, KC_RSFT, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, KC_RALT \ -), - - -/* NAV - * ,-----------------------------------------------------------------------------------. - * | | | Up | | F2 | | | 7 | 8 | 9 | / | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Left | Down | Right| | | | 4 | 5 | 6 | * | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| | | | | | | 1 | 2 | 3 | - | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | 0 | . | = | + | | - * `-----------------------------------------------------------------------------------' - */ -[_NAV] = LAYOUT( \ - _______, _______, KC_UP, _______, KC_F2, _______, _______, KC_7, KC_8, KC_9, KC_KP_SLASH, _______, \ - _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_4, KC_5, KC_6, KC_KP_ASTERISK, _______, \ - KC_LSFT, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_KP_MINUS, _______, \ - _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_KP_DOT, KC_KP_EQUAL, KC_KP_PLUS, _______ \ -), - -/* Vim Movement (Hold down F) - * ,-----------------------------------------------------------------------------------. - * |RGBMOD|RGBTOG| | | | | | Ú | Í | Ó | Ő | Ű | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |DM_stp| | | LCTRL| | | Left | Down | Up | Right| | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |DM_REC| | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | LShft| | | | | | | RESET| - * `-----------------------------------------------------------------------------------' - */ -[_VIM] = LAYOUT( \ - RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, KC_RBRC, KC_NUBS, KC_EQL , KC_LBRC, KC_NUHS, \ - _______, _______, _______, KC_LCTL, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, KC_LSFT, _______, _______, _______, _______, _______, _______, RESET \ -) - - -}; - -// define variables for reactive RGB -bool RGB_INIT = false; -bool TOG_STATUS = false; -int RGB_current_mode; - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - - -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - switch (layer) { - case _NAV: - if (RGB_INIT) {} else { - RGB_current_mode = rgblight_config.mode; - RGB_INIT = true; - } - if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - rgblight_mode(29); - } - break; - case _LOWER: - if (RGB_INIT) {} else { - RGB_current_mode = rgblight_config.mode; - RGB_INIT = true; - } - if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - rgblight_mode(29); - } - break; - case _QWERTY: - if (RGB_INIT) {} else { - RGB_current_mode = rgblight_config.mode; - RGB_INIT = true; - } - rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change - TOG_STATUS = false; - break; - } - }; diff --git a/keyboards/handwired/xeal60/keymaps/pitty/rules.mk b/keyboards/handwired/xeal60/keymaps/pitty/rules.mk deleted file mode 100644 index 8ebc85a44b..0000000000 --- a/keyboards/handwired/xeal60/keymaps/pitty/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -RGBLIGHT_ENABLE = yes -NKRO_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/poker/config.h b/keyboards/handwired/xeal60/keymaps/poker/config.h deleted file mode 100644 index 5a6261c4f7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/poker/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/poker/keymap.c b/keyboards/handwired/xeal60/keymaps/poker/keymap.c deleted file mode 100644 index cce0ca4741..0000000000 --- a/keyboards/handwired/xeal60/keymaps/poker/keymap.c +++ /dev/null @@ -1,240 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _FN 5 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - FN, - ADJUST -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Func | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Up | Down |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - FN , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - SFT_T(KC_ESC) , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), \ - KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT \ -), - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Func | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - KC_TAB , KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - FN , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - SFT_T(KC_ESC) , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT), \ - KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Func | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Esc | Alt |Lower | Esc |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - KC_TAB , KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - FN , KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - SFT_T(KC_ESC) , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MT(MOD_RSFT, KC_ENT), \ - KC_LCTL , KC_LGUI, KC_ESC, KC_LALT, LOWER, KC_ESC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Home |Pg Up |Pg Dn | End | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL , \ - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | Home |Pg Up |Pg Dn | End | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL , \ - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \ -), - -/* Function - * ,-----------------------------------------------------------------------------------. - * | Esc | | Prev | Play | Next | | |Pg Up | Up |Pg Dn |Prt Sc| Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | Vol- | Mute | Vol+ | | Home | Left | Down |Right | End | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | Esc | | | Esc | Home |Pg Up |Pg Dn | End | - * `-----------------------------------------------------------------------------------' - */ -[_FN] = LAYOUT( \ - KC_ESC , _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_DEL, \ - _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, KC_ESC , _______, _______, KC_ESC , KC_HOME, KC_PGUP, KC_PGDN, KC_END \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Caps |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | Caps | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ - [_ADJUST] = LAYOUT( \ - _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , \ - _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - KC_CAPS, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, KC_CAPS, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ - ) - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case FN: - if (record->event.pressed) { - layer_on(_FN); - } else { - layer_off(_FN); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/poker/rules.mk b/keyboards/handwired/xeal60/keymaps/poker/rules.mk deleted file mode 100644 index 457a3d01d4..0000000000 --- a/keyboards/handwired/xeal60/keymaps/poker/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/smt/config.h b/keyboards/handwired/xeal60/keymaps/smt/config.h deleted file mode 100644 index 5a6261c4f7..0000000000 --- a/keyboards/handwired/xeal60/keymaps/smt/config.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/smt/keymap.c b/keyboards/handwired/xeal60/keymaps/smt/keymap.c deleted file mode 100644 index 090cf78b7c..0000000000 --- a/keyboards/handwired/xeal60/keymaps/smt/keymap.c +++ /dev/null @@ -1,218 +0,0 @@ -#include QMK_KEYBOARD_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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -// Custom macros -#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) -#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------' `-----------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ - MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Colemak - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Esc | A | R | S | T | D | | H | N | E | I | O | " | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------' `-----------------------------------------' - */ -[_COLEMAK] = LAYOUT( \ - HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \ - MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Dvorak - * ,-----------------------------------------. ,-----------------------------------------. - * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Esc | A | O | E | U | I | | D | H | T | N | S | - | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------' `-----------------------------------------' - */ -[_DVORAK] = LAYOUT( \ - HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \ - MEH_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT -), - -/* Lower - * ,-----------------------------------------. ,-----------------------------------------. - * | 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------' `-----------------------------------------' - */ -[_LOWER] = LAYOUT( \ - ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ - CTL_T(KC_DLR), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_4, KC_5, KC_6, _______, _______, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_1, KC_2, KC_3, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY -), - -/* Raise - * ,-----------------------------------------. ,-----------------------------------------. - * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | _ | ? | + | { | } | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | - | / | = | [ | ] | \ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | Home |PageDn|PageUp| End | - * `-----------------------------------------' `-----------------------------------------' - */ -[_RAISE] = LAYOUT( \ - ALL_T(KC_TILD), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - _______, _______, _______, _______, _______, _______, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, _______, _______, _______, _______, _______, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS), \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------. ,-----------------------------------------. - * | | Reset| | | | | | | | | | | Reset| - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | | | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | | | | | - * `-----------------------------------------' `-----------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ -) - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/smt/readme.md b/keyboards/handwired/xeal60/keymaps/smt/readme.md deleted file mode 100644 index 20bc662f0a..0000000000 --- a/keyboards/handwired/xeal60/keymaps/smt/readme.md +++ /dev/null @@ -1,88 +0,0 @@ -# smt's Let's Split keymap - -This keymap is ported from my Planck keymap. - - -## Qwerty - -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Esc | A | S | D | F | G | | H | J | K | L | ; | " | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | -`-----------------------------------------' `-----------------------------------------' -``` - -## Colemak - -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Esc | A | R | S | T | D | | H | N | E | I | O | " | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | -`-----------------------------------------' `-----------------------------------------' -``` - -## Dvorak - -``` -,-----------------------------------------. ,-----------------------------------------. -| Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Esc | A | O | E | U | I | | D | H | T | N | S | - | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| ` | Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up |Right | -`-----------------------------------------' `-----------------------------------------' -``` - -## Lower - -``` -,-----------------------------------------. ,-----------------------------------------. -| 0 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| $ | F1 | F2 | F3 | F4 | F5 | | F6 | 4 | 5 | 6 | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | F7 | F8 | F9 | F10 | F11 | | F12 | 1 | 2 | 3 | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | | | Next | Vol- | Vol+ | Play | -`-----------------------------------------' `-----------------------------------------' -``` - -## Raise - -``` -,-----------------------------------------. ,-----------------------------------------. -| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | _ | ? | + | { | } | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | - | / | = | [ | ] | \ | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | | | Home |PageDn|PageUp| End | -`-----------------------------------------' `-----------------------------------------' -``` - -## Adjust (Lower + Raise) - -``` -,-----------------------------------------. ,-----------------------------------------. -| | Reset| | | | | | | | | | | Reset| -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | |Aud on|Audoff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | | | | | | | -|------+------+------+------+------+------| |------+------+------+------+------+------| -| | | | | | | | | | | | | | -`-----------------------------------------' `-----------------------------------------' -``` diff --git a/keyboards/handwired/xeal60/keymaps/that_canadian/config.h b/keyboards/handwired/xeal60/keymaps/that_canadian/config.h deleted file mode 100644 index 586b6e8c87..0000000000 --- a/keyboards/handwired/xeal60/keymaps/that_canadian/config.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define _MASTER_RIGHT -// #define EE_HANDS - -#endif \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c b/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c deleted file mode 100644 index 239a8d3bee..0000000000 --- a/keyboards/handwired/xeal60/keymaps/that_canadian/keymap.c +++ /dev/null @@ -1,163 +0,0 @@ -#include QMK_KEYBOARD_H -#include "action_layer.h" -#include "eeconfig.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 3 -#define _RAISE 4 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, - BACKLIT -}; - -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | RESET| Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Backlt| Ctrl | GUI | Alt |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT( \ - RESET, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - RGB_TOG, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - BACKLIT, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) - - -}; - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; - 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; - break; - 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} \ No newline at end of file diff --git a/keyboards/handwired/xeal60/keymaps/waples/README.md b/keyboards/handwired/xeal60/keymaps/waples/README.md deleted file mode 100644 index 6e171d964f..0000000000 --- a/keyboards/handwired/xeal60/keymaps/waples/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Waples Let's Split keymap -[Waples](https://www.github.com/Waples) - -## My (forever) Work-In-Progress keymap for my Let's Split keyboard. -My keymap is much like the default, I just personally like to have my Enter and Escape key to be on my home row. The Escape key doubles as a Control key when held down, my Enter key functions as (right)Shift when held down. -Everything you see below here is constantly *under construction*, so there may be some dumb things in this, which are already gotten taken out, or are still in there :P. - -### Layers -I currently have the following layers in my keymap: -* Qwerty (as default) -* Dvorak (still learning this type of layout, so not really used much) -* Gaming (WIP! I tried some I found, but didn't like them, so I'm in the progress of making my own) -* Lefty (lower) -* Righty (raise) -* Dual (adjust) - -#### QWERTY - | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bsp | - |C_Esc| A | S | D | F | G | | H | J | K | L | ; |S_Ent| - | Sft | Z | X | C | V | B | | N | M | , | . | / | " | - |P_SCR| GUI | Alt | Cps | ^L^ | Bsp | | Spc | ^R^ | Lft | Dwn | Up! | Rgt | - - -#### DVORAK - | Tab | " | , | . | P | Y | | F | G | C | R | L | Bsp | - |C_Esc| A | O | E | U | I | | D | H | T | N | S |S_Ent| - | Sft | ; | Q | J | K | X | | B | M | W | V | Z | / | - |P_SCR| GUI | Alt | Cps | ^L^ | Bsp | | Spc | ^R^ | Lft | Dwn | Up! | Rgt | - - -#### GAMING - | Tab | Q | W | E | R | T | | | | | | |QWERT| - | Esc | A | S | D | F | G | | | | | | | | - | Sft | Z | X | C | V | B | | | | | | | | - | Ctl | 1 | 2 | 3 | ^L^ | Spc | | Bsp | ^R^ | Lft | Dwn | Up | Rgt | - - -#### LEFTY (lower) - | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bsp | - | Del | | | | | | | | ( | ) | [ | ] | | - | | | | | | | | | | | | | | - | | | | | | | | Ins | | Hme | PgD | PgU | End | - - -#### RIGHTY (raise) - | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp | - | Del | F1 | F2 | F3 | F4 | | | = | - | \ | / | | | - | | F5 | F6 | F7 | F8 | | | | | | | | | - | | F9 | F10 | F11 | | | | | | | | | | - - -#### DUAL - |Reset| | | | |QWERT| | GAME| | | | |Reset| - | | Prv | Stp | Tog | Nxt | Nrm | | Swp | | | | | | - | | | Mte | Vol-| Vol+| | | NKRO| | | | | | - | | | | | | | |DVORK| | | | | | - - diff --git a/keyboards/handwired/xeal60/keymaps/waples/config.h b/keyboards/handwired/xeal60/keymaps/waples/config.h deleted file mode 100644 index 98ebeff455..0000000000 --- a/keyboards/handwired/xeal60/keymaps/waples/config.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* Use I2C or Serial, not both */ -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS // We like to have choices I guess - -#define PREVENT_STUCK_MODIFIERS // When switching layers, this will release all mods - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/waples/keymap.c b/keyboards/handwired/xeal60/keymaps/waples/keymap.c deleted file mode 100644 index 7b25bc51f5..0000000000 --- a/keyboards/handwired/xeal60/keymaps/waples/keymap.c +++ /dev/null @@ -1,131 +0,0 @@ -// Waples layout for Let's Split (rev2) -// Made changes from the default - -#include QMK_KEYBOARD_H - - -extern keymap_config_t keymap_config; - -#define _QWERTY 0 -#define _DVORAK 1 -#define _GAME 2 -#define _LEFTY 3 -#define _RIGHTY 4 -#define _DUAL 5 - -enum letssplit_keycodes { - QWERTY = SAFE_RANGE, - DVORAK, - GAME, - LEFTY, - RIGHTY, - DUAL, -}; - -#define TG_NKRO MAGIC_TOGGLE_NKRO // Toggle NKRO -#define CTLESC MT(MOD_LCTL, KC_ESC) // Hold for left Ctrl, tap for Esc -#define SHFTENT MT(MOD_RSFT, KC_ENT) // Hold for right Shift, tap for Enter -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[_QWERTY] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SHFTENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \ - KC_PSCR, KC_BSPC, KC_LALT, KC_CAPS, LEFTY, KC_LGUI, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -[_DVORAK] = LAYOUT( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - CTLESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, SHFTENT, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, \ - KC_PSCR, KC_LGUI, KC_LALT, KC_CAPS, LEFTY, KC_BSPC, KC_SPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), - -[_GAME] = LAYOUT( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______, _______, _______, _______, _______, QWERTY, \ - CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, _______, _______, _______, _______, _______, _______, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, _______, _______, _______, _______, \ - KC_LCTL, KC_1, KC_2, KC_3, LEFTY, KC_SPC, KC_BSPC, RIGHTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ -), - -[_LEFTY] = LAYOUT( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, KC_INS, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ -), - -[_RIGHTY] = LAYOUT( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, _______, KC_EQL, KC_MINS, KC_BSLS, KC_SLSH, _______, _______, \ - _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, - _______, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ \ -), - -[_DUAL] = LAYOUT( \ - RESET, _______, _______, _______, _______, QWERTY, GAME, _______, _______, _______, _______, RESET, \ - _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, \ - _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, TG_NKRO, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, DVORAK, _______, _______, _______, _______, _______ \ -) -}; - -void persistent_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) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case GAME: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_GAME); - } - return false; - break; - case LEFTY: - if (record->event.pressed) { - layer_on(_LEFTY); - update_tri_layer(_LEFTY, _RIGHTY, _DUAL); - } else { - layer_off(_LEFTY); - update_tri_layer(_LEFTY, _RIGHTY, _DUAL); - } - return false; - break; - case RIGHTY: - if (record->event.pressed) { - layer_on(_RIGHTY); - update_tri_layer(_LEFTY, _RIGHTY, _DUAL); - } else { - layer_off(_RIGHTY); - update_tri_layer(_LEFTY, _RIGHTY, _DUAL); - } - return false; - break; - case DUAL: - if (record->event.pressed) { - layer_on(_DUAL); - } else { - layer_off(_DUAL); - } - return false; - break; - } - return true; -} diff --git a/keyboards/handwired/xeal60/keymaps/waples/rules.mk b/keyboards/handwired/xeal60/keymaps/waples/rules.mk deleted file mode 100644 index 457a3d01d4..0000000000 --- a/keyboards/handwired/xeal60/keymaps/waples/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/xk/config.h b/keyboards/handwired/xeal60/keymaps/xk/config.h deleted file mode 100644 index c75ed12cc8..0000000000 --- a/keyboards/handwired/xeal60/keymaps/xk/config.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define TAPPING_TOGGLE 1 -#define TAPPING_TERM 300 -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_LAYER_TOGGLE 2 -#define ONESHOT_TIMEOUT 800 - -#define USE_I2C - -#define MOUSEKEY_INTERVAL 50 -#define MOUSEKEY_DELAY 0 -#define MOUSEKEY_TIME_TO_MAX 60 -#define MOUSEKEY_MAX_SPEED 7 - -#define MOUSEKEY_WHEEL_DELAY 0 -#define MOUSEKEY_WHEEL_MAX_SPEED 8 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - - -#define PREVENT_STUCK_MODIFIERS -#define IGNORE_MOD_TAP_INTERRUPT -#define PERMISSIVE_HOLD - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/xk/keymap.c b/keyboards/handwired/xeal60/keymaps/xk/keymap.c deleted file mode 100644 index c032b865aa..0000000000 --- a/keyboards/handwired/xeal60/keymaps/xk/keymap.c +++ /dev/null @@ -1,370 +0,0 @@ -#include QMK_KEYBOARD_H - - -extern keymap_config_t keymap_config; - -#define _COLEMAK 0 -#define _KAMELOC 1 -#define _IKAPILA 2 -#define _IKASHFT 3 -#define _ARROWKY 4 -#define _FNCTION 5 -#define _NINEKEY 6 -#define _NAVIGAT 7 -#define _QWERTY 8 -#define _MLAYER 9 -#define _GRVTABL 15 - -enum custom_keycodes { - COLEMAK = SAFE_RANGE, - KAMELOC, - IKAPILA, - IKASHFT, - ARROWKY, - FNCTION, - NINEKEY, - NAVIGAT, - QWERTY, - MLAYER, - GRVTABL, -}; - -//TD Declarations -enum { -VOM = 0, -PRN, -EGT, -HRD, -XRD, -DSH, -ESC, -EQE, -PGN, -HND, -COD, -UND, -F11, -F12, -F13, -F14, -F15, -F16, -F17, -F18, -F19, -F20, -//unicode_inputctl -LINUX, -WIN, -WINSH, -OSX, -}; - -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -// action-TAP for key/mod behavior LT(layer, KC) -#define XK_TAB LT(_FNCTION, KC_TAB) -#define XK_BSP LT(_KAMELOC, KC_BSPC) -#define XK_APO LT(_KAMELOC, KC_QUOT) - -#define XK_SPC LT(_IKAPILA, KC_SPC) -#define XK_ENT LT(_IKAPILA, KC_ENT) -#define XK_PGDN LT(_IKASHFT, KC_PGDN) -#define XK_PGUP LT(_IKASHFT, KC_PGUP) -#define PIPBOY LT(_FNCTION, KC_BSLS) -#define XK_DEL LT(_IKASHFT, KC_DEL) -#define XK_GRV LT(_GRVTABL, KC_GRV) - -// mod-TAP for mod/key behavior MT(modkey, KC) -#define ALT_IT MT(MOD_RALT, KC_SCLN) -#define CTL_IT MT(MOD_RCTL, KC_DOT) -#define SFT_ENT MT(MOD_RSFT, KC_ENT) - -//sticky modifiers -#define KYCTL OSM(MOD_LCTL) -#define KYSFT OSM(MOD_LSFT) -#define CAKY OSM(MOD_LCTL | MOD_LALT) - -//shortcuts -#define CADEL LALT(LCTL(KC_DEL)) -#define CAINS LALT(LCTL(KC_INS)) -#define TGNKRO MAGIC_TOGGLE_NKRO - -#define NAVCH LCTL(KC_HOME) -#define NAVCPD LCTL(KC_PGDN) -#define NAVCPU LCTL(KC_PGUP) -#define NAVCE LCTL(KC_END) -#define NAVCU LCTL(KC_UP) -#define NAVCD LCTL(KC_DOWN) -#define NAVCL LCTL(KC_LEFT) -#define NAVCR LCTL(KC_RGHT) -#define NAVGU LGUI(KC_UP) -#define NAVGD LGUI(KC_DOWN) -#define NAVGL LGUI(KC_LEFT) -#define NAVGR LGUI(KC_RGHT) - -#define KC_NDSH LCTL(KC_PMNS) -#define KC_MDSH LALT(LCTL(KC_PMNS)) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* - TAP - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │TAB │ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │DEL │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │BKSP│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ ' │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │OSFT│ X │ C │ D │ V │ Z │ │ K │ H │ , │ │ . │ / │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │OCTL│GUI │ESC │ALT │PGUP│SPC │ │ENT │PGDN│ () │ {} │ \ │ ` │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - HOLD - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │L FN│ │ │ │ │ │ │ │ │ │ │ALT │L!@#│ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │L OH│ │ │ │ │ │ │ │ │ │ │ │L OH│ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │SFT │ │ │ │ │ │ │ │ │ │ │CTL │SFT │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │CTL │GUI │ESC │ALT │L!@#│L123│ │L123│L!@#│L M│ │L FN│LGRV│ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - DOUBLETAP - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │OSML│ │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │OSML│OSML│!F4 │ │ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - Switch type - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │Br │mxC │Z │Z │Z │Z │ │Z │Z │Z │Z │Br │G │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │G │Z │Z │Z │Z │Z │ │Z │Z │Z │Z │Z │Z │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │Y │Z │Z │Z │Z │Z │ │Z │Z │Z │B │B │Y │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │Y │Y │mxC │Z │BLK │BLK │ │BLK │BLK │Z │Z │B │G │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - with DCS keycaps - Top Row R1 (reversed?) - M Row1 R3 (with reversed pointer finger) - M Row2 R4 - B Row R2 (reversed) -*/ - -// Colemak PB&J (Mod-DH) -[_COLEMAK] = LAYOUT( \ - XK_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, ALT_IT, XK_DEL, \ - XK_BSP, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, XK_APO, \ - KYSFT, KC_X, KC_C, KC_D, KC_V, KC_Z, KC_K, KC_H, TD(COD), KC_DOT, CTL_IT, SFT_T(KC_SLSH), \ - KYCTL, KC_LGUI, TD(ESC), KC_LALT, XK_PGUP, XK_SPC, XK_ENT, XK_PGDN, MO(_MLAYER), TT(_NAVIGAT), PIPBOY, XK_GRV \ -), - -// useful for one-handed typing -[_KAMELOC] = LAYOUT( \ - XK_DEL, KC_SCLN, KC_Y, KC_U, KC_L, KC_J, KC_B, KC_P, KC_F, KC_W, KC_Q, XK_TAB, \ - _______, KC_O, KC_I, KC_E, KC_N, KC_M, KC_G, KC_T, KC_S, KC_R, KC_A, _______, \ - KYSFT, KC_SLSH, KC_DOT, KC_COMM, KC_H, KC_K, TD(UND), KC_V, KC_D, KC_C, KC_X, KYSFT, \ - XK_GRV, PIPBOY, M(1), KC_BTN1, KC_HOME, KC_ENT, KC_ENT, KC_END, KC_LGUI, TD(ESC), KC_LALT, KYCTL \ -), - -/* - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ M │ V- │ V+ │NEXT│PLAY│ │ ← │ ↓ │ ↑ │ → │DASH│INS │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ - │ = │TGL │ │ │ │HOME│END │HOME│ │ \ │ ~ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ -[_IKAPILA] = LAYOUT( \ - _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ - _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(DSH), KC_INS, \ - _______, KC_MINS, KC_EQL, XXXXXXX, XXXXXXX, LCTL(KC_Z), KC_HOME, TD(HND), KC_HOME, XXXXXXX, KC_BSLS, KC_TILD, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -), - -/* - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │BSPC│ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │DEL │ │ ← │ ↓ │ ↑ │ → │ │NEXT│PGUP│ V+ │ V- │DASH│PSCR│ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ _ │ + │END │HOME│END │ │ │ │ │ [ │ ] │ │ - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ - -[_IKASHFT] = LAYOUT( \ - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ - KC_DEL, TD(PGN), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_MNXT, KC_PGUP, KC_VOLU, TD(VOM), KC_MDSH, KC_PSCR, \ - _______, KC_UNDS, KC_PLUS, KC_END, KC_HOME, KC_END, M(1), M(0), M(2), KC_LBRC, KC_RBRC, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -), - -/* - ┌────┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┬────┐ - │ │ → │ ↑ │ ← │ ↓ │ → │ │ → │ ↓ │ ← │ ↑ │ ↑ │ │ just in case someone hacks my IP with a 10MeG pipe, you know? - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ - │ │ ← │ ↓ │ → │ ↑ │ ← │ │ ↑ │ ← │ ↓ │ → │ ← │ │ hacker_evasion layer - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ >>init network SEQUENCE - │ │ ↑ │ ← │ ↓ │ → │ ↑ │ │ ↓ │ ← │ ↑ │ → │ ← │ │ sleep 11; echo "DONE\n" - ├────┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┼────┤ throttle INPUT 11001001 OUTPUT 010011001 ? FULL )); \ - │ │ │ │ → │ ← │ ↓ │ │ → │ ↑ │ ← │ ↓ │ ↑ │ │ <event.pressed) { - switch(id) { - case 0: - return MACRO( D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), T(LEFT), END ); - case 1: - return MACRO( D(LSFT), T(LBRC), U(LSFT), D(LSFT), T(RBRC), U(LSFT), T(LEFT), END ); - case 2: - return MACRO( T(LBRC), T(RBRC), T(LEFT), END); - case 3: - clear_keyboard(); - case 4: - return MACRO( D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(LBRACKET), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(BSLASH), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(7), U(LSFT), D(LSFT), T(RBRACKET), U(LSFT), T(SCOLON), D(LSFT), T(SCOLON), U(LSFT), END ); - case WINSH: - set_unicode_input_mode(UC_WIN); - return false; - break; - case WIN: - set_unicode_input_mode(UC_WINC); - return false; - break; - case OSX: - set_unicode_input_mode(UC_OSX); - return false; - break; - } - } - return MACRO_NONE; -}; diff --git a/keyboards/handwired/xeal60/keymaps/xk/rules.mk b/keyboards/handwired/xeal60/keymaps/xk/rules.mk deleted file mode 100644 index 84bf8e1f59..0000000000 --- a/keyboards/handwired/xeal60/keymaps/xk/rules.mk +++ /dev/null @@ -1,19 +0,0 @@ -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -USE_I2C = yes -TAP_DANCE_ENABLE = yes - -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = yes # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/config.h b/keyboards/handwired/xeal60/keymaps/zer09/config.h deleted file mode 100644 index 73438d8a93..0000000000 --- a/keyboards/handwired/xeal60/keymaps/zer09/config.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -/* key matrix size */ -/* Rows are doubled-up */ -#undef MATRIX_ROWS -#undef MATRIX_COLS -#define MATRIX_ROWS 10 -#define MATRIX_COLS 5 - -#undef MATRIX_ROW_PINS -#undef MATRIX_COL_PINS -#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } -#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 } - -#define CATERINA_BOOTLOADER -#define USB_MAX_POWER_CONSUMPTION 50 - -/* Use I2C or Serial, not both */ - -#define USE_SERIAL -// #define USE_I2C - -/* Select hand configuration */ - -/* #define MASTER_LEFT */ -// #define MASTER_RIGHT -#define EE_HANDS - -/* ws2812 RGB LED */ -#undef RGBLED_NUM -#define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 50 -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/keymap.c b/keyboards/handwired/xeal60/keymaps/zer09/keymap.c deleted file mode 100644 index 8d0eaf1411..0000000000 --- a/keyboards/handwired/xeal60/keymaps/zer09/keymap.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "keymap.h" - -extern keymap_config_t keymap_config; - -#define _baseLayer LAYOUT( \ - KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, /**/KC_F, KC_G, KC_C, KC_R, KC_L, \ - CTL_T(KC_A), SFT_T(KC_O), ALT_T(KC_E), KC_U, KC_I, /**/KC_D, KC_H, ALT_T(KC_T), SFT_T(KC_N), CTL_T(KC_S), \ - KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, /**/KC_B, KC_M, KC_W, KC_V, KC_Z, \ - TD(DA_UPLY), MO(_VL), KC_TAB, KC_BSPACE, KC_ESC, /**/KC_INS, KC_HOME, KC_PGUP, MO(_VL), TD(DA_UPLY), \ - TD(DA_DWLY), TD(DA_LCTL), KC_SPC, TD(DA_LSPR), LSFT_T(KC_CAPS),/**/SFT_T(KC_CAPS), TD(DA_RALT), KC_ENT, TD(DA_RCTL), TD(DA_DWLY)) - -#define _upLayer LAYOUT( \ - KC_4, KC_5, KC_6, _______, _______,/**/ _______, KC_RBRC, _______, _______, _______, \ - LCTL_T(KC_1), LSFT_T(KC_2), LALT_T(KC_3), _______, _______,/**/ KC_LBRC, KC_BSLS, _______, _______, _______, \ - KC_7, KC_8, KC_9, KC_0, KC_GRV, /**/ KC_SLSH, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______,/**/ KC_DEL, KC_END, KC_PGDN, _______, _______, \ - _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) - -#define _downLayer LAYOUT( \ - KC_F4, KC_F5, KC_F6, KC_F12, _______,/**/ _______, KC_RPRN, _______, _______, _______, \ - LCTL_T(KC_F1), LSFT_T(KC_F2), LALT_T(KC_F3), KC_F11, _______,/**/ KC_LPRN, KC_EQUAL, KC_LEFT, KC_UP, KC_RIGHT, \ - KC_F7, KC_F8, KC_F9, KC_F10, _______,/**/ KC_MINUS, _______, _______, KC_DOWN, _______, \ - _______, _______, _______, _______, _______,/**/ KC_PSCR, KC_SLCK, KC_PAUSE, _______, _______, \ - _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) - -#define _astdLayer LAYOUT( \ - KC_MPRV, KC_MUTE, _______, _______, _______,/**/KC_PSCR, KC_SLCK, KC_PAUSE, _______, KC_RGUP, \ - KC_MPLY, KC_VOLD, _______, _______, _______,/**/_______, _______, _______, _______, KC_RGDWN, \ - KC_MNXT, KC_VOLU, RESET, _______, _______,/**/_______, _______, RESET, _______, _______, \ - _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = _baseLayer, - [_UL] = _upLayer, - [_DL] = _downLayer, - [_VL] = _upLayer, - [_AL] = _astdLayer}; diff --git a/keyboards/handwired/xeal60/keymaps/zer09/keymap.h b/keyboards/handwired/xeal60/keymaps/zer09/keymap.h deleted file mode 100644 index 03f8f480af..0000000000 --- a/keyboards/handwired/xeal60/keymaps/zer09/keymap.h +++ /dev/null @@ -1,32 +0,0 @@ -#include "lets_split.h" -#include "action_layer.h" -#include "eeconfig.h" -#include "tap_dance.h" -#include "zer09.h" - -#ifdef LAYOUT_ortho_4x12 -#undef LAYOUT_ortho_4x12 -#endif - -#ifdef LAYOUT -#undef LAYOUT -#define LAYOUT( \ - L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ - L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ - L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \ - L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \ - L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \ -) \ - { \ - { L00, L01, L02, L03, L04 }, \ - { L10, L11, L12, L13, L14 }, \ - { L20, L21, L22, L23, L24 }, \ - { L30, L31, L32, L33, L34 }, \ - { L40, L41, L42, L43, L44 }, \ - { R00, R01, R02, R03, R04 }, \ - { R10, R11, R12, R13, R14 }, \ - { R20, R21, R22, R23, R24 }, \ - { R30, R31, R32, R33, R34 }, \ - { R40, R41, R42, R43, R44 } \ - } -#endif diff --git a/keyboards/handwired/xeal60/keymaps/zer09/rules.mk b/keyboards/handwired/xeal60/keymaps/zer09/rules.mk deleted file mode 100644 index d8adc70882..0000000000 --- a/keyboards/handwired/xeal60/keymaps/zer09/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -RGBLIGHT_ENABLE = yes -TAP_DANCE_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif From 714e0da960c2251298234bcf2159f67dd060710a Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sun, 12 Aug 2018 21:27:51 +1000 Subject: [PATCH 0003/1763] Basic keymap (no FN). Compiles. --- keyboards/handwired/xeal60/i2c.c | 162 ------------- keyboards/handwired/xeal60/i2c.h | 49 ---- .../handwired/xeal60/keymaps/default/keymap.c | 226 ++++++------------ keyboards/handwired/xeal60/lets_split.c | 15 -- keyboards/handwired/xeal60/lets_split.h | 23 +- keyboards/handwired/xeal60/rev1/config.h | 41 ++-- keyboards/handwired/xeal60/rev1/rev1.h | 29 ++- keyboards/handwired/xeal60/rules.mk | 14 +- 8 files changed, 130 insertions(+), 429 deletions(-) delete mode 100644 keyboards/handwired/xeal60/i2c.c delete mode 100644 keyboards/handwired/xeal60/i2c.h diff --git a/keyboards/handwired/xeal60/i2c.c b/keyboards/handwired/xeal60/i2c.c deleted file mode 100644 index 084c890c40..0000000000 --- a/keyboards/handwired/xeal60/i2c.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "i2c.h" - -#ifdef USE_I2C - -// Limits the amount of we wait for any one i2c transaction. -// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is -// 9 bits, a single transaction will take around 90μs to complete. -// -// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit -// poll loop takes at least 8 clock cycles to execute -#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 - -#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) - -volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -static volatile uint8_t slave_buffer_pos; -static volatile bool slave_has_register_set = false; - -// Wait for an i2c operation to finish -inline static -void i2c_delay(void) { - uint16_t lim = 0; - while(!(TWCR & (1<10. - // Check datasheets for more info. - TWBR = ((F_CPU/SCL_CLOCK)-16)/2; -} - -// Start a transaction with the given i2c slave address. The direction of the -// transfer is set with I2C_READ and I2C_WRITE. -// returns: 0 => success -// 1 => error -uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< slave ACK -// 1 => slave NACK -uint8_t i2c_master_write(uint8_t data) { - TWDR = data; - TWCR = (1<= SLAVE_BUFFER_SIZE ) { - ack = 0; - slave_buffer_pos = 0; - } - slave_has_register_set = true; - } else { - i2c_slave_buffer[slave_buffer_pos] = TWDR; - BUFFER_POS_INC(); - } - break; - - case TW_ST_SLA_ACK: - case TW_ST_DATA_ACK: - // master has addressed this device as a slave transmitter and is - // requesting data. - TWDR = i2c_slave_buffer[slave_buffer_pos]; - BUFFER_POS_INC(); - break; - - case TW_BUS_ERROR: // something went wrong, reset twi state - TWCR = 0; - default: - break; - } - // Reset everything, so we are ready for the next TWI interrupt - TWCR |= (1< - -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -#define I2C_READ 1 -#define I2C_WRITE 0 - -#define I2C_ACK 1 -#define I2C_NACK 0 - -#define SLAVE_BUFFER_SIZE 0x10 - -// i2c SCL clock frequency -#define SCL_CLOCK 400000L - -extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -void i2c_master_init(void); -uint8_t i2c_master_start(uint8_t address); -void i2c_master_stop(void); -uint8_t i2c_master_write(uint8_t data); -uint8_t i2c_master_read(int); -void i2c_reset_state(void); -void i2c_slave_init(uint8_t address); - - -static inline unsigned char i2c_start_read(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_READ); -} - -static inline unsigned char i2c_start_write(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_WRITE); -} - -// from SSD1306 scrips -extern unsigned char i2c_rep_start(unsigned char addr); -extern void i2c_start_wait(unsigned char addr); -extern unsigned char i2c_readAck(void); -extern unsigned char i2c_readNak(void); -extern unsigned char i2c_read(unsigned char ack); - -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - -#endif diff --git a/keyboards/handwired/xeal60/keymaps/default/keymap.c b/keyboards/handwired/xeal60/keymaps/default/keymap.c index f782781843..84f84eaf22 100644 --- a/keyboards/handwired/xeal60/keymaps/default/keymap.c +++ b/keyboards/handwired/xeal60/keymaps/default/keymap.c @@ -7,148 +7,97 @@ extern keymap_config_t keymap_config; // 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 _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 +#define _NUMPAD 1 #define _RAISE 4 -#define _ADJUST 16 enum custom_keycodes { QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - LOWER, - RAISE, - ADJUST, + NUMPAD, + RAISE }; // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO +#define NP_STAR KC_KP_ASTERISK +#define NP_SLSH KC_KP_SLASH const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = LAYOUT_ortho_4x12( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), +/* + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |FN | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | NUM | Space | Space |Alt |FN |Menu |Ctrl | + * `-----------------------------------------------------------' + */ + /* Layer 0: Qwerty */ + [_QWERTY] = LAYOUT_split60( \ + 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, \ + RAISE, 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, NUMPAD, KC_SPC, KC_SPC, KC_RALT, RAISE, KC_MENU, KC_RCTL \ + ), -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | R | S | T | D | H | N | E | I | O | ' | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_COLEMAK] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), +/* + * ,-----------------------------------------------------------. + * | | | | | | | | | /| *| -| | | | + * |-----------------------------------------------------------| + * | | | | | | | | 7| 8| 9| +| | | | + * |-----------------------------------------------------------| + * | | | | | | | | 4| 5| 6|Bspc| |Return | + * |-----------------------------------------------------------| + * | | | | | | | | 1| 2| 3| .| | + * |-----------------------------------------------------------| + * | | | | QWE | | 0 | . | | | | + * `-----------------------------------------------------------' + */ -/* Dvorak - * ,-----------------------------------------------------------------------------------. - * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | O | E | U | I | D | H | T | N | S | / | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_DVORAK] = LAYOUT_ortho_4x12( \ - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), + /* Layer 1: Numpad */ + [_NUMPAD] = LAYOUT_split60( \ + _______, _______, _______, _______, _______, _______, _______, _______, NP_SLSH, NP_STAR, KC_MINUS, _______, _______, KC_BSPC, \ + _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_PLUS, _______, _______, KC_BSLS, \ + _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_BSPC, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, \ + _______, _______, _______, QWERTY, KC_SPC, KC_0, KC_DOT, RAISE, _______, _______ \ + ), -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = LAYOUT_ortho_4x12( \ - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = LAYOUT_ortho_4x12( \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), - -/* Adjust (Lower + Raise) - * ,-----------------------------------------------------------------------------------. - * | | Reset| | | | | | | | | | Del | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * `-----------------------------------------------------------------------------------' - */ -[_ADJUST] = LAYOUT_ortho_4x12( \ - _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -) +/* + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | | ^ | | | | |pUp| ^ |pDn| | | | | + * |-----------------------------------------------------------| + * | | < | v | > | | |Hom| < | v | > | | | | + * |-----------------------------------------------------------| + * | | | | | | |End| | | | | | + * |-----------------------------------------------------------| + * | | | | | | | | | | | + * `-----------------------------------------------------------' + */ + /* Layer 2: RAISE */ + [_RAISE] = LAYOUT_split60( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) }; #ifdef AUDIO_ENABLE float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_numpad[][2] = SONG(DVORAK_SOUND); #endif -void persistent_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) { switch (keycode) { case QWERTY: @@ -156,53 +105,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_SONG(tone_qwerty); #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); + default_layer_set(1UL<<_QWERTY); } return false; break; - case DVORAK: + case NUMPAD: if (record->event.pressed) { #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); + PLAY_SONG(tone_numpad); #endif - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - 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); + default_layer_set(1UL<<_NUMPAD); } return false; break; 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; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); } return false; break; diff --git a/keyboards/handwired/xeal60/lets_split.c b/keyboards/handwired/xeal60/lets_split.c index c400ab7bb8..3caa114c22 100644 --- a/keyboards/handwired/xeal60/lets_split.c +++ b/keyboards/handwired/xeal60/lets_split.c @@ -1,16 +1 @@ #include "lets_split.h" - -#ifdef SWAP_HANDS_ENABLE -__attribute__ ((weak)) -const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - - {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}, - {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}}, - {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}}, - {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}, - {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}}, - {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}, - {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}}, - {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}, -}; -#endif diff --git a/keyboards/handwired/xeal60/lets_split.h b/keyboards/handwired/xeal60/lets_split.h index bce0ecb199..0442982fae 100644 --- a/keyboards/handwired/xeal60/lets_split.h +++ b/keyboards/handwired/xeal60/lets_split.h @@ -5,27 +5,24 @@ #ifdef KEYBOARD_lets_split_rev1 #include "rev1.h" -#elif KEYBOARD_lets_split_rev2 - #include "rev2.h" -#elif KEYBOARD_lets_split_sockets - #include "sockets.h" #endif // Used to create a keymap using only KC_ prefixed keys #define LAYOUT_kc( \ - L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ - L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ - L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ - L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ + L00, L01, L02, L03, L04, L05, L06, L07, R00, R01, R02, R03, R04, R05, R06, R07, \ + L10, L11, L12, L13, L14, L15, L16, L17, R10, R11, R12, R13, R14, R15, R16, R17, \ + L20, L21, L22, L23, L24, L25, L26, L27, R20, R21, R22, R23, R24, R25, R26, R27, \ + L30, L31, L32, L33, L34, L35, L36, L37, R30, R31, R32, R33, R34, R35, R36, R37, \ + L40, L41, L42, L43, L44, L45, L46, L47, R40, R41, R42, R43, R44, R45, R46, R47 \ ) \ LAYOUT( \ - KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \ - KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \ - KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \ - KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \ + KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##L07, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, KC_##R07,\ + KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##L17, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, KC_##R17,\ + KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##L27, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, KC_##R27,\ + KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##L37, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, KC_##R37 \ ) -#define LAYOUT_kc_ortho_4x12 LAYOUT_kc +#define LAYOUT_XEAL LAYOUT_kc #endif diff --git a/keyboards/handwired/xeal60/rev1/config.h b/keyboards/handwired/xeal60/rev1/config.h index 73f90e715d..504b3fe8c6 100644 --- a/keyboards/handwired/xeal60/rev1/config.h +++ b/keyboards/handwired/xeal60/rev1/config.h @@ -22,22 +22,36 @@ along with this program. If not, see . #include "config_common.h" /* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x3060 +#define VENDOR_ID 0x4131 +#define PRODUCT_ID 0x5141 #define DEVICE_VER 0x0001 -#define MANUFACTURER Wootpatoot -#define PRODUCT Lets Split v1 -#define DESCRIPTION A split keyboard for the cheap makers +#define MANUFACTURER XeaLouS +#define PRODUCT XeaL60 +#define DESCRIPTION A split keyboard /* key matrix size */ // Rows are doubled-up -#define MATRIX_ROWS 8 -#define MATRIX_COLS 6 +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 // wiring of each half -#define MATRIX_ROW_PINS { B5, B4, E6, D7 } -#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } -// #define MATRIX_COL_PINS { B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order +//ascii art of pro micro +// PORT +//PD3 TX0 RAW +//PD2 RX1 GND +// GND RESET +// GND VCC +//PD1 2 A3 PF4 +//PD0 3 A2 PF5 +//PD4 4 A1 PF6 +//PC6 5 A0 PF7 +//PD7 6 15 PB1 +//PE6 7 14 PB3 +//PB4 8 13 PB2 +//PB5 9 10 PB6 + +#define MATRIX_ROW_PINS { B5, B4, E6, D7, C6 } +#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5 } /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST @@ -58,13 +72,6 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* ws2812 RGB LED */ -#define RGB_DI_PIN D3 -#define RGBLIGHT_TIMER -#define RGBLED_NUM 16 // Number of LEDs -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboards/handwired/xeal60/rev1/rev1.h b/keyboards/handwired/xeal60/rev1/rev1.h index 073d83ef34..8f25d7d2f2 100644 --- a/keyboards/handwired/xeal60/rev1/rev1.h +++ b/keyboards/handwired/xeal60/rev1/rev1.h @@ -9,22 +9,25 @@ //void promicro_bootloader_jmp(bool program); #define LAYOUT( \ - L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ - L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ - L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ - L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \ + L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ + L10, L11, L12, L13, L14, L15, L16, L17, R11, R12, R13, R14, R15, R16, \ + L20, L21, L22, L23, L24, L25, L26, R21, R22, R23, R24, R25, R26, \ + L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \ + L40, L41, L42, L43, L44, R42, R43, R44, R45, R46 \ ) \ { \ - { L00, L01, L02, L03, L04, L05 }, \ - { L10, L11, L12, L13, L14, L15 }, \ - { L20, L21, L22, L23, L24, L25 }, \ - { L30, L31, L32, L33, L34, L35 }, \ - { R00, R01, R02, R03, R04, R05 }, \ - { R10, R11, R12, R13, R14, R15 }, \ - { R20, R21, R22, R23, R24, R25 }, \ - { R30, R31, R32, R33, R34, R35 } \ + { L00, L01, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16, L17 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44 }, \ + { R00, R01, R02, R03, R04, R05, R06}, \ + { R11, R12, R13, R14, R15, R16 }, \ + { R21, R22, R23, R24, R25, R26 }, \ + { R31, R32, R33, R34, R35, R36 }, \ + { R42, R43, R44, R45, R46 } \ } -#define LAYOUT_ortho_4x12 LAYOUT +#define LAYOUT_split60 LAYOUT #endif diff --git a/keyboards/handwired/xeal60/rules.mk b/keyboards/handwired/xeal60/rules.mk index 951723edc5..6dde257ece 100644 --- a/keyboards/handwired/xeal60/rules.mk +++ b/keyboards/handwired/xeal60/rules.mk @@ -1,5 +1,4 @@ SRC += matrix.c \ - i2c.c \ split_util.c \ serial.c \ ssd1306.c @@ -53,20 +52,21 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +BOOTMAGIC_ENABLE = yes # 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 = yes # 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 +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 # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. SUBPROJECT_rev1 = yes -USE_I2C = yes +USE_I2C = no + # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From ac9b88e8ccbbf38762871504cd827ff0d941c426 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Sun, 12 Aug 2018 21:39:55 +1000 Subject: [PATCH 0004/1763] Removed NP_STAR and NP_SLSH. --- keyboards/handwired/xeal60/keymaps/default/keymap.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/keyboards/handwired/xeal60/keymaps/default/keymap.c b/keyboards/handwired/xeal60/keymaps/default/keymap.c index 84f84eaf22..d770d0c6a8 100644 --- a/keyboards/handwired/xeal60/keymaps/default/keymap.c +++ b/keyboards/handwired/xeal60/keymaps/default/keymap.c @@ -19,8 +19,6 @@ enum custom_keycodes { // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO -#define NP_STAR KC_KP_ASTERISK -#define NP_SLSH KC_KP_SLASH const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -61,11 +59,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 1: Numpad */ [_NUMPAD] = LAYOUT_split60( \ - _______, _______, _______, _______, _______, _______, _______, _______, NP_SLSH, NP_STAR, KC_MINUS, _______, _______, KC_BSPC, \ - _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_PLUS, _______, _______, KC_BSLS, \ - _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_BSPC, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, \ - _______, _______, _______, QWERTY, KC_SPC, KC_0, KC_DOT, RAISE, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_PSLS, KC_PAST, KC_MINUS, _______, _______, KC_BSPC, \ + _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_PLUS, _______, _______, KC_BSLS, \ + _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_BSPC, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, \ + _______, _______, _______, QWERTY, KC_SPC, KC_0, KC_DOT, RAISE, _______, _______ \ ), /* From 1950a145c7d7c14167c8192b850e6edbadf67dc7 Mon Sep 17 00:00:00 2001 From: Shihpin Tseng Date: Mon, 20 Aug 2018 02:16:06 +0800 Subject: [PATCH 0005/1763] Fix process_combo which assign -1 to uint16_t --- quantum/process_keycode/process_combo.c | 18 +++++++++--------- quantum/process_keycode/process_combo.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index 6e9c28e4fc..13f8bbb331 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c @@ -18,9 +18,6 @@ #include "print.h" -#define COMBO_TIMER_ELAPSED -1 - - __attribute__ ((weak)) combo_t key_combos[COMBO_COUNT] = { @@ -65,7 +62,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * if (-1 == (int8_t)index) return false; /* The combos timer is used to signal whether the combo is active */ - bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true; + bool is_combo_active = combo->is_active; if (record->event.pressed) { KEY_STATE_DOWN(index); @@ -73,9 +70,10 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * if (is_combo_active) { if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */ send_combo(combo->keycode, true); - combo->timer = COMBO_TIMER_ELAPSED; + combo->is_active = false; } else { /* Combo key was pressed */ combo->timer = timer_read(); + combo->is_active = true; #ifdef COMBO_ALLOW_ACTION_KEYS combo->prev_record = *record; #else @@ -99,6 +97,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * send_keyboard_report(); unregister_code16(keycode); #endif + combo->is_active = false; combo->timer = 0; } @@ -106,6 +105,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * } if (NO_COMBO_KEYS_ARE_DOWN) { + combo->is_active = true; combo->timer = 0; } @@ -132,14 +132,14 @@ void matrix_scan_combo(void) #pragma GCC diagnostic ignored "-Warray-bounds" combo_t *combo = &key_combos[i]; #pragma GCC diagnostic pop - if (combo->timer && - combo->timer != COMBO_TIMER_ELAPSED && + if (combo->is_active && + combo->timer && timer_elapsed(combo->timer) > COMBO_TERM) { - + /* This disables the combo, meaning key events for this * combo will be handled by the next processors in the chain */ - combo->timer = COMBO_TIMER_ELAPSED; + combo->is_active = false; #ifdef COMBO_ALLOW_ACTION_KEYS process_action(&combo->prev_record, diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index a5dbd788a4..a5787c9ed3 100644 --- a/quantum/process_keycode/process_combo.h +++ b/quantum/process_keycode/process_combo.h @@ -33,6 +33,7 @@ typedef struct uint8_t state; #endif uint16_t timer; + bool is_active; #ifdef COMBO_ALLOW_ACTION_KEYS keyrecord_t prev_record; #else From 3cf7f7322c24e3cab21d402f1a859b60df857603 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Wed, 29 Aug 2018 10:19:36 +1000 Subject: [PATCH 0006/1763] Removed "debounce_algo = manual" in all keyboards with CUSTOM_MATRIX = yes. --- quantum/matrix.c | 79 +----------- tmk_core/common.mk | 17 ++- tmk_core/common/debounce.c | 22 ++++ tmk_core/common/debounce.h | 21 ++++ tmk_core/common/debounce/debounce_eager_pk.c | 124 +++++++++++++++++++ tmk_core/common/debounce/debounce_sym_g.c | 59 +++++++++ tmk_core/common/debounce/readme.md | 28 +++++ tmk_core/common/keyboard.c | 22 +--- 8 files changed, 279 insertions(+), 93 deletions(-) create mode 100644 tmk_core/common/debounce.c create mode 100644 tmk_core/common/debounce.h create mode 100644 tmk_core/common/debounce/debounce_eager_pk.c create mode 100644 tmk_core/common/debounce/debounce_sym_g.c create mode 100644 tmk_core/common/debounce/readme.md diff --git a/quantum/matrix.c b/quantum/matrix.c index 3600d4e7b5..bc7eb6b585 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -27,17 +27,6 @@ along with this program. If not, see . #include "timer.h" -/* Set 0 if debouncing isn't needed */ - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 -#endif - -#if (DEBOUNCING_DELAY > 0) - static uint16_t debouncing_time; - static bool debouncing = false; -#endif - #if (MATRIX_COLS <= 8) # define print_matrix_header() print("\nr/c 01234567\n") # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) @@ -67,8 +56,6 @@ static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - #if (DIODE_DIRECTION == COL2ROW) static void init_cols(void); @@ -122,30 +109,6 @@ uint8_t matrix_cols(void) { return MATRIX_COLS; } -// void matrix_power_up(void) { -// #if (DIODE_DIRECTION == COL2ROW) -// for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { -// /* DDRxn */ -// _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF); -// toggle_row(r); -// } -// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { -// /* PORTxn */ -// _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF); -// } -// #elif (DIODE_DIRECTION == ROW2COL) -// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { -// /* DDRxn */ -// _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF); -// toggle_col(c); -// } -// for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { -// /* PORTxn */ -// _SFR_IO8((row_pins[r] >> 4) + 2) |= _BV(row_pins[r] & 0xF); -// } -// #endif -// } - void matrix_init(void) { // initialize row and col @@ -160,7 +123,6 @@ void matrix_init(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; } matrix_init_quantum(); @@ -170,59 +132,24 @@ uint8_t matrix_scan(void) { #if (DIODE_DIRECTION == COL2ROW) - // Set row, read cols for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row); - - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } - -# else - read_cols_on_row(matrix, current_row); -# endif - + read_cols_on_row(matrix, current_row); } - #elif (DIODE_DIRECTION == ROW2COL) - // Set col, read rows for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col); - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } -# else - read_rows_on_col(matrix, current_col); -# endif - + read_rows_on_col(matrix, current_col); } - #endif -# if (DEBOUNCING_DELAY > 0) - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - debouncing = false; - } -# endif - matrix_scan_quantum(); return 1; } +//Deprecated. bool matrix_is_modified(void) { -#if (DEBOUNCING_DELAY > 0) - if (debouncing) return false; -#endif return true; } diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 3e407f1573..72b2d3cc86 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -1,4 +1,5 @@ COMMON_DIR = common +DEBOUNCE = $(COMMON_DIR)/debounce ifeq ($(PLATFORM),AVR) PLATFORM_COMMON_DIR = $(COMMON_DIR)/avr else ifeq ($(PLATFORM),CHIBIOS) @@ -9,6 +10,7 @@ endif TMK_COMMON_SRC += $(COMMON_DIR)/host.c \ $(COMMON_DIR)/keyboard.c \ + $(COMMON_DIR)/debounce.c \ $(COMMON_DIR)/action.c \ $(COMMON_DIR)/action_tapping.c \ $(COMMON_DIR)/action_macro.c \ @@ -39,7 +41,20 @@ ifeq ($(PLATFORM),TEST) TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c endif - +# Debounce Modules. If implemented in matrix.c, don't use these. +ifeq ($(strip $(CUSTOM_MATRIX)), yes) + # Do nothing. Custom matrix code. +else ifeq ($(strip $(SPLIT_KEYBOARD)), yes) + # Do nothing, debouncing is inside matrix.c inside split_common +else ifeq ($(strip $(DEBOUNCE_ALGO)), manual) + # Do nothing. do your debouncing in matrix.c +else ifeq ($(strip $(DEBOUNCE_ALGO)), sym_g) + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c +else ifeq ($(strip $(DEBOUNCE_ALGO)), eager_pk) + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_eager_pk.c +else # default algorithm + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c +endif # Option modules ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes) diff --git a/tmk_core/common/debounce.c b/tmk_core/common/debounce.c new file mode 100644 index 0000000000..406d2d0f38 --- /dev/null +++ b/tmk_core/common/debounce.c @@ -0,0 +1,22 @@ +/* +Copyright 2017 Alex Ong +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 . +*/ +#include "debounce.h" +#include "matrix.h" +//Default implementation - no debouncing +__attribute__((weak)) void matrix_debounce_init(void) {} +__attribute__((weak)) void matrix_debounce(void) {} +__attribute__((weak)) matrix_row_t matrix_debounce_get_row(uint8_t row) +{ + return matrix_get_row(row); +} diff --git a/tmk_core/common/debounce.h b/tmk_core/common/debounce.h new file mode 100644 index 0000000000..fe3effab32 --- /dev/null +++ b/tmk_core/common/debounce.h @@ -0,0 +1,21 @@ +#ifndef DEBOUNCE_H +#define DEBOUNCE_H +#include +#include +#include "matrix.h" +#ifdef __cplusplus +extern "C" { +#endif + /* called to initialize any data stores your implementation has*/ + void matrix_debounce_init(void); + /* call this every keyboard_task to debounce the matrix*/ + void matrix_debounce(void); + /* matrix state on row */ + matrix_row_t matrix_debounce_get_row(uint8_t row); + /* whether a switch is on */ + bool matrix_debounce_is_on(uint8_t row, uint8_t col); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tmk_core/common/debounce/debounce_eager_pk.c b/tmk_core/common/debounce/debounce_eager_pk.c new file mode 100644 index 0000000000..984da0570a --- /dev/null +++ b/tmk_core/common/debounce/debounce_eager_pk.c @@ -0,0 +1,124 @@ +/* +Copyright 2017 Alex Ong +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 . +*/ + +/* +Basic per-key algorithm. Uses an 8-bit counter per key. +After pressing a key, it immediately changes state, and sets a counter. +No further inputs are accepted until DEBOUNCE milliseconds have occurred. +*/ + +#include "debounce.h" +#include "matrix.h" +#include "timer.h" + +#ifndef DEBOUNCE + #define DEBOUNCE 5 +#endif + + +#if (MATRIX_COLS <= 8) +# define ROW_SHIFTER ((uint8_t)1) +#elif (MATRIX_COLS <= 16) +# define ROW_SHIFTER ((uint16_t)1) +#elif (MATRIX_COLS <= 32) +# define ROW_SHIFTER ((uint32_t)1) +#endif + + + +#define debounce_counter_t uint8_t + +static matrix_row_t matrix_debounced[MATRIX_ROWS]; +static debounce_counter_t debounce_counters[MATRIX_ROWS*MATRIX_COLS]; + +#define DEBOUNCE_ELAPSED 251 +#define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) + +void update_debounce_counters(uint8_t current_time); +void transfer_matrix_values(uint8_t current_time); + +void matrix_debounce_init(void) +{ + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + matrix_debounced[r] = 0; + } + + int i = 0; + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + for (uint8_t c = 0; c < MATRIX_COLS; c++) + { + debounce_counters[i++] = DEBOUNCE_ELAPSED; + } + } +} + +void matrix_debounce(void) +{ + uint8_t current_time = timer_read() % MAX_DEBOUNCE; + update_debounce_counters(current_time); + transfer_matrix_values(current_time); +} + +//If the current time is > debounce counter, set the counter to enable input. +void update_debounce_counters(uint8_t current_time) +{ + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < MATRIX_ROWS; row++) + { + for (uint8_t col = 0; col < MATRIX_COLS; col++) + { + if (*debounce_pointer != DEBOUNCE_ELAPSED) + { + if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= + DEBOUNCING_DELAY) { + *debounce_pointer = DEBOUNCE_ELAPSED; + } + } + debounce_pointer++; + } + } +} + +// upload from raw_matrix to final matrix; +void transfer_matrix_values(uint8_t current_time) +{ + debounce_counter_t *debounce_pointer = debounce_counters; + for (uint8_t row = 0; row < MATRIX_ROWS; row++) + { + matrix_row_t existing_row = matrix_debounced[row]; + matrix_row_t raw_row = matrix_get_row(row); + + for (uint8_t col = 0; col < MATRIX_COLS; col++) + { + matrix_row_t col_mask = (ROW_SHIFTER << col); + bool final_value = raw_row & col_mask; + bool existing_value = existing_row & col_mask; + if (*debounce_pointer == DEBOUNCE_ELAPSED && + (existing_value != final_value)) + { + *debounce_pointer = current_time; + existing_row ^= col_mask; //flip the bit. + } + debounce_pointer++; + } + matrix_debounced[row] = existing_row; + } +} + +matrix_row_t matrix_debounce_get_row(uint8_t row) +{ + return matrix_debounced[row]; +} diff --git a/tmk_core/common/debounce/debounce_sym_g.c b/tmk_core/common/debounce/debounce_sym_g.c new file mode 100644 index 0000000000..2fb7a589d7 --- /dev/null +++ b/tmk_core/common/debounce/debounce_sym_g.c @@ -0,0 +1,59 @@ +/* +Copyright 2017 Alex Ong +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 . +*/ + +/* +Basic global debounce algorithm. Used in 99% of keyboards at time of implementation +When no state changes have occured for DEBOUNCE milliseconds, we push the state. +*/ +#include "debounce.h" +#include "matrix.h" +#include "timer.h" +#ifndef DEBOUNCE + #define DEBOUNCE 5 +#endif +static matrix_row_t matrix_debounced[MATRIX_ROWS]; +static bool debouncing = false; +static uint16_t debouncing_time; + +void matrix_debounce_init(void) +{ + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + matrix_debounced[r] = 0; + } +} + +void matrix_debounce(void) +{ + for (uint8_t r = 0; r < MATRIX_ROWS; r++) + { + matrix_row_t raw = matrix_get_row(r); + if (raw != matrix_debounced[r]) + { + debouncing = true; + debouncing_time = timer_read(); + } + } + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int i = 0; i < MATRIX_ROWS; i++) { + matrix_debounced[i] = matrix_get_row(i); + } + debouncing = false; + } +} + +matrix_row_t matrix_debounce_get_row(uint8_t row) +{ + return matrix_debounced[row]; +} diff --git a/tmk_core/common/debounce/readme.md b/tmk_core/common/debounce/readme.md new file mode 100644 index 0000000000..1a77d44df5 --- /dev/null +++ b/tmk_core/common/debounce/readme.md @@ -0,0 +1,28 @@ +Debounce algorithms belong in this folder. +Here are a few ideas + +1) Global vs Per-Key vs Per-Row + * Global - one timer for all keys. Any key change state affects global timer + * Per key - one timer per key + * Per row - one timer per row + +2) Eager vs symmetric vs assymetric + * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored. + * Symmetric - wait for no changes for DEBOUNCE ms before reporting change + * Assymetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up. + +3) Timestamp vs cycles + * old old old code waits n cycles, decreasing count by one each matrix_scan + * newer code stores the millisecond the change occurred, and does subraction to figure out time elapsed. + * Timestamps are superior, i don't think cycles will ever be used again once upgraded. + +The default algorithm is symmetric and global. +Here are a few that could be implemented: + +debounce_sym_g.c +debounce_sym_pk.c +debounce_sym_pr.c +debounce_sym_pr_cycles.c //currently used in ergo-dox +debounce_eager_g.c +debounce_eager_pk.c +debounce_eager_pr.c //could be used in ergo-dox! diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 13b3cb4c0c..fe626efb35 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include #include "keyboard.h" #include "matrix.h" +#include "debounce.h" #include "keymap.h" #include "host.h" #include "led.h" @@ -157,6 +158,7 @@ void keyboard_init(void) { MCUCR |= _BV(JTD); #endif matrix_init(); + matrix_debounce_init(); #ifdef PS2_MOUSE_ENABLE ps2_mouse_init(); #endif @@ -206,9 +208,6 @@ void keyboard_init(void) { void keyboard_task(void) { static matrix_row_t matrix_prev[MATRIX_ROWS]; -#ifdef MATRIX_HAS_GHOST - // static matrix_row_t matrix_ghost[MATRIX_ROWS]; -#endif static uint8_t led_status = 0; matrix_row_t matrix_row = 0; matrix_row_t matrix_change = 0; @@ -217,24 +216,15 @@ void keyboard_task(void) #endif matrix_scan(); + matrix_debounce(); + if (is_keyboard_master()) { for (uint8_t r = 0; r < MATRIX_ROWS; r++) { - matrix_row = matrix_get_row(r); + matrix_row = matrix_debounce_get_row(r); matrix_change = matrix_row ^ matrix_prev[r]; if (matrix_change) { #ifdef MATRIX_HAS_GHOST - if (has_ghost_in_row(r, matrix_row)) { - /* Keep track of whether ghosted status has changed for - * debugging. But don't update matrix_prev until un-ghosted, or - * the last key would be lost. - */ - //if (debug_matrix && matrix_ghost[r] != matrix_row) { - // matrix_print(); - //} - //matrix_ghost[r] = matrix_row; - continue; - } - //matrix_ghost[r] = matrix_row; + if (has_ghost_in_row(r, matrix_row)) continue; #endif if (debug_matrix) matrix_print(); for (uint8_t c = 0; c < MATRIX_COLS; c++) { From 4db27a2c7614c0aa5a0b46d8e1f5c5cc8216fd1c Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Wed, 29 Aug 2018 10:45:53 +1000 Subject: [PATCH 0007/1763] Changed order of rules in TMK. Documented feature. --- docs/feature_debounce_algo.md | 51 +++++++++++++++++++++++++++++++++++ tmk_core/common.mk | 6 ++--- 2 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 docs/feature_debounce_algo.md diff --git a/docs/feature_debounce_algo.md b/docs/feature_debounce_algo.md new file mode 100644 index 0000000000..7dcfec4a80 --- /dev/null +++ b/docs/feature_debounce_algo.md @@ -0,0 +1,51 @@ +# Debounce algorithm + +QMK supports multiple debounce algorithms through its debounce API. + +The underlying debounce algorithm is determined by which matrix.c file you are using. + +The logic for which debounce method called is below. It checks various defines that you have set in rules.mk + +``` +ifeq ($(strip $(SPLIT_KEYBOARD)), yes) + # Do nothing, debouncing is inside matrix.c inside split_common +else ifeq ($(strip $(DEBOUNCE_ALGO)), manual) + # Do nothing. do your debouncing in matrix.c +else ifeq ($(strip $(DEBOUNCE_ALGO)), sym_g) + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c +else ifeq ($(strip $(DEBOUNCE_ALGO)), eager_pk) + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_eager_pk.c +else ifeq ($(strip $(CUSTOM_MATRIX)), yes) + # Do nothing. Custom matrix code. +else # default algorithm + TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c +endif +``` +# Debounce selection +The following is for keyboards where ```SPLIT_KEYBOARD``` is not defined as ```YES``` +| DEBOUNCE_ALGO | CUSTOM_MATRIX | Description | What to do | +| ------------- | -------------| --------------------------------------------------- | ----------------------------- | +| Not defined | Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g used. | +| manual | Not defined | You are using the included matrix.c but your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions | +| sym_g / eager_pk | Not defined | You are using the included matrix.c and debounce.c | Nothing. Chosen debounce method used. | +| Not defined | YES | You have your own matrix.c, and your own debounce | Write the fully debounced matrix into matrix.c's matrix | +| manual | YES | Same as above | same as above | +| sym_g/ eager_pk | YES | You are using your own matrix.c, but included debounce | Write the raw matrix values into matrix.c's matrix | + +Note: +If ```SPLIT_KEYBOARD = YES``` is defined, the algorithm inside split_common will be used. +A future pull request will fix this to use the debounce.c code. + +# Use your own debouncing code +* Set ```DEBOUNCE_ALGO = manual```. +* Add ```SRC += debounce.c``` +* Add your own ```debounce.c```. Look at included debounce.c's for sample implementations. +* Debouncing occurs after every raw matrix scan. + +# Changing between included debouncing methods +You can either use your own code, by including your own debounce.c, or switch to another included one. +Included debounce methods are: +* debounce_eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key +* debounce_sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed. + + diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 72b2d3cc86..85f903fdae 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -42,9 +42,7 @@ ifeq ($(PLATFORM),TEST) endif # Debounce Modules. If implemented in matrix.c, don't use these. -ifeq ($(strip $(CUSTOM_MATRIX)), yes) - # Do nothing. Custom matrix code. -else ifeq ($(strip $(SPLIT_KEYBOARD)), yes) +ifeq ($(strip $(SPLIT_KEYBOARD)), yes) # Do nothing, debouncing is inside matrix.c inside split_common else ifeq ($(strip $(DEBOUNCE_ALGO)), manual) # Do nothing. do your debouncing in matrix.c @@ -52,6 +50,8 @@ else ifeq ($(strip $(DEBOUNCE_ALGO)), sym_g) TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c else ifeq ($(strip $(DEBOUNCE_ALGO)), eager_pk) TMK_COMMON_SRC += $(DEBOUNCE)/debounce_eager_pk.c +else ifeq ($(strip $(CUSTOM_MATRIX)), yes) + # Do nothing. Custom matrix code. else # default algorithm TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c endif From e8e6268765b052a6f6b53d34f0d8afb200989ba7 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Wed, 29 Aug 2018 10:48:11 +1000 Subject: [PATCH 0008/1763] Fixed missing whitespace in debounce documentation Table wasn't working due to missing newline. --- docs/feature_debounce_algo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/feature_debounce_algo.md b/docs/feature_debounce_algo.md index 7dcfec4a80..9809bd1bf2 100644 --- a/docs/feature_debounce_algo.md +++ b/docs/feature_debounce_algo.md @@ -23,6 +23,7 @@ endif ``` # Debounce selection The following is for keyboards where ```SPLIT_KEYBOARD``` is not defined as ```YES``` + | DEBOUNCE_ALGO | CUSTOM_MATRIX | Description | What to do | | ------------- | -------------| --------------------------------------------------- | ----------------------------- | | Not defined | Not defined | You are using the included matrix.c and debounce.c | Nothing. Debounce_sym_g used. | From a55c838961c89097ab849ed6cb1f261791e6b9b4 Mon Sep 17 00:00:00 2001 From: Alex Ong Date: Wed, 29 Aug 2018 10:49:53 +1000 Subject: [PATCH 0009/1763] Added bold in a few areas. --- docs/feature_debounce_algo.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/feature_debounce_algo.md b/docs/feature_debounce_algo.md index 9809bd1bf2..2c694cdfbd 100644 --- a/docs/feature_debounce_algo.md +++ b/docs/feature_debounce_algo.md @@ -21,8 +21,9 @@ else # default algorithm TMK_COMMON_SRC += $(DEBOUNCE)/debounce_sym_g.c endif ``` + # Debounce selection -The following is for keyboards where ```SPLIT_KEYBOARD``` is not defined as ```YES``` +The following is for keyboards where ```SPLIT_KEYBOARD``` is **not** defined as ```YES``` | DEBOUNCE_ALGO | CUSTOM_MATRIX | Description | What to do | | ------------- | -------------| --------------------------------------------------- | ----------------------------- | @@ -33,7 +34,7 @@ The following is for keyboards where ```SPLIT_KEYBOARD``` is not defined as ```Y | manual | YES | Same as above | same as above | | sym_g/ eager_pk | YES | You are using your own matrix.c, but included debounce | Write the raw matrix values into matrix.c's matrix | -Note: +**Note**: If ```SPLIT_KEYBOARD = YES``` is defined, the algorithm inside split_common will be used. A future pull request will fix this to use the debounce.c code. From 5779ffb59a2e36fd45c3d4000d41ad73ad140de3 Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Thu, 1 Nov 2018 21:49:18 -0700 Subject: [PATCH 0010/1763] Set the executable bit for sh scripts under util. --- util/activate_msys2.sh | 0 util/activate_wsl.sh | 0 util/freebsd_install.sh | 0 util/generate_internal_docs.sh | 0 util/msys2_install.sh | 0 util/travis_build.sh | 0 util/travis_compiled_push.sh | 0 util/travis_docs.sh | 0 util/travis_push.sh | 0 util/win_shared_install.sh | 0 util/wsl_install.sh | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 util/activate_msys2.sh mode change 100644 => 100755 util/activate_wsl.sh mode change 100644 => 100755 util/freebsd_install.sh mode change 100644 => 100755 util/generate_internal_docs.sh mode change 100644 => 100755 util/msys2_install.sh mode change 100644 => 100755 util/travis_build.sh mode change 100644 => 100755 util/travis_compiled_push.sh mode change 100644 => 100755 util/travis_docs.sh mode change 100644 => 100755 util/travis_push.sh mode change 100644 => 100755 util/win_shared_install.sh mode change 100644 => 100755 util/wsl_install.sh diff --git a/util/activate_msys2.sh b/util/activate_msys2.sh old mode 100644 new mode 100755 diff --git a/util/activate_wsl.sh b/util/activate_wsl.sh old mode 100644 new mode 100755 diff --git a/util/freebsd_install.sh b/util/freebsd_install.sh old mode 100644 new mode 100755 diff --git a/util/generate_internal_docs.sh b/util/generate_internal_docs.sh old mode 100644 new mode 100755 diff --git a/util/msys2_install.sh b/util/msys2_install.sh old mode 100644 new mode 100755 diff --git a/util/travis_build.sh b/util/travis_build.sh old mode 100644 new mode 100755 diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh old mode 100644 new mode 100755 diff --git a/util/travis_docs.sh b/util/travis_docs.sh old mode 100644 new mode 100755 diff --git a/util/travis_push.sh b/util/travis_push.sh old mode 100644 new mode 100755 diff --git a/util/win_shared_install.sh b/util/win_shared_install.sh old mode 100644 new mode 100755 diff --git a/util/wsl_install.sh b/util/wsl_install.sh old mode 100644 new mode 100755 From a5fa75fcb3de822f4e43dcf29cee6eb9f945a992 Mon Sep 17 00:00:00 2001 From: Danny Nguyen Date: Fri, 2 Nov 2018 15:28:16 -0400 Subject: [PATCH 0011/1763] Move disable JTAG code from `keyboard_init` to `keyboard_setup` This way all split keyboards are using that code instead of just those using split_common with the fix --- quantum/split_common/matrix.c | 6 ------ quantum/split_common/split_util.c | 14 -------------- tmk_core/common/keyboard.c | 14 +++++++++----- tmk_core/common/keyboard.h | 2 ++ 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c index ff6738b58f..d6359b51fb 100644 --- a/quantum/split_common/matrix.c +++ b/quantum/split_common/matrix.c @@ -128,12 +128,6 @@ uint8_t matrix_cols(void) void matrix_init(void) { -#ifdef DISABLE_JTAG - // JTAG disable for PORT F. write JTD bit twice within four cycles. - MCUCR |= (1< Date: Fri, 2 Nov 2018 15:55:54 -0400 Subject: [PATCH 0012/1763] Remove old declaration Co-Authored-By: nooges --- quantum/split_common/split_util.c | 1 - 1 file changed, 1 deletion(-) diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 7d1d7ee047..56077e4f20 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -92,7 +92,6 @@ void split_keyboard_setup(void) { sei(); } -void disable_JTAG(void); void keyboard_slave_loop(void) { matrix_init(); From 563fe23e53fb747f509b8558bb29bde0baf2d6a8 Mon Sep 17 00:00:00 2001 From: patrickmt <40182064+patrickmt@users.noreply.github.com> Date: Tue, 30 Oct 2018 12:23:57 -0400 Subject: [PATCH 0013/1763] Fix CTRL/ALT keyboard does not wake computer from sleep Fix for Massdrop CTRL and ALT keyboards not waking computer from sleep --- tmk_core/protocol/arm_atsam/main_arm_atsam.c | 30 +++++++++++++------- tmk_core/protocol/arm_atsam/usb/udc.h | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index 54d056a14e..d3dc272ee0 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c @@ -62,6 +62,12 @@ void send_keyboard(report_keyboard_t *report) { uint32_t irqflags; + if (usb_state == USB_STATE_POWERDOWN) + { + udc_remotewakeup(); + return; + } + #ifdef NKRO_ENABLE if (!keymap_config.nkro) { @@ -156,25 +162,27 @@ void send_consumer(uint16_t data) } uint8_t g_drvid; +uint8_t g_usb_sleeping = 0; void main_subtask_usb_state(void) { if (usb_state == USB_STATE_POWERDOWN) { - uint32_t timer_led = timer_read32(); - - led_on; - if (led_enabled) + if (!g_usb_sleeping) { - for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) + g_usb_sleeping = 1; + if (led_enabled) { - I2C3733_Control_Set(0); + for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) + { + I2C3733_Control_Set(0); + } } } - while (usb_state == USB_STATE_POWERDOWN) - { - if (timer_read32() - timer_led > 1000) led_off; //Good to indicate went to sleep, but only for a second - } + } + else if (g_usb_sleeping) + { + g_usb_sleeping = 0; if (led_enabled) { for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) @@ -182,12 +190,12 @@ void main_subtask_usb_state(void) I2C3733_Control_Set(1); } } - led_off; } } void main_subtask_led(void) { + if (g_usb_sleeping) return; led_matrix_task(); } diff --git a/tmk_core/protocol/arm_atsam/usb/udc.h b/tmk_core/protocol/arm_atsam/usb/udc.h index c88a442cb6..33335d1869 100644 --- a/tmk_core/protocol/arm_atsam/usb/udc.h +++ b/tmk_core/protocol/arm_atsam/usb/udc.h @@ -210,7 +210,7 @@ static inline void udc_detach(void) /*! \brief The USB driver sends a resume signal called \e "Upstream Resume" * This is authorized only when the remote wakeup feature is enabled by host. */ -static inline void udc_remotewakeup(void) +inline void udc_remotewakeup(void) { udd_send_remotewakeup(); } From cec203ea80c8e9365bb5f43418fba5971dd4091f Mon Sep 17 00:00:00 2001 From: patrickmt <40182064+patrickmt@users.noreply.github.com> Date: Fri, 2 Nov 2018 15:30:51 -0400 Subject: [PATCH 0014/1763] USB Suspend for arm_atsam protocol Rewrote USB state tracking for implementation of suspend state. Updated suspend.c in entirety. Main subtasks (generally hardware related) are now run prior to keyboard task. --- tmk_core/common/arm_atsam/suspend.c | 90 +++++++++++++++++--- tmk_core/protocol/arm_atsam/i2c_master.c | 5 +- tmk_core/protocol/arm_atsam/main_arm_atsam.c | 80 ++++++++++------- tmk_core/protocol/arm_atsam/usb/ui.c | 8 +- tmk_core/protocol/arm_atsam/usb/ui.h | 6 -- 5 files changed, 136 insertions(+), 53 deletions(-) diff --git a/tmk_core/common/arm_atsam/suspend.c b/tmk_core/common/arm_atsam/suspend.c index 01d1930ea5..e34965df64 100644 --- a/tmk_core/common/arm_atsam/suspend.c +++ b/tmk_core/common/arm_atsam/suspend.c @@ -1,17 +1,85 @@ -/* Copyright 2017 Fred Sundvik +#include "matrix.h" +#include "i2c_master.h" +#include "led_matrix.h" +#include "suspend.h" + +/** \brief Suspend idle * - * 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. + * FIXME: needs doc + */ +void suspend_idle(uint8_t time) { + /* Note: Not used anywhere currently */ +} + +/** \brief Run user level Power down * - * 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. + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_power_down_user (void) { + +} + +/** \brief Run keyboard level Power down + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_power_down_kb(void) { + suspend_power_down_user(); +} + +/** \brief Suspend power down + * + * FIXME: needs doc + */ +void suspend_power_down(void) +{ + I2C3733_Control_Set(0); //Disable LED driver + + suspend_power_down_kb(); +} + +__attribute__ ((weak)) void matrix_power_up(void) {} +__attribute__ ((weak)) void matrix_power_down(void) {} +bool suspend_wakeup_condition(void) { + matrix_power_up(); + matrix_scan(); + matrix_power_down(); + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { + if (matrix_get_row(r)) return true; + } + return false; +} + +/** \brief run user level code immediately after wakeup + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_wakeup_init_user(void) { + +} + +/** \brief run keyboard level code immediately after wakeup + * + * FIXME: needs doc + */ +__attribute__ ((weak)) +void suspend_wakeup_init_kb(void) { + suspend_wakeup_init_user(); +} + +/** \brief run immediately after wakeup * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * FIXME: needs doc */ +void suspend_wakeup_init(void) { + /* If LEDs are set to enabled, enable the hardware */ + if (led_enabled) { + I2C3733_Control_Set(1); + } + suspend_wakeup_init_kb(); +} diff --git a/tmk_core/protocol/arm_atsam/i2c_master.c b/tmk_core/protocol/arm_atsam/i2c_master.c index 4f5a79e89f..ece9ee5db8 100644 --- a/tmk_core/protocol/arm_atsam/i2c_master.c +++ b/tmk_core/protocol/arm_atsam/i2c_master.c @@ -261,8 +261,9 @@ uint8_t I2C3733_Init_Control(void) { DBGC(DC_I2C3733_INIT_CONTROL_BEGIN); - srdata.bit.SDB_N = 1; - SPI_WriteSRData(); + //Hardware state shutdown on boot + //USB state machine will enable driver when communication is ready + I2C3733_Control_Set(0); CLK_delay_ms(1); diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index d3dc272ee0..13034a05d1 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c @@ -31,6 +31,8 @@ along with this program. If not, see . //From keyboard's directory #include "config_led.h" +uint8_t g_usb_state = USB_FSMSTATUS_FSMSTATE_OFF_Val; //Saved USB state from hardware value to detect changes + void main_subtasks(void); uint8_t keyboard_leds(void); void send_keyboard(report_keyboard_t *report); @@ -62,12 +64,6 @@ void send_keyboard(report_keyboard_t *report) { uint32_t irqflags; - if (usb_state == USB_STATE_POWERDOWN) - { - udc_remotewakeup(); - return; - } - #ifdef NKRO_ENABLE if (!keymap_config.nkro) { @@ -161,41 +157,56 @@ void send_consumer(uint16_t data) #endif //EXTRAKEY_ENABLE } -uint8_t g_drvid; -uint8_t g_usb_sleeping = 0; - void main_subtask_usb_state(void) { - if (usb_state == USB_STATE_POWERDOWN) + static uint32_t fsmstate_on_delay = 0; //Delay timer to be sure USB is actually operating before bringing up hardware + uint8_t fsmstate_now = USB->DEVICE.FSMSTATUS.reg; //Current state from hardware register + + if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) //If USB SUSPENDED { - if (!g_usb_sleeping) + fsmstate_on_delay = 0; //Clear ON delay timer + + if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SUSPEND_Val) //If previously not SUSPENDED { - g_usb_sleeping = 1; - if (led_enabled) - { - for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) - { - I2C3733_Control_Set(0); - } - } + suspend_power_down(); //Run suspend routine + g_usb_state = fsmstate_now; //Save current USB state } } - else if (g_usb_sleeping) + else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_SLEEP_Val) //Else if USB SLEEPING { - g_usb_sleeping = 0; - if (led_enabled) + fsmstate_on_delay = 0; //Clear ON delay timer + + if (g_usb_state != USB_FSMSTATUS_FSMSTATE_SLEEP_Val) //If previously not SLEEPING { - for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) + suspend_power_down(); //Run suspend routine + g_usb_state = fsmstate_now; //Save current USB state + } + } + else if (fsmstate_now == USB_FSMSTATUS_FSMSTATE_ON_Val) //Else if USB ON + { + if (g_usb_state != USB_FSMSTATUS_FSMSTATE_ON_Val) //If previously not ON + { + if (fsmstate_on_delay == 0) //If ON delay timer is cleared { - I2C3733_Control_Set(1); + fsmstate_on_delay = CLK_get_ms() + 250; //Set ON delay timer + } + else if (CLK_get_ms() > fsmstate_on_delay) //Else if ON delay timer is active and timed out + { + suspend_wakeup_init(); //Run wakeup routine + g_usb_state = fsmstate_now; //Save current USB state } } } + else //Else if USB is in a state not being tracked + { + fsmstate_on_delay = 0; //Clear ON delay timer + } } void main_subtask_led(void) { - if (g_usb_sleeping) return; + if (g_usb_state != USB_FSMSTATUS_FSMSTATE_ON_Val) return; //Only run LED tasks if USB is operating + led_matrix_task(); } @@ -275,8 +286,8 @@ int main(void) i2c_led_q_init(); - for (g_drvid = 0; g_drvid < ISSI3733_DRIVER_COUNT; g_drvid++) - I2C_LED_Q_ONOFF(g_drvid); //Queue data + for (uint8_t drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++) + I2C_LED_Q_ONOFF(drvid); //Queue data keyboard_setup(); @@ -294,10 +305,21 @@ int main(void) while (1) { - keyboard_task(); - main_subtasks(); //Note these tasks will also be run while waiting for USB keyboard polling intervals + if (g_usb_state == USB_FSMSTATUS_FSMSTATE_SUSPEND_Val || g_usb_state == USB_FSMSTATUS_FSMSTATE_SLEEP_Val) + { + if (suspend_wakeup_condition()) + { + udc_remotewakeup(); //Send remote wakeup signal + wait_ms(50); + } + + continue; + } + + keyboard_task(); + #ifdef CONSOLE_ENABLE if (CLK_get_ms() > next_print) { diff --git a/tmk_core/protocol/arm_atsam/usb/ui.c b/tmk_core/protocol/arm_atsam/usb/ui.c index 031678b643..70a6191098 100644 --- a/tmk_core/protocol/arm_atsam/usb/ui.c +++ b/tmk_core/protocol/arm_atsam/usb/ui.c @@ -52,8 +52,6 @@ #include "samd51j18a.h" #include "ui.h" -volatile uint8_t usb_state; - //! Sequence process running each \c SEQUENCE_PERIOD ms #define SEQUENCE_PERIOD 150 @@ -72,12 +70,12 @@ static void ui_wakeup_handler(void) void ui_init(void) { - usb_state = USB_STATE_POWERUP; + } void ui_powerdown(void) { - usb_state = USB_STATE_POWERDOWN; + } void ui_wakeup_enable(void) @@ -92,7 +90,7 @@ void ui_wakeup_disable(void) void ui_wakeup(void) { - usb_state = USB_STATE_POWERUP; + } void ui_process(uint16_t framenumber) diff --git a/tmk_core/protocol/arm_atsam/usb/ui.h b/tmk_core/protocol/arm_atsam/usb/ui.h index 3d899e6694..d1c767d457 100644 --- a/tmk_core/protocol/arm_atsam/usb/ui.h +++ b/tmk_core/protocol/arm_atsam/usb/ui.h @@ -47,12 +47,6 @@ #ifndef _UI_H_ #define _UI_H_ -extern volatile uint8_t usb_state; - -#define USB_STATE_UNKNOWN 0 -#define USB_STATE_POWERDOWN 1 -#define USB_STATE_POWERUP 2 - //! \brief Initializes the user interface void ui_init(void); From 6dec3550e0540ec979e11f7f310478877b3764b7 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Fri, 2 Nov 2018 14:48:44 -0700 Subject: [PATCH 0015/1763] Niu keymap (#4273) * Add modified planck layout * Update rules --- keyboards/niu_mini/keymaps/abhixec/keymap.c | 183 +++++++++++++++++++ keyboards/niu_mini/keymaps/abhixec/readme.md | 5 + keyboards/niu_mini/keymaps/abhixec/rules.mk | 1 + 3 files changed, 189 insertions(+) create mode 100644 keyboards/niu_mini/keymaps/abhixec/keymap.c create mode 100644 keyboards/niu_mini/keymaps/abhixec/readme.md create mode 100644 keyboards/niu_mini/keymaps/abhixec/rules.mk diff --git a/keyboards/niu_mini/keymaps/abhixec/keymap.c b/keyboards/niu_mini/keymaps/abhixec/keymap.c new file mode 100644 index 0000000000..6d3ff8a376 --- /dev/null +++ b/keyboards/niu_mini/keymaps/abhixec/keymap.c @@ -0,0 +1,183 @@ +/* Copyright 2015-2017 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 . + */ + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +enum layers { + _QWERTY, + _COLEMAK, + _LOWER, + _RAISE, + _ADJUST +}; + +enum keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + LOWER, + RAISE, + BACKLIT, + EXT_PLV +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_planck_mit( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = LAYOUT_planck_mit( + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_planck_mit( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_planck_mit( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | |AG_NRM|AG_SWP|Qwerty|Colemk| | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_planck_mit( + _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL , + _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + + +}; + + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + print("mode just switched to qwerty and this is a huge string\n"); + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + 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; + break; + 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; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +} diff --git a/keyboards/niu_mini/keymaps/abhixec/readme.md b/keyboards/niu_mini/keymaps/abhixec/readme.md new file mode 100644 index 0000000000..1bc312a039 --- /dev/null +++ b/keyboards/niu_mini/keymaps/abhixec/readme.md @@ -0,0 +1,5 @@ +# Abhixec's Layout + +This is inspired by planck but removed most of the unwanted and extra features of planck that is not there in this keyboard. + + diff --git a/keyboards/niu_mini/keymaps/abhixec/rules.mk b/keyboards/niu_mini/keymaps/abhixec/rules.mk new file mode 100644 index 0000000000..3bf3f27314 --- /dev/null +++ b/keyboards/niu_mini/keymaps/abhixec/rules.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = no From cd544e10a98b4bfd7f988d713dea446be9eb1b83 Mon Sep 17 00:00:00 2001 From: Elliot Powell <32494740+e11i0t23@users.noreply.github.com> Date: Fri, 2 Nov 2018 23:41:26 +0000 Subject: [PATCH 0016/1763] Keymap: Fixed poor layout of EP40 default keymap (#4330) * add initial ep40 files * fixed issues * updated keymap * Added media control * Update keyboards/handwired/ep40/rules.mk Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> * Fixed requested changes * Fixed more requested changes * Added delete key to layor 1 * Updated defualt keympap to have a Backspace mod del key * removed place holder Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> * removed obsolete code Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> --- .../handwired/ep40/keymaps/default/keymap.c | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/keyboards/handwired/ep40/keymaps/default/keymap.c b/keyboards/handwired/ep40/keymaps/default/keymap.c index 2d8a5d0592..1ac66bc012 100644 --- a/keyboards/handwired/ep40/keymaps/default/keymap.c +++ b/keyboards/handwired/ep40/keymaps/default/keymap.c @@ -15,16 +15,22 @@ */ #include QMK_KEYBOARD_H +static bool bsdel_mods = false; + +enum custom_keycodes { + M_BSDEL = SAFE_RANGE, // ensure these codes start after the highest keycode defined in Quantum +}; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( /* Base */ - KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\ + KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, M_BSDEL,\ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,\ - LCTL_T(KC_LBRC), KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_SPC), KC_RGUI, MO(2), RCTL_T(KC_RBRC), KC_RALT \ + LCTL_T(KC_LBRC), KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_SPC), KC_RALT, MO(2), RCTL_T(KC_RBRC), KC_F5 \ ), [1] = LAYOUT( /* Base */ - KC_TRNS, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0, KC_DEL ,\ + KC_TRNS, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0, KC_TRNS,\ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, KC_TRNS,\ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_TRNS,\ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \ @@ -37,3 +43,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET \ ), }; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M_BSDEL: { + uint8_t kc = KC_BSPC; + + if (record->event.pressed) { + if (keyboard_report->mods) { + kc = KC_DEL; + } + register_code (kc); + bsdel_mods = keyboard_report->mods; + } + else { + if (bsdel_mods) { + kc = KC_DEL; + } + unregister_code (kc); + } + + return false; + break; + } + } + return true; +} From 0633eb027308f08331cb33f27ddbe7cb3a08cda8 Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 3 Nov 2018 12:22:57 -0400 Subject: [PATCH 0017/1763] Increasing square wave buffer to max volume. (#4296) * Increasing square wave buffer to max volume. * Using range designated initializers for square waves; defining DAC_SAMPLE_MAX. --- quantum/audio/audio_arm.c | 133 +++----------------------------------- 1 file changed, 9 insertions(+), 124 deletions(-) diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c index d38184f323..18e8a8c66d 100644 --- a/quantum/audio/audio_arm.c +++ b/quantum/audio/audio_arm.c @@ -80,6 +80,7 @@ float startup_song[][2] = STARTUP_SONG; static void gpt_cb8(GPTDriver *gptp); #define DAC_BUFFER_SIZE 720 +#define DAC_SAMPLE_MAX 65535U #define START_CHANNEL_1() gptStart(&GPTD6, &gpt6cfg1); \ gptStartContinuous(&GPTD6, 2U) @@ -202,132 +203,16 @@ GPTConfig gpt8cfg1 = { // squarewave static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + // First half is max, second half is 0 + [0 ... DAC_BUFFER_SIZE/2-1] = DAC_SAMPLE_MAX, + [DAC_BUFFER_SIZE/2 ... DAC_BUFFER_SIZE -1] = 0, }; // squarewave static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, - 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047 + // opposite of dac_buffer above + [0 ... DAC_BUFFER_SIZE/2-1] = 0, + [DAC_BUFFER_SIZE/2 ... DAC_BUFFER_SIZE -1] = DAC_SAMPLE_MAX, }; /* @@ -363,7 +248,7 @@ static void error_cb1(DACDriver *dacp, dacerror_t err) { } static const DACConfig dac1cfg1 = { - .init = 2047U, + .init = DAC_SAMPLE_MAX, .datamode = DAC_DHRM_12BIT_RIGHT }; @@ -375,7 +260,7 @@ static const DACConversionGroup dacgrpcfg1 = { }; static const DACConfig dac1cfg2 = { - .init = 2047U, + .init = DAC_SAMPLE_MAX, .datamode = DAC_DHRM_12BIT_RIGHT }; From 292a87ad0442293aadfe6910c9e5f19a53e54a81 Mon Sep 17 00:00:00 2001 From: Michael Pio Date: Sun, 4 Nov 2018 01:08:05 +0800 Subject: [PATCH 0018/1763] Instructions on how to flash via STM32 bootloader (#4316) * Add instructions on flashing ARM keyboards with default STM32 bootloader * fixed typo; added note suggestion to step 4 --- docs/flashing.md | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/flashing.md b/docs/flashing.md index 1edbe22253..bc418c4150 100644 --- a/docs/flashing.md +++ b/docs/flashing.md @@ -71,8 +71,8 @@ Flashing sequence: 1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters) 2. Wait for the OS to detect the device -4. Flash a .hex file -5. Wait for the device to reset automatically +3. Flash a .hex file +4. Wait for the device to reset automatically or @@ -106,5 +106,28 @@ Flashing sequence: 1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters) 2. Wait for the OS to detect the device -4. Flash a .hex file -5. Reset the device into application mode (may be done automatically) +3. Flash a .hex file +4. Reset the device into application mode (may be done automatically) + +## STM32 + +All STM32 chips come preloaded with a factory bootloader that cannot be modified nor deleted. Some STM32 chips have bootloaders that do not come with USB programming (e.g. STM32F103) but the process is still the same. + +At the moment, no `BOOTLOADER` variable is needed on `rules.mk` for STM32. + +Compatible flashers: + +* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI) +* [dfu-util](https://github.com/Stefan-Schmidt/dfu-util) / `:dfu-util` (recommended command line) + +Flashing sequence: + +1. Enter the bootloader using any of the following methods: + * Tap the `RESET` keycode (may not work on STM32F042 devices) + * If a reset circuit is present, tap the RESET button + * Otherwise, you need to bridge BOOT0 to VCC (via BOOT0 button or bridge), short RESET to GND (via RESET button or bridge), and then let go of the BOOT0 bridge +2. Wait for the OS to detect the device +3. Flash a .bin file + * You will receive a warning about the DFU signature; Just ignore it +4. Reset the device into application mode (may be done automatically) + * If you are building from command line (e.g. `make planck/rev6:default:dfu-util`), make sure that `:leave` is passed to the `DFU_ARGS` variable inside your `rules.mk` (e.g. `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) so that your device resets after flashing From bdc72740cb5f9d7d6d5df574b39721ec479dc733 Mon Sep 17 00:00:00 2001 From: BK Date: Sat, 3 Nov 2018 13:38:37 -0400 Subject: [PATCH 0019/1763] Add distro support for sabayon (#4320) * Add distro support for sabayon Sabayon is a gentoo based distro with a different package manager. Does not need any use flags or masking for the required packages. * Add missing backslash * Put echo string in quotes, remove extra newline * Order gentoo/sabayon packages alphabetically. --- util/linux_install.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/util/linux_install.sh b/util/linux_install.sh index d3b9328d79..8dc28be6ef 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -86,15 +86,28 @@ elif grep ID /etc/os-release | grep -q gentoo; then app-arch/unzip \ app-arch/zip \ app-mobilephone/dfu-util \ + dev-embedded/avrdude \ net-misc/wget \ sys-devel/gcc \ - sys-devel/crossdev dev-embedded/avrdude + sys-devel/crossdev sudo crossdev -s4 --stable --g =4.9.4 --portage --verbose --target avr - echo Done! + echo "Done!" else echo "Quitting..." fi +elif grep ID /etc/os-release | grep -q sabayon; then + sudo equo install \ + app-arch/unzip \ + app-arch/zip \ + app-mobilephone/dfu-util \ + dev-embedded/avrdude \ + net-misc/wget \ + sys-devel/gcc \ + sys-devel/crossdev + sudo crossdev -s4 --stable --g =4.9.4 --portage --verbose --target avr + echo "Done!" + elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then CROSS_AVR_GCC=cross-avr-gcc8 if grep ID /etc/os-release | grep -q "15.0"; then From 80c04b29194a0023b8e47f3ac49ea248c8ec953d Mon Sep 17 00:00:00 2001 From: wanleg <32079073+wanleg@users.noreply.github.com> Date: Sat, 3 Nov 2018 10:39:40 -0700 Subject: [PATCH 0020/1763] 5x5bt (#4333) * got bluetooth working * get rid of description on bluetooth * get rid of commented code used for testing * Update config.h --- layouts/community/ortho_4x12/wanleg/config.h | 7 ++---- layouts/community/ortho_5x15/wanleg/config.h | 20 +++++++++++----- layouts/community/ortho_5x15/wanleg/keymap.c | 25 +++++++++++++------- layouts/community/ortho_5x15/wanleg/rules.mk | 9 ++++++- users/wanleg/rules.mk | 6 +++++ 5 files changed, 47 insertions(+), 20 deletions(-) diff --git a/layouts/community/ortho_4x12/wanleg/config.h b/layouts/community/ortho_4x12/wanleg/config.h index 2444b8b976..2b2072db22 100644 --- a/layouts/community/ortho_4x12/wanleg/config.h +++ b/layouts/community/ortho_4x12/wanleg/config.h @@ -1,5 +1,4 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once //QMK DFU settings (ProMicro boards with QMK bootloader) // set top left key as bootloader mode escape key on Lets Split rev2 @@ -30,8 +29,6 @@ #undef MATRIX_ROW_PINS #undef MATRIX_COL_PINS #define MATRIX_ROW_PINS { D1, D0, D4, C6 } -//last 4 elements of the column array are are not broken out on a ProMicro (included only to preserve array structure) +//last 4 elements of the column array are not broken out on a ProMicro (included only to preserve array structure) #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, F0, B7, D6, F1 } #endif - -#endif diff --git a/layouts/community/ortho_5x15/wanleg/config.h b/layouts/community/ortho_5x15/wanleg/config.h index 1043986f7a..1aeda2db4e 100644 --- a/layouts/community/ortho_5x15/wanleg/config.h +++ b/layouts/community/ortho_5x15/wanleg/config.h @@ -1,8 +1,16 @@ #pragma once -// set top left key as bootloader mode escape key on 5x5 75key layout -#if defined(KEYBOARD_5x5) && !defined(PRO_MICRO) -#define QMK_LED B0 -#define QMK_ESC_OUTPUT D7 // usually COL -#define QMK_ESC_INPUT B2 // usually ROW -#endif \ No newline at end of file +//5x5 powered by Adafruit Feather 32u4 Bluefruit LE +#if defined(KEYBOARD_5x5) && defined(BLUEFRUIT) + +//need to undefine standard 5x5 array before defining alternate Bluefruit array +#undef MATRIX_ROW_PINS +#undef MATRIX_COL_PINS +#define MATRIX_ROW_PINS { F7, F6, F5, D1, D0 } +//last 5 elements not tested +#define MATRIX_COL_PINS { C6, D7, B5, B6, B7, D6, C7, F0, F1, F4, B1, B2, B3, D2, D3 } + +//get rid of description - too long to show properly in Windows +#undef DESCRIPTION +#define DESCRIPTION +#endif diff --git a/layouts/community/ortho_5x15/wanleg/keymap.c b/layouts/community/ortho_5x15/wanleg/keymap.c index df74241157..66b3ce018d 100644 --- a/layouts/community/ortho_5x15/wanleg/keymap.c +++ b/layouts/community/ortho_5x15/wanleg/keymap.c @@ -15,14 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(RST_TAP_DANCE), GHERKIN50, KC_LALT, NUMPAD, NUMBER75, ETCETERA75, KC_SPC,DIRECTION75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT ), -[PAD] = LAYOUT_ortho_5x5_wrapper( - _______, _______, _______, _______, _______, - _______________NUMPAD_Row__0_______________, _______, - _______________NUMPAD_Row__1_______________, _______, - _______________NUMPAD_Row__2_______________, _______, - KC_KP_0, TD(LYR50_TAP_DANCE), KC_KP_DOT, KC_PMNS, _______ -), - [GK50] = LAYOUT_ortho_5x10_wrapper( KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, _______________Gherkin_Row_0_______________, @@ -31,6 +23,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(RST_TAP_DANCE), GHERKIN75, NUMPAD, gNUMBER, gETCETERA, KC_SPC,gDIRECTION, KC_RGUI, KC_RALT, KC_RGUI ), +#if defined(BLUEFRUIT) +[PAD] = LAYOUT_ortho_5x5_wrapper( + _______, _______, _______, OUT_BT, OUT_USB, + _______________NUMPAD_Row__0_______________, _______, + _______________NUMPAD_Row__1_______________, _______, + _______________NUMPAD_Row__2_______________, _______, + KC_KP_0, TD(LYR50_TAP_DANCE), KC_KP_DOT, KC_PMNS, _______ +), +#else + [PAD] = LAYOUT_ortho_5x5_wrapper( + _______, _______, _______, _______, _______, + _______________NUMPAD_Row__0_______________, _______, + _______________NUMPAD_Row__1_______________, _______, + _______________NUMPAD_Row__2_______________, _______, + KC_KP_0, TD(LYR50_TAP_DANCE), KC_KP_DOT, KC_PMNS, _______ +), +#endif #else /* Gherkin 75 * .--------------------------------------------------------------------------------------------------------------------------------------. diff --git a/layouts/community/ortho_5x15/wanleg/rules.mk b/layouts/community/ortho_5x15/wanleg/rules.mk index e36226fb2e..bfc4c69d99 100644 --- a/layouts/community/ortho_5x15/wanleg/rules.mk +++ b/layouts/community/ortho_5x15/wanleg/rules.mk @@ -1 +1,8 @@ -SWAP_HANDS_ENABLE = no \ No newline at end of file +ifeq (,$(findstring yes,$(BLUEFRUIT))) + BLUETOOTH = AdafruitBLE + BLUETOOTH_ENABLE = yes + F_CPU = 8000000 + CONSOLE_ENABLE = no # Console for debug(+400) + COMMAND_ENABLE = no # Commands for debug and configuration + RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +endif \ No newline at end of file diff --git a/users/wanleg/rules.mk b/users/wanleg/rules.mk index 2a2a65cfea..e3e802b4a7 100644 --- a/users/wanleg/rules.mk +++ b/users/wanleg/rules.mk @@ -14,3 +14,9 @@ endif ifeq ($(strip $(PM)), yes) OPT_DEFS += -DPRO_MICRO endif + +#use alternate settings for boards using "Adafruit Feather 32u4 Bluefruit LE" instead of Micro +#example usage: make 5x5:wanleg BT=yes +ifeq ($(strip $(BT)), yes) + OPT_DEFS += -DBLUEFRUIT +endif \ No newline at end of file From 60ed0b7c3045d9511c28495f4d8c65240434c952 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Sat, 3 Nov 2018 15:09:32 -0700 Subject: [PATCH 0021/1763] Keyboard: Port over the x268 Noxary Firmware (#4339) * port over Rozakiin https://github.com/Rozakiin/Noxary_Firmware/tree/master/noxary_x268 * rename LAYOUT to LAYOUT_65_ansi default layout * add configurator support * add community layout support * put Rozakiin's name everywhere * update readme * problems with the 65_ansi keymap to be diagnosed later --- keyboards/noxary/README.md | 4 +- keyboards/noxary/x268/config.h | 230 ++++++++++++++++++ keyboards/noxary/x268/info.json | 12 + .../noxary/x268/keymaps/default/config.h | 19 ++ .../noxary/x268/keymaps/default/keymap.c | 83 +++++++ .../noxary/x268/keymaps/default/readme.md | 1 + keyboards/noxary/x268/readme.md | 18 ++ keyboards/noxary/x268/rules.mk | 80 ++++++ keyboards/noxary/x268/x268.c | 53 ++++ keyboards/noxary/x268/x268.h | 35 +++ 10 files changed, 534 insertions(+), 1 deletion(-) create mode 100644 keyboards/noxary/x268/config.h create mode 100644 keyboards/noxary/x268/info.json create mode 100644 keyboards/noxary/x268/keymaps/default/config.h create mode 100644 keyboards/noxary/x268/keymaps/default/keymap.c create mode 100644 keyboards/noxary/x268/keymaps/default/readme.md create mode 100644 keyboards/noxary/x268/readme.md create mode 100644 keyboards/noxary/x268/rules.mk create mode 100644 keyboards/noxary/x268/x268.c create mode 100644 keyboards/noxary/x268/x268.h diff --git a/keyboards/noxary/README.md b/keyboards/noxary/README.md index 81e525506a..bd4b4b591f 100644 --- a/keyboards/noxary/README.md +++ b/keyboards/noxary/README.md @@ -1,7 +1,9 @@ # Noxary Firmware -All files related to firmware of Noxary Keyboards designed by Rozakiin. +All files related to firmware of Noxary Keyboards designed by [Rozakiin](https://github.com/rozakiin). ### Keyboards - [268](./268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin + +- [x268](./x268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin diff --git a/keyboards/noxary/x268/config.h b/keyboards/noxary/x268/config.h new file mode 100644 index 0000000000..5c4f6cdad7 --- /dev/null +++ b/keyboards/noxary/x268/config.h @@ -0,0 +1,230 @@ +/* +Copyright 2018 Rozakiin + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x4E58 +#define PRODUCT_ID 0x0044 +#define DEVICE_VER 0x00F2 +#define MANUFACTURER Noxary +#define PRODUCT x268 +#define DESCRIPTION QMK keyboard firmware for x268 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F7, F6, F5, F0, B4 } +#define MATRIX_COL_PINS { C6, B6, C7, F4, E6, B2, D6, D0, D1, D7, D4, D5, D3, F1, D2, B1 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + +/* ws2812b options */ +#define RGB_DI_PIN B5 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 16 +#define RGBLIGHT_SAT_STEP 16 +#define RGBLIGHT_VAL_STEP 16 +/*#define RGBLIGHT_LIMIT_VAL 255 */ +#endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + +/* Bootmagic Lite key configuration */ +// #define BOOTMAGIC_LITE_ROW 0 +// #define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/noxary/x268/info.json b/keyboards/noxary/x268/info.json new file mode 100644 index 0000000000..047c39f044 --- /dev/null +++ b/keyboards/noxary/x268/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Noxary x268", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} diff --git a/keyboards/noxary/x268/keymaps/default/config.h b/keyboards/noxary/x268/keymaps/default/config.h new file mode 100644 index 0000000000..9c4c2b6308 --- /dev/null +++ b/keyboards/noxary/x268/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/noxary/x268/keymaps/default/keymap.c b/keyboards/noxary/x268/keymaps/default/keymap.c new file mode 100644 index 0000000000..cb37407a7b --- /dev/null +++ b/keyboards/noxary/x268/keymaps/default/keymap.c @@ -0,0 +1,83 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL1 1 +#define _FL2 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* _BL: Base Layer(Default) - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BSpc| Grv| + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Del| + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| Ent|PgUp| + * |----------------------------------------------------------------| + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt|Mo(1)|Ctrl|Lef|Dow|Rght| + * `----------------------------------------------------------------' + */ + [_BL] = LAYOUT_65_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_BSLS, KC_BSPC, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, + 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_LALT, MO(_FL1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + /* _FL1: Function Layer 1 - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * | `|F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |PScr| | + * |----------------------------------------------------------------| + * | | | | |RST| | | | | | | | | | Ins| + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | |Home| + * |----------------------------------------------------------------| + * | | | | | | | | | |Bl-|Bl+| |Mute|Vol+| End| + * |----------------------------------------------------------------| + * | | | | BL_Toggle | | | | |Vol-| | + * `----------------------------------------------------------------' + */ + [_FL1] = LAYOUT_65_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_PSCR, _______, + RGB_TOG, RGB_VAI, RGB_SAI, RGB_HUI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, + _______, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, + _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, KC_VOLU, KC_END, + _______, _______, _______, BL_TOGG, _______, _______, _______, _______, KC_VOLD, _______), + /* _FL2: Function Layer 2 - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * | | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ + [_FL2] = LAYOUT_65_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + +}; + + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + diff --git a/keyboards/noxary/x268/keymaps/default/readme.md b/keyboards/noxary/x268/keymaps/default/readme.md new file mode 100644 index 0000000000..5d5bd69592 --- /dev/null +++ b/keyboards/noxary/x268/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for x268 diff --git a/keyboards/noxary/x268/readme.md b/keyboards/noxary/x268/readme.md new file mode 100644 index 0000000000..c1c05c34d5 --- /dev/null +++ b/keyboards/noxary/x268/readme.md @@ -0,0 +1,18 @@ +# Noxary x268 + +![x268](https://geekhack.org/index.php?action=dlattach;topic=96377.0;attach=198826;image) + +A fully customizable 65% keyboard. + +* Keyboard Maintainer: [Rozakiin](https://github.com/rozakiin) +* Hardware Supported: x268 PCB + * rev1 +* Hardware Availability: + * [Noxary - 268](https://geekhack.org/index.php?topic=92066.0) + * [LZ - CLS ms](https://geekhack.org/index.php?topic=96377) + +Make example for this keyboard (after setting up your build environment): + + make noxary/x268:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/noxary/x268/rules.mk b/keyboards/noxary/x268/rules.mk new file mode 100644 index 0000000000..3c4a26ad1a --- /dev/null +++ b/keyboards/noxary/x268/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/noxary/x268/x268.c b/keyboards/noxary/x268/x268.c new file mode 100644 index 0000000000..3921270acc --- /dev/null +++ b/keyboards/noxary/x268/x268.c @@ -0,0 +1,53 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ +#include "x268.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 + + led_set_user(usb_led); +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 0); PORTB |= (1 << 0); + } + else { + DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); + } +} diff --git a/keyboards/noxary/x268/x268.h b/keyboards/noxary/x268/x268.h new file mode 100644 index 0000000000..53855e2060 --- /dev/null +++ b/keyboards/noxary/x268/x268.h @@ -0,0 +1,35 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ +#ifndef X268_H +#define X268_H + +#include "quantum.h" + +#define LAYOUT_65_ansi( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \ + K400, K401, K402, K406, K409, K410, K411, K412, K414, K415 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \ + { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, K411, K412, KC_NO, K414, K415 } \ +} + +#endif From b5d7bb6154f848e4f3fd3e5d3cc8bbb16a18e093 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sat, 3 Nov 2018 23:57:42 -0700 Subject: [PATCH 0022/1763] converter/usb_usb Refactor and Configurator support (#4345) * converter/usb_usb: layout macro refactor - KEYMAP_ALL renamed to LAYOUT_all - KEYMAP renamed to LAYOUT_ansi - KEYMAP_ISO renamed to LAYOUT_iso - KEYMAP_JIS renamed to LAYOUT_jis * converter/usb_usb: keymap refactor - all keymaps now use #include QMK_KEYBOARD_H - layout macro names updated - removed deprecated TMK macro/function code * Add info.json file for Configurator support --- keyboards/converter/usb_usb/info.json | 485 ++++++++++++++++++ .../converter/usb_usb/keymaps/ble/keymap.c | 18 +- .../usb_usb/keymaps/coloneljesus/keymap.c | 44 +- .../usb_usb/keymaps/default/keymap.c | 22 +- keyboards/converter/usb_usb/usb_usb.h | 56 +- 5 files changed, 537 insertions(+), 88 deletions(-) create mode 100644 keyboards/converter/usb_usb/info.json diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json new file mode 100644 index 0000000000..af3dd0b5e4 --- /dev/null +++ b/keyboards/converter/usb_usb/info.json @@ -0,0 +1,485 @@ +{ + "keyboard_name": "converter/usb_usb", + "url": "", + "maintainer": "qmk", + "width": 22.5, + "height": 6.5, + "layouts": { + "LAYOUT_all": { + "layout": [ + {"label":"F13", "x":2, "y":0}, + {"label":"F14", "x":3, "y":0}, + {"label":"F15", "x":4, "y":0}, + {"label":"F16", "x":5, "y":0}, + {"label":"F17", "x":6.5, "y":0}, + {"label":"F18", "x":7.5, "y":0}, + {"label":"F19", "x":8.5, "y":0}, + {"label":"F20", "x":9.5, "y":0}, + {"label":"F21", "x":11, "y":0}, + {"label":"F22", "x":12, "y":0}, + {"label":"F23", "x":13, "y":0}, + {"label":"F24", "x":14, "y":0}, + {"label":"Esc", "x":0, "y":1}, + {"label":"F1", "x":2, "y":1}, + {"label":"F2", "x":3, "y":1}, + {"label":"F3", "x":4, "y":1}, + {"label":"F4", "x":5, "y":1}, + {"label":"F5", "x":6.5, "y":1}, + {"label":"F6", "x":7.5, "y":1}, + {"label":"F7", "x":8.5, "y":1}, + {"label":"F8", "x":9.5, "y":1}, + {"label":"F9", "x":11, "y":1}, + {"label":"F10", "x":12, "y":1}, + {"label":"F11", "x":13, "y":1}, + {"label":"F12", "x":14, "y":1}, + {"label":"Print Screen", "x":15.25, "y":1}, + {"label":"Scroll Lock", "x":16.25, "y":1}, + {"label":"Pause", "x":17.25, "y":1}, + {"label":"Volume Down", "x":18.5, "y":1}, + {"label":"Vol Up", "x":19.5, "y":1}, + {"label":"Mute", "x":20.5, "y":1}, + {"label":"Power", "x":21.5, "y":1}, + {"label":"Help", "x":22.75, "y":1}, + {"label":"`", "x":0, "y":2.5}, + {"label":"1", "x":1, "y":2.5}, + {"label":"2", "x":2, "y":2.5}, + {"label":"3", "x":3, "y":2.5}, + {"label":"4", "x":4, "y":2.5}, + {"label":"5", "x":5, "y":2.5}, + {"label":"6", "x":6, "y":2.5}, + {"label":"7", "x":7, "y":2.5}, + {"label":"8", "x":8, "y":2.5}, + {"label":"9", "x":9, "y":2.5}, + {"label":"0", "x":10, "y":2.5}, + {"label":"-", "x":11, "y":2.5}, + {"label":"=", "x":12, "y":2.5}, + {"label":"Yen", "x":13, "y":2.5}, + {"label":"Back Space", "x":14, "y":2.5}, + {"label":"Insert", "x":15.25, "y":2.5}, + {"label":"Home", "x":16.25, "y":2.5}, + {"label":"Page Up", "x":17.25, "y":2.5}, + {"label":"Num Lock", "x":18.5, "y":2.5}, + {"label":"Num /", "x":19.5, "y":2.5}, + {"label":"Num *", "x":20.5, "y":2.5}, + {"label":"Num -", "x":21.5, "y":2.5}, + {"label":"Stop", "x":22.75, "y":2.5}, + {"label":"Again", "x":23.75, "y":2.5}, + {"label":"Tab", "x":0, "y":3.5, "w":1.5}, + {"label":"Q", "x":1.5, "y":3.5}, + {"label":"W", "x":2.5, "y":3.5}, + {"label":"E", "x":3.5, "y":3.5}, + {"label":"R", "x":4.5, "y":3.5}, + {"label":"T", "x":5.5, "y":3.5}, + {"label":"Y", "x":6.5, "y":3.5}, + {"label":"U", "x":7.5, "y":3.5}, + {"label":"I", "x":8.5, "y":3.5}, + {"label":"O", "x":9.5, "y":3.5}, + {"label":"P", "x":10.5, "y":3.5}, + {"label":"[", "x":11.5, "y":3.5}, + {"label":"]", "x":12.5, "y":3.5}, + {"label":"\\", "x":13.5, "y":3.5, "w":1.5}, + {"label":"Delete", "x":15.25, "y":3.5}, + {"label":"End", "x":16.25, "y":3.5}, + {"label":"Page Down", "x":17.25, "y":3.5}, + {"label":"Num 7", "x":18.5, "y":3.5}, + {"label":"Num 8", "x":19.5, "y":3.5}, + {"label":"Num 9", "x":20.5, "y":3.5}, + {"label":"Num +", "x":21.5, "y":3.5}, + {"label":"Menu", "x":22.75, "y":3.5}, + {"label":"Undo", "x":23.75, "y":3.5}, + {"label":"Caps Lock", "x":0, "y":4.5, "w":1.75}, + {"label":"A", "x":1.75, "y":4.5}, + {"label":"S", "x":2.75, "y":4.5}, + {"label":"D", "x":3.75, "y":4.5}, + {"label":"F", "x":4.75, "y":4.5}, + {"label":"G", "x":5.75, "y":4.5}, + {"label":"H", "x":6.75, "y":4.5}, + {"label":"J", "x":7.75, "y":4.5}, + {"label":"K", "x":8.75, "y":4.5}, + {"label":"L", "x":9.75, "y":4.5}, + {"label":";", "x":10.75, "y":4.5}, + {"label":"\"", "x":11.75, "y":4.5}, + {"label":"ISO #", "x":12.75, "y":4.5}, + {"label":"Enter", "x":13.75, "y":4.5, "w":1.25}, + {"label":"Num 4", "x":18.5, "y":4.5}, + {"label":"Num 5", "x":19.5, "y":4.5}, + {"label":"Num 6", "x":20.5, "y":4.5}, + {"label":"Num , ", "x":21.5, "y":4.5}, + {"label":"Select", "x":22.75, "y":4.5}, + {"label":"Copy", "x":23.75, "y":4.5}, + {"label":"Shift", "x":0, "y":5.5, "w":1.25}, + {"label":"ISO \\", "x":1.25, "y":5.5}, + {"label":"Z", "x":2.25, "y":5.5}, + {"label":"X", "x":3.25, "y":5.5}, + {"label":"C", "x":4.25, "y":5.5}, + {"label":"V", "x":5.25, "y":5.5}, + {"label":"B", "x":6.25, "y":5.5}, + {"label":"N", "x":7.25, "y":5.5}, + {"label":"M", "x":8.25, "y":5.5}, + {"label":",", "x":9.25, "y":5.5}, + {"label":".", "x":10.25, "y":5.5}, + {"label":"/", "x":11.25, "y":5.5}, + {"label":"JIS \\", "x":12.25, "y":5.5}, + {"label":"Shift", "x":13.25, "y":5.5, "w":1.75}, + {"label":"Up", "x":16.25, "y":5.5}, + {"label":"Num 1", "x":18.5, "y":5.5}, + {"label":"Num 2", "x":19.5, "y":5.5}, + {"label":"Num 3", "x":20.5, "y":5.5}, + {"label":"Num =", "x":21.5, "y":5.5}, + {"label":"Exec", "x":22.75, "y":5.5}, + {"label":"Paste", "x":23.75, "y":5.5}, + {"label":"Ctrl", "x":0, "y":6.5}, + {"label":"GUI", "x":1, "y":6.5}, + {"label":"Alt", "x":2, "y":6.5}, + {"label":"JIS Muhenkan", "x":3, "y":6.5}, + {"label":"Hanja", "x":4, "y":6.5}, + {"label":"Space", "x":5, "y":6.5, "w":3}, + {"label":"Hangul/English", "x":8, "y":6.5}, + {"label":"JIS Henkan", "x":9, "y":6.5}, + {"label":"JIS Katakana/Hiragana", "x":10, "y":6.5}, + {"label":"Alt", "x":11, "y":6.5}, + {"label":"GUI", "x":12, "y":6.5}, + {"label":"App", "x":13, "y":6.5}, + {"label":"Ctrl", "x":14, "y":6.5}, + {"label":"Left", "x":15.25, "y":6.5}, + {"label":"Down", "x":16.25, "y":6.5}, + {"label":"Right", "x":17.25, "y":6.5}, + {"label":"Num 0", "x":18.5, "y":6.5, "w":2}, + {"label":"Num .", "x":20.5, "y":6.5}, + {"label":"Num Enter", "x":21.5, "y":6.5}, + {"label":"Find", "x":22.75, "y":6.5}, + {"label":"Cut", "x":23.75, "y":6.5} + ] + }, + "LAYOUT_ansi": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"PrtSc", "x":15.25, "y":0}, + {"label":"Scroll Lock", "x":16.25, "y":0}, + {"label":"Pause", "x":17.25, "y":0}, + {"label":"`", "x":0, "y":1.5}, + {"label":"1", "x":1, "y":1.5}, + {"label":"2", "x":2, "y":1.5}, + {"label":"3", "x":3, "y":1.5}, + {"label":"4", "x":4, "y":1.5}, + {"label":"5", "x":5, "y":1.5}, + {"label":"6", "x":6, "y":1.5}, + {"label":"7", "x":7, "y":1.5}, + {"label":"8", "x":8, "y":1.5}, + {"label":"9", "x":9, "y":1.5}, + {"label":"0", "x":10, "y":1.5}, + {"label":"-", "x":11, "y":1.5}, + {"label":"=", "x":12, "y":1.5}, + {"label":"Backspace", "x":13, "y":1.5, "w":2}, + {"label":"Insert", "x":15.25, "y":1.5}, + {"label":"Home", "x":16.25, "y":1.5}, + {"label":"Page Up", "x":17.25, "y":1.5}, + {"label":"Num Lock", "x":18.5, "y":1.5}, + {"label":"Num /", "x":19.5, "y":1.5}, + {"label":"Num *", "x":20.5, "y":1.5}, + {"label":"Num -", "x":21.5, "y":1.5}, + {"label":"Tab", "x":0, "y":2.5, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.5}, + {"label":"W", "x":2.5, "y":2.5}, + {"label":"E", "x":3.5, "y":2.5}, + {"label":"R", "x":4.5, "y":2.5}, + {"label":"T", "x":5.5, "y":2.5}, + {"label":"Y", "x":6.5, "y":2.5}, + {"label":"U", "x":7.5, "y":2.5}, + {"label":"I", "x":8.5, "y":2.5}, + {"label":"O", "x":9.5, "y":2.5}, + {"label":"P", "x":10.5, "y":2.5}, + {"label":"[", "x":11.5, "y":2.5}, + {"label":"]", "x":12.5, "y":2.5}, + {"label":"\\", "x":13.5, "y":2.5, "w":1.5}, + {"label":"Delete", "x":15.25, "y":2.5}, + {"label":"End", "x":16.25, "y":2.5}, + {"label":"Page Down", "x":17.25, "y":2.5}, + {"label":"Num 7", "x":18.5, "y":2.5}, + {"label":"Num 8", "x":19.5, "y":2.5}, + {"label":"Num 9", "x":20.5, "y":2.5}, + {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, + {"label":"A", "x":1.75, "y":3.5}, + {"label":"S", "x":2.75, "y":3.5}, + {"label":"D", "x":3.75, "y":3.5}, + {"label":"F", "x":4.75, "y":3.5}, + {"label":"G", "x":5.75, "y":3.5}, + {"label":"H", "x":6.75, "y":3.5}, + {"label":"J", "x":7.75, "y":3.5}, + {"label":"K", "x":8.75, "y":3.5}, + {"label":"L", "x":9.75, "y":3.5}, + {"label":":", "x":10.75, "y":3.5}, + {"label":"\"", "x":11.75, "y":3.5}, + {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, + {"label":"Num 4", "x":18.5, "y":3.5}, + {"label":"Num 5", "x":19.5, "y":3.5}, + {"label":"Num 6", "x":20.5, "y":3.5}, + {"label":"Num +", "x":21.5, "y":2.5, "h":2}, + {"label":"Shift", "x":0, "y":4.5, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.5}, + {"label":"X", "x":3.25, "y":4.5}, + {"label":"C", "x":4.25, "y":4.5}, + {"label":"V", "x":5.25, "y":4.5}, + {"label":"B", "x":6.25, "y":4.5}, + {"label":"N", "x":7.25, "y":4.5}, + {"label":"M", "x":8.25, "y":4.5}, + {"label":",", "x":9.25, "y":4.5}, + {"label":".", "x":10.25, "y":4.5}, + {"label":"/", "x":11.25, "y":4.5}, + {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.5}, + {"label":"Num 1", "x":18.5, "y":4.5}, + {"label":"Num 2", "x":19.5, "y":4.5}, + {"label":"Num 3", "x":20.5, "y":4.5}, + {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, + {"label":"GUI", "x":1.25, "y":5.5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, + {"label":"Alt", "x":10, "y":5.5, "w":1.25}, + {"label":"GUI", "x":11.25, "y":5.5, "w":1.25}, + {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, + {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.5}, + {"label":"Down", "x":16.25, "y":5.5}, + {"label":"Right", "x":17.25, "y":5.5}, + {"label":"Num 0", "x":18.5, "y":5.5, "w":2}, + {"label":"Num .", "x":20.5, "y":5.5}, + {"label":"Num Enter", "x":21.5, "y":4.5, "h":2} + ] + }, + "LAYOUT_iso": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print Screen", "x":15.25, "y":0}, + {"label":"Scroll Lock", "x":16.25, "y":0}, + {"label":"Pause", "x":17.25, "y":0}, + {"label":"`", "x":0, "y":1.5}, + {"label":"1", "x":1, "y":1.5}, + {"label":"2", "x":2, "y":1.5}, + {"label":"3", "x":3, "y":1.5}, + {"label":"4", "x":4, "y":1.5}, + {"label":"5", "x":5, "y":1.5}, + {"label":"6", "x":6, "y":1.5}, + {"label":"7", "x":7, "y":1.5}, + {"label":"8", "x":8, "y":1.5}, + {"label":"9", "x":9, "y":1.5}, + {"label":"0", "x":10, "y":1.5}, + {"label":"-", "x":11, "y":1.5}, + {"label":"=", "x":12, "y":1.5}, + {"label":"Backspace", "x":13, "y":1.5, "w":2}, + {"label":"Insert", "x":15.25, "y":1.5}, + {"label":"Home", "x":16.25, "y":1.5}, + {"label":"Page Up", "x":17.25, "y":1.5}, + {"label":"Num Lock", "x":18.5, "y":1.5}, + {"label":"Num /", "x":19.5, "y":1.5}, + {"label":"Num *", "x":20.5, "y":1.5}, + {"label":"Num -", "x":21.5, "y":1.5}, + {"label":"Tab", "x":0, "y":2.5, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.5}, + {"label":"W", "x":2.5, "y":2.5}, + {"label":"E", "x":3.5, "y":2.5}, + {"label":"R", "x":4.5, "y":2.5}, + {"label":"T", "x":5.5, "y":2.5}, + {"label":"Y", "x":6.5, "y":2.5}, + {"label":"U", "x":7.5, "y":2.5}, + {"label":"I", "x":8.5, "y":2.5}, + {"label":"O", "x":9.5, "y":2.5}, + {"label":"P", "x":10.5, "y":2.5}, + {"label":"[", "x":11.5, "y":2.5}, + {"label":"]", "x":12.5, "y":2.5}, + {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, + {"label":"Delete", "x":15.25, "y":2.5}, + {"label":"End", "x":16.25, "y":2.5}, + {"label":"Page Down", "x":17.25, "y":2.5}, + {"label":"Num 7", "x":18.5, "y":2.5}, + {"label":"Num 8", "x":19.5, "y":2.5}, + {"label":"Num 9", "x":20.5, "y":2.5}, + {"label":"Num +", "x":21.5, "y":2.5, "h":2}, + {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, + {"label":"A", "x":1.75, "y":3.5}, + {"label":"S", "x":2.75, "y":3.5}, + {"label":"D", "x":3.75, "y":3.5}, + {"label":"F", "x":4.75, "y":3.5}, + {"label":"G", "x":5.75, "y":3.5}, + {"label":"H", "x":6.75, "y":3.5}, + {"label":"J", "x":7.75, "y":3.5}, + {"label":"K", "x":8.75, "y":3.5}, + {"label":"L", "x":9.75, "y":3.5}, + {"label":";", "x":10.75, "y":3.5}, + {"label":"'", "x":11.75, "y":3.5}, + {"label":"ISO #", "x":12.75, "y":3.5}, + {"label":"Num 4", "x":18.5, "y":3.5}, + {"label":"Num 5", "x":19.5, "y":3.5}, + {"label":"Num 6", "x":20.5, "y":3.5}, + {"label":"Shift", "x":0, "y":4.5, "w":1.25}, + {"label":"ISO \\", "x":1.25, "y":4.5}, + {"label":"Z", "x":2.25, "y":4.5}, + {"label":"X", "x":3.25, "y":4.5}, + {"label":"C", "x":4.25, "y":4.5}, + {"label":"V", "x":5.25, "y":4.5}, + {"label":"B", "x":6.25, "y":4.5}, + {"label":"N", "x":7.25, "y":4.5}, + {"label":"M", "x":8.25, "y":4.5}, + {"label":",", "x":9.25, "y":4.5}, + {"label":".", "x":10.25, "y":4.5}, + {"label":"/", "x":11.25, "y":4.5}, + {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, + {"label":"Up", "x":16.25, "y":4.5}, + {"label":"Num 1", "x":18.5, "y":4.5}, + {"label":"Num 2", "x":19.5, "y":4.5}, + {"label":"Num 3", "x":20.5, "y":4.5}, + {"label":"Num Enter", "x":21.5, "y":4.5, "h":2}, + {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, + {"label":"GUI", "x":1.25, "y":5.5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, + {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, + {"label":"AltGr", "x":10, "y":5.5, "w":1.25}, + {"label":"GUI", "x":11.25, "y":5.5, "w":1.25}, + {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, + {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.5}, + {"label":"Down", "x":16.25, "y":5.5}, + {"label":"Right", "x":17.25, "y":5.5}, + {"label":"Num 0", "x":18.5, "y":5.5, "w":2}, + {"label":"Num .", "x":20.5, "y":5.5} + ] + }, + "LAYOUT_jis": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print Screen", "x":15.25, "y":0}, + {"label":"Scroll Lock", "x":16.25, "y":0}, + {"label":"Pause", "x":17.25, "y":0}, + {"label":"JIS Hankaku / Zenkaku", "x":0, "y":1.5}, + {"label":"1", "x":1, "y":1.5}, + {"label":"2", "x":2, "y":1.5}, + {"label":"3", "x":3, "y":1.5}, + {"label":"4", "x":4, "y":1.5}, + {"label":"5", "x":5, "y":1.5}, + {"label":"6", "x":6, "y":1.5}, + {"label":"7", "x":7, "y":1.5}, + {"label":"8", "x":8, "y":1.5}, + {"label":"9", "x":9, "y":1.5}, + {"label":"0", "x":10, "y":1.5}, + {"label":"-", "x":11, "y":1.5}, + {"label":"ˆ", "x":12, "y":1.5}, + {"label":"JIS Yen", "x":13, "y":1.5}, + {"label":"Back Space", "x":14, "y":1.5}, + {"label":"Insert", "x":15.25, "y":1.5}, + {"label":"Home", "x":16.25, "y":1.5}, + {"label":"Page Up", "x":17.25, "y":1.5}, + {"label":"Num Lock", "x":18.5, "y":1.5}, + {"label":"Num /", "x":19.5, "y":1.5}, + {"label":"Num *", "x":20.5, "y":1.5}, + {"label":"Num -", "x":21.5, "y":1.5}, + {"label":"Tab", "x":0, "y":2.5, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.5}, + {"label":"W", "x":2.5, "y":2.5}, + {"label":"E", "x":3.5, "y":2.5}, + {"label":"R", "x":4.5, "y":2.5}, + {"label":"T", "x":5.5, "y":2.5}, + {"label":"Y", "x":6.5, "y":2.5}, + {"label":"U", "x":7.5, "y":2.5}, + {"label":"I", "x":8.5, "y":2.5}, + {"label":"O", "x":9.5, "y":2.5}, + {"label":"P", "x":10.5, "y":2.5}, + {"label":"@", "x":11.5, "y":2.5}, + {"label":"[", "x":12.5, "y":2.5}, + {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, + {"label":"Delete", "x":15.25, "y":2.5}, + {"label":"End", "x":16.25, "y":2.5}, + {"label":"Page Down", "x":17.25, "y":2.5}, + {"label":"Num 7", "x":18.5, "y":2.5}, + {"label":"Num 8", "x":19.5, "y":2.5}, + {"label":"Num 9", "x":20.5, "y":2.5}, + {"label":"Num +", "x":21.5, "y":2.5, "h":2}, + {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, + {"label":"A", "x":1.75, "y":3.5}, + {"label":"S", "x":2.75, "y":3.5}, + {"label":"D", "x":3.75, "y":3.5}, + {"label":"F", "x":4.75, "y":3.5}, + {"label":"G", "x":5.75, "y":3.5}, + {"label":"H", "x":6.75, "y":3.5}, + {"label":"J", "x":7.75, "y":3.5}, + {"label":"K", "x":8.75, "y":3.5}, + {"label":"L", "x":9.75, "y":3.5}, + {"label":";", "x":10.75, "y":3.5}, + {"label":":", "x":11.75, "y":3.5}, + {"label":"]", "x":12.75, "y":3.5}, + {"label":"Num 4", "x":18.5, "y":3.5}, + {"label":"Num 5", "x":19.5, "y":3.5}, + {"label":"Num 6", "x":20.5, "y":3.5}, + {"label":"Shift", "x":0, "y":4.5, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.5}, + {"label":"X", "x":3.25, "y":4.5}, + {"label":"C", "x":4.25, "y":4.5}, + {"label":"V", "x":5.25, "y":4.5}, + {"label":"B", "x":6.25, "y":4.5}, + {"label":"N", "x":7.25, "y":4.5}, + {"label":"M", "x":8.25, "y":4.5}, + {"label":",", "x":9.25, "y":4.5}, + {"label":".", "x":10.25, "y":4.5}, + {"label":"/", "x":11.25, "y":4.5}, + {"label":"JIS \\", "x":12.25, "y":4.5}, + {"label":"Shift", "x":13.25, "y":4.5, "w":1.75}, + {"label":"Up", "x":16.25, "y":4.5}, + {"label":"Num 1", "x":18.5, "y":4.5}, + {"label":"Num 2", "x":19.5, "y":4.5}, + {"label":"Num 3", "x":20.5, "y":4.5}, + {"label":"Num Enter", "x":21.5, "y":4.5, "h":2}, + {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, + {"label":"GUI", "x":1.25, "y":5.5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, + {"label":"JIS Muhenkan", "x":3.75, "y":5.5, "w":1.25}, + {"label":"Space", "x":5, "y":5.5, "w":2.5}, + {"label":"JIS Henkan", "x":7.5, "y":5.5, "w":1.25}, + {"label":"JIS Hiragana / Katakana", "x":8.75, "y":5.5, "w":1.25}, + {"label":"Alt", "x":10, "y":5.5, "w":1.25}, + {"label":"GUI", "x":11.25, "y":5.5, "w":1.25}, + {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, + {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, + {"label":"Left", "x":15.25, "y":5.5}, + {"label":"Down", "x":16.25, "y":5.5}, + {"label":"Right", "x":17.25, "y":5.5}, + {"label":"Num 0", "x":18.5, "y":5.5, "w":2}, + {"label":"Num .", "x":20.5, "y":5.5} + ] + } + } +} diff --git a/keyboards/converter/usb_usb/keymaps/ble/keymap.c b/keyboards/converter/usb_usb/keymaps/ble/keymap.c index 094bd95693..190b3319fe 100644 --- a/keyboards/converter/usb_usb/keymaps/ble/keymap.c +++ b/keyboards/converter/usb_usb/keymaps/ble/keymap.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "usb_usb.h" +#include QMK_KEYBOARD_H const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { /* 0: plain Qwerty without layer switching @@ -36,9 +36,9 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| * `-----------------------------------------------------------' `-----------' `---------------' `-------' */ - [0] = KEYMAP_ALL( + [0] = LAYOUT_all( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, - 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, + 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, 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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY, @@ -47,18 +47,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { ), }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch(id) { - default: - return MACRO_NONE; - } -}; - - void matrix_init_user(void) { } diff --git a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c index 0cc66fd53d..6dfd1ad79e 100644 --- a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c +++ b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "usb_usb.h" +#include QMK_KEYBOARD_H const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { /* 0: plain Qwerty without layer switching @@ -36,7 +36,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| * `-----------------------------------------------------------' `-----------' `---------------' `-------' */ - // KEYMAP_ALL( + // LAYOUT_all( // F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, // ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, // GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, @@ -45,17 +45,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { // LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE, // LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT // ), - KEYMAP_ALL( + LAYOUT_all( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, - 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, + 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, 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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY, 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_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT ), - KEYMAP_ALL( - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + LAYOUT_all( + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______, KC_GRV, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______, KC_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______, @@ -65,18 +65,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { ), }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch(id) { - default: - return MACRO_NONE; - } -}; - - void matrix_init_user(void) { } @@ -113,7 +101,7 @@ void led_set_user(uint8_t usb_led) { * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent| * `-----------------------------------------------------------' `-----------' `---------------' */ - KEYMAP( + LAYOUT_ansi( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, @@ -138,13 +126,13 @@ void led_set_user(uint8_t usb_led) { * |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | * `-----------------------------------------------------------' `-----------' `---------------' */ - KEYMAP_ISO( + LAYOUT_iso( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT, - LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT + LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT ), /* JIS layout @@ -163,13 +151,13 @@ void led_set_user(uint8_t usb_led) { * |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | * `-----------------------------------------------------------' `-----------' `---------------' */ - KEYMAP_JIS( + LAYOUT_jis( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT, - LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT + LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT ), /* Colemak http://colemak.com @@ -185,7 +173,7 @@ void led_set_user(uint8_t usb_led) { * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| * `----------------------------------------------------------' */ - KEYMAP_ALL( + LAYOUT_all( F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, @@ -208,7 +196,7 @@ void led_set_user(uint8_t usb_led) { * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| * `-----------------------------------------------------------' */ - KEYMAP_ALL( + LAYOUT_all( F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, @@ -231,7 +219,7 @@ void led_set_user(uint8_t usb_led) { * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| * `-----------------------------------------------------------' */ - KEYMAP_ALL( + LAYOUT_all( F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, @@ -265,7 +253,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| * `-----------------------------------------------------------' `-----------' `---------------' `-------' */ - [0] = KEYMAP_ALL( + [0] = LAYOUT_all( F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP, ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN, @@ -288,7 +276,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [1] = KEYMAP_ALL( + [1] = LAYOUT_all( TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, diff --git a/keyboards/converter/usb_usb/keymaps/default/keymap.c b/keyboards/converter/usb_usb/keymaps/default/keymap.c index 9817a607d3..170ed31ef8 100644 --- a/keyboards/converter/usb_usb/keymaps/default/keymap.c +++ b/keyboards/converter/usb_usb/keymaps/default/keymap.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "usb_usb.h" +#include QMK_KEYBOARD_H const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { /* 0: plain Qwerty without layer switching @@ -36,17 +36,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut| * `-----------------------------------------------------------' `-----------' `---------------' `-------' */ - [0] = KEYMAP_ALL( + [0] = LAYOUT_all( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, - 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, + 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP, 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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_MENU, KC_UNDO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY, 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_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT ), - [1] = KEYMAP_ALL( - ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + [1] = LAYOUT_all( + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______, @@ -56,18 +56,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { ), }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch(id) { - default: - return MACRO_NONE; - } -}; - - void matrix_init_user(void) { } diff --git a/keyboards/converter/usb_usb/usb_usb.h b/keyboards/converter/usb_usb/usb_usb.h index c31fae1d0f..e0c7c9c0d4 100644 --- a/keyboards/converter/usb_usb/usb_usb.h +++ b/keyboards/converter/usb_usb/usb_usb.h @@ -62,7 +62,7 @@ along with this program. If not, see . * * TODO: use same keycode to pass through instead of KC_NO? */ -#define KEYMAP_ALL( \ +#define LAYOUT_all( \ K68,K69,K6A,K6B,K6C,K6D,K6E,K6F,K70,K71,K72,K73, \ K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, K81,K80,K7F,K66, K75, \ K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, K78,K79, \ @@ -120,21 +120,21 @@ along with this program. If not, see . * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent| * `-----------------------------------------------------------' `-----------' `---------------' */ -#define KEYMAP( \ +#define LAYOUT_ansi( \ K29,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \ K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \ K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C,K4D,K4E, K5F,K60,K61, \ K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, K5C,K5D,K5E,K57, \ KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B, \ KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58 \ -) KEYMAP_ALL( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \ - K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K31, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \ - K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, KC_NO, K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \ - KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \ - KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \ +) LAYOUT_all( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \ + K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K31, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \ + K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, KC_NO, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \ + KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \ + KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \ ) /* ,---. ,---------------. ,---------------. ,---------------. ,-----------. @@ -152,21 +152,21 @@ along with this program. If not, see . * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | * `-----------------------------------------------------------' `-----------' `---------------' */ -#define KEYMAP_ISO( \ +#define LAYOUT_iso( \ K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \ K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \ K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K28, K4C,K4D,K4E, K5F,K60,K61,K57, \ K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \ KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B,K58, \ KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \ -) KEYMAP_ALL( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \ - K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \ - K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \ - KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \ - KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \ +) LAYOUT_all( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \ + K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \ + K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \ + KE1, K64, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \ + KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \ ) /* ,---. ,---------------. ,---------------. ,---------------. ,-----------. @@ -184,20 +184,20 @@ along with this program. If not, see . * |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| | * `-----------------------------------------------------------' `-----------' `---------------' */ -#define KEYMAP_JIS( \ +#define LAYOUT_jis( \ K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \ K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, \ K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K28, K4C,K4D,K4E, K5F,K60,K61,K57, \ K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \ KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,K58, \ KE0,KE3,KE2,K8B, K2C, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \ -) KEYMAP_ALL( \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \ - K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \ - K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \ - KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \ - KE0,KE3,KE2,K8B,KC_NO, K2C, KC_NO, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \ +) LAYOUT_all( \ + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, K89, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \ + K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \ + K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \ + KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, K87, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \ + KE0, KE3, KE2, K8B, KC_NO, K2C, KC_NO, K8A, K88, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \ ) #endif From 3946ea21413b56ad50e55482ff5c43b576adc1d7 Mon Sep 17 00:00:00 2001 From: TurboMech <32869044+TurboMech@users.noreply.github.com> Date: Sun, 4 Nov 2018 10:39:58 -0500 Subject: [PATCH 0023/1763] Keyboard: adding Espectro (#4343) * added Espectro Added Espectro keyboard from MechKeys.ca * Update keyboards/espectro/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/espectro.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/default/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/default/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/config.h Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/keymaps/mac/keymap.c Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/readme.md Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/readme.md Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/readme.md Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/readme.md Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * Update keyboards/espectro/rules.mk Co-Authored-By: TurboMech <32869044+TurboMech@users.noreply.github.com> * fixing Espectro pull request * fixing macros in mac keymap --- keyboards/espectro/config.h | 70 ++++++++ keyboards/espectro/espectro.c | 76 +++++++++ keyboards/espectro/espectro.h | 91 +++++++++++ keyboards/espectro/keymaps/default/keymap.c | 89 +++++++++++ keyboards/espectro/keymaps/mac/config.h | 22 +++ keyboards/espectro/keymaps/mac/keymap.c | 167 ++++++++++++++++++++ keyboards/espectro/keymaps/mac/readme.md | 56 +++++++ keyboards/espectro/readme.md | 15 ++ keyboards/espectro/rules.mk | 61 +++++++ 9 files changed, 647 insertions(+) create mode 100755 keyboards/espectro/config.h create mode 100755 keyboards/espectro/espectro.c create mode 100755 keyboards/espectro/espectro.h create mode 100755 keyboards/espectro/keymaps/default/keymap.c create mode 100644 keyboards/espectro/keymaps/mac/config.h create mode 100644 keyboards/espectro/keymaps/mac/keymap.c create mode 100644 keyboards/espectro/keymaps/mac/readme.md create mode 100644 keyboards/espectro/readme.md create mode 100755 keyboards/espectro/rules.mk diff --git a/keyboards/espectro/config.h b/keyboards/espectro/config.h new file mode 100755 index 0000000000..34852df43b --- /dev/null +++ b/keyboards/espectro/config.h @@ -0,0 +1,70 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0xCA96 +#define DEVICE_VER 0x0001 +#define MANUFACTURER MECHKEYS +#define PRODUCT Espectro +#define DESCRIPTION 96% keyboard + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 13 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B7, B3, E6, F0, D5, D4, D6, C7 } +#define MATRIX_COL_PINS { C6, F1, F4, F5, F6, F7, D7, B4, B5, D0, D1, D2, D3} +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_LEVELS 5 + + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define RGB_DI_PIN E2 +#ifdef RGB_DI_PIN +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 10 +#define RGBLIGHT_VAL_STEP 10 + +#define RGBLIGHT_ANIMATIONS + +#endif + diff --git a/keyboards/espectro/espectro.c b/keyboards/espectro/espectro.c new file mode 100755 index 0000000000..13030cdd41 --- /dev/null +++ b/keyboards/espectro/espectro.c @@ -0,0 +1,76 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + + +#include QMK_KEYBOARD_H +#include "quantum.h" + + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + DDRB |= (1 << 0); PORTB &= ~(1 << 0); + } else { + DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 2); PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); PORTB &= ~(1 << 2); + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + DDRB |= (1 << 1); PORTB &= ~(1 << 1); + } else { + DDRB &= ~(1 << 1); PORTB &= ~(1 << 1); + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} + diff --git a/keyboards/espectro/espectro.h b/keyboards/espectro/espectro.h new file mode 100755 index 0000000000..3d6ea466d3 --- /dev/null +++ b/keyboards/espectro/espectro.h @@ -0,0 +1,91 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + + +#ifndef ESPECTRO_H +#define ESPECTRO_H + +#include "quantum.h" + + +//Arrow keys and 1.75u shift +#define LAYOUT_default( \ +K000, K001, K002, K003, K004, K600, K601, K602, K603, K005, K006, K007, K008, K702, K009, K010, K011, K012, K712, \ +K100, K101, K102, K103, K104, K604, K605, K606, K607, K105, K106, K107, K108, K701, K109, K110, K111, K112, \ + K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K703, K209, K210, K211, K212, \ + K300, K301, K302, K303, K304, K612, K705, K706, K707, K305, K306, K307, K308, K309, K310, K311, \ + K400, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K704, K409, K410, K411, K412, \ +K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO }, \ + { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412 }, \ + { K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, KC_NO }, \ + { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610, K611, K612 }, \ + { KC_NO, K701, K702, K703, K704, K705, K706, K707, K708, K709, K710, K711, K712 }, \ +} + +// Split numpad (enter, 0), split shifts (right, left), split backspace +// This is more of an example of every possible keycode placement +#define LAYOUT_split_shift_and_bs( \ +K000, K001, K002, K003, K004, K600, K601, K602, K603, K005, K006, K007, K008, K702, K009, K010, K011, K012, K712, \ +K100, K101, K102, K103, K104, K604, K605, K606, K607, K105, K106, K107, K108, K700, K701, K109, K110, K111, K112, \ + K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K703, K209, K210, K211, K212, \ + K300, K301, K302, K303, K304, K612, K705, K706, K707, K305, K306, K307, K308, K309, K310, K311, K312, \ + K400, K401, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K704, K409, K410, K411, K412, \ +K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412 }, \ + { K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512 }, \ + { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610, K611, K612 }, \ + { K701, K701, K702, K703, K704, K705, K706, K707, K708, K709, K710, K711, K712 }, \ +} + + + + +/* +Placement of every possible switch defined below. +x2 means the diode allows two possible positions for the switch + +#define LAYOUT_all( \ +K000, K001, K002, K003, K004, K600, K601, K602, K603, K005, K006, K007, K008, K702, K009, K010, K011, K012, K712, \ +K100, K101, K102, K103, K104, K604, K605, K606, K607, K105, K106, K107, K108, K700, K701x2, K109, K110, K111, K112, \ +K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K703, K209, K210, K211, K212, \ + K308, K212, \ +K300, K300, K301, K302, K304, K612, K705, K706, K707, K305, K306, K307, K703, K308, K309, K310, K311, K312, \ +K400x2, K401, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K408, K704, K409, K410, K411, K412, \ + K412, \ +K500x2, K501x2, K502, K503x3, K504x3, K505x2, K506x2, K507x2, K508x2, K509, K510x2, K511, K512 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412 }, \ + { K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512 }, \ + { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610, K611, K612 }, \ + { K700, K701, K702, K703, K704, K705, K706, K707, K708, K709, K710, K711, K712 }, \ +} +*/ + +#endif diff --git a/keyboards/espectro/keymaps/default/keymap.c b/keyboards/espectro/keymaps/default/keymap.c new file mode 100755 index 0000000000..aeff733fc1 --- /dev/null +++ b/keyboards/espectro/keymaps/default/keymap.c @@ -0,0 +1,89 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + + +#include QMK_KEYBOARD_H +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +#define _BL 0 //Base layer +#define _FN1 1 //Function layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* BL +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | END | P UP | P DOWN | DEL | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | BACK | NUM | | | | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - | +|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + | +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER | +| | | | | | | MO | | | | | | | +| CTRL | LGUI | L ALT | SPACE | R ALT | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + [_BL] = LAYOUT_default( + 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_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_PGUP, KC_PGDN, + 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_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, + 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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT + ), + +/* FN_1 +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | VOL | VOL | NEXT | | | +| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | | +| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | | | | | | DELETE | | | | | +|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________| +| | BACK | BACK | | | | | | | | | | | | | | | | +| | LIGHT | LIGHT | | | | | | | | | | | | | | | | +|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| | +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + [_FN1] = LAYOUT_default( + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_HOME, KC_END, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, + _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + diff --git a/keyboards/espectro/keymaps/mac/config.h b/keyboards/espectro/keymaps/mac/config.h new file mode 100644 index 0000000000..a18495221b --- /dev/null +++ b/keyboards/espectro/keymaps/mac/config.h @@ -0,0 +1,22 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + +#pragma once + +#define TAPPING_TOGGLE 2 + +// place overrides here + diff --git a/keyboards/espectro/keymaps/mac/keymap.c b/keyboards/espectro/keymaps/mac/keymap.c new file mode 100644 index 0000000000..4b72ff0aac --- /dev/null +++ b/keyboards/espectro/keymaps/mac/keymap.c @@ -0,0 +1,167 @@ +/* Copyright 2018 @TurboMech /u/TurboMech @A9entOran9e#6134 + * + * 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 . + */ + + +#include QMK_KEYBOARD_H + +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +#define _QWERTY 0 //BASE layer +#define _FUNCTION 1 //Function layer +#define _WINDOWS 2 //Windows layer + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EXPOSE, // Expose (LCTRL + UP) + LAUNCH, + DOCK, + SCRCAP, + CS1, + CS2, + QALL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base Layer +____________________________________________________________________________________________________________________________________________________________________________ +| | SCREEN | SCREEN | | |SHOW | TOGGLE |SCREEN |CUSTOM |CUSTOM |PREVIOUS| PLAY/ | NEXT | | | | | | | +| ESC |BRIGHTEN| DIM | EXPOSE |LAUNCHPA|DESKTOP | DOCK |CAPTURE |SHORTCUT|SHORTCUT| TRACK | PAUSE | TRACK | MUTE | VOL DN | VOL UP | PG UP |PG DOWN | POWER | +|________|________|________|________|________|________|________|________|___1____|___2____|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | BACK | | | | | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | DELETE | / | * | - | +|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + | +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER | +| | | | | | | TT | | | | | | | +| CTRL | L ALT | L GUI | SPACE | R GUI | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | | +|__________|__________| COMMAND |________________________________________________________|COMMAND |________|________|________|________|________|________|________|________| + */ + + [_QWERTY] = LAYOUT_default( + KC_ESC, KC_F14, KC_F15, EXPOSE, LAUNCH, KC_F11, DOCK, SCRCAP, CS1, CS2, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_PGUP, KC_PGDN, KC_POWER, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_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, + 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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, TT(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT + ), +/* FN1 - SEE readme.md +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| QUIT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | | HOME | END | RESET | +|_ALL____|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | | +| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | | | | | | DELETE | | | | | +|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________| +| | BACK | BACK | | | | | | | | | | | | | | | | +| | LIGHT | LIGHT | | | | | | | | | | | | | | | | +|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| | +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + + [_FUNCTION] = LAYOUT_default( + QALL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_HOME, KC_END, RESET, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, + _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, TO(2), _______, _______, _______, _______, _______, _______ + + ), + +/* Windows layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | HOME | END | P UP | P DOWN | MENU | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | BACK | NUM | | | | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - | +|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + | +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER | +| | | | | | | TO | | | | | | | +| L GUI | L ALT | L CTL | SPACE | R CTL | R ALT |LAYER 0 | LEFT | DOWN | RIGHT | 0 | . | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + + [_WINDOWS] = LAYOUT_default( + 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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_MENU, + 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_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, + 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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LGUI, KC_LALT, KC_LCTL, KC_SPC, KC_RCTL, KC_RALT, TO(0), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT + ), +}; + + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + // dynamically generate these. + case EXPOSE: + SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_UP) SS_UP(X_LCTRL)); + return false; + case LAUNCH: + SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_L) SS_UP(X_LCTRL)); + return false; + case DOCK: + SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_D) SS_UP(X_LGUI) SS_UP(X_LALT)); + return false; + case SCRCAP: //screen capture + SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_S) SS_UP(X_LCTRL)); + return false; + case CS1: //custom shortcut 1 + SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_1) SS_UP(X_LGUI) SS_UP(X_LALT)); + return false; + case CS2: //custom shortcut 2 + SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_2) SS_UP(X_LGUI) SS_UP(X_LALT)); + return false; + case QALL: //quit all applications + SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_Q) SS_UP(X_LGUI) SS_UP(X_LALT)); + return false; + } + return false; + } + return true; +}; + diff --git a/keyboards/espectro/keymaps/mac/readme.md b/keyboards/espectro/keymaps/mac/readme.md new file mode 100644 index 0000000000..fb62260181 --- /dev/null +++ b/keyboards/espectro/keymaps/mac/readme.md @@ -0,0 +1,56 @@ +# This is u/TurboMech's keyboard layout for Espectro. + +## It is designed for Mac OS, due to the specific functions created. + +### Here is the layout found in the keymap.c file. +##### I use shortcuts for the Function row (above number row) listed below + - Scrn Bright Up: F14 + - Scrn Bright Down: F15 + - Expose: LCTRL + Up + - Launchpad: LCTRL + L + - Show Desktop: F11 + - Show/Hide Dock: LALT + LGUI + D + - Screen Capture: LCTRL + S + - Custom Shortcut 1: LCTRL + LGUI + 1 + - Custom Shortcut 2: LCTRL + LGUI + 2 + - use the custom shortcuts for whatever you want: launch an application, a macro, etc. + - Play/Pause: exactly that + - Mute / Volume Up / Volume Down: exactly what it says + - QALL: Quit all applications + + ##### Going down the right side from Vol Down: + - POWER: this serves as the power button on Mac's only. Press and hold the button as you would on your Macbook or iMac keyboard. + - Menu: this slides the notification bar on the right side (its the same as on iPhones/ iPads) + +### See below keymaps for how to setup shortcuts on Mac + +#### Base Layer +``` +Needs updating. +``` +#### Function Layer 1 - See above for shortcuts +``` +Needs updating +``` + +#### How to use/ setup shortcuts on Mac +- First navigate to System Preferences > Keyboard > Shortcuts + - You can use any of them in here + - Just set them to the shortcut keys listed above + +#### How to make your own (to launch applications, quit all, etc.) +- Navigate to Automator > New Document > click Service > Choose +- Now we have to setup our shortcut + - Here's how to setup the Quit All Shortcut + - In the right window select the Service recieves dropdown > select No Input + - At the top left click the Name (Search) > type quit > click and hold Quit All Applications > drag to the right hand box (under the Service Recieves) + - **IMPORTANT** You have to click the Run button at the upper right hand corner in order for these to actually work. + - Now click File > Save > save it as Quit All Apps (or whatever you want) / you can also just exit out and it'll ask you if you want to save +- Navigate back to System Preferences > Keyboard > Shortcuts + - The new shortcut can be found under services, set it to one of the shortcuts I listed above and done +- The same applies for applications in the Name (search) just type the application you want to have as shortcut. Don't forget to run it, then do the same steps + to set it up as a shortcut. + + + + diff --git a/keyboards/espectro/readme.md b/keyboards/espectro/readme.md new file mode 100644 index 0000000000..c4c0edc7f7 --- /dev/null +++ b/keyboards/espectro/readme.md @@ -0,0 +1,15 @@ +# Espectro + +![Espectro](https://cdn.shopify.com/s/files/1/1697/5323/products/IMG_0162_53a5ca83-3ce5-4741-92e8-10f769cf5ee1_1024x1024.jpg?v=1540701787) + +A 96% keyboard made and sold by MECHKEYS [More info on MECHKEYS](https://mechkeys.ca). + +Keyboard Maintainer: [TurboMech](https://github.com/TurboMech) +Hardware Supported: Espectro +Hardware Availability: [MECHKEYS](https://mechkeys.ca) + +Make example for this keyboard (after setting up your build environment): + + make espectro:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/espectro/rules.mk b/keyboards/espectro/rules.mk new file mode 100755 index 0000000000..2c28fe8504 --- /dev/null +++ b/keyboards/espectro/rules.mk @@ -0,0 +1,61 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = atmel-dfu + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # 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 = yes # Commands for debug and configuration +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes From e9fd42df71ebc367fccbbf918a1794498aa57914 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sun, 4 Nov 2018 09:32:42 -0800 Subject: [PATCH 0024/1763] converter/adb_usb Configurator support and adb_usb.h cleanup (#4348) * converter/adb_usb: Configurator support Note: LAYOUT_ext_ansi has a blank space between the Spacebar and the Right Alt/Option key when loaded in the Configurator. This is deliberate. Stock Apple Extended Keyboards and AEK IIs send the scan code for Left Command when either Command key is used. (This is noted already in the readme.) That being the case, the Command keys cannot be assigned to different functions. Whichever keycode is placed on Left Command will be used for both Command keys. * converter/adb_usb: adb_usb.h cleanup - replaced KEYMAP_COMMON_H with ADB_USB_H - white space changes for visual alignment in LAYOUT_ext_ansi macro --- keyboards/converter/adb_usb/adb_usb.h | 12 +- keyboards/converter/adb_usb/info.json | 204 ++++++++++++++++++++++++++ 2 files changed, 210 insertions(+), 6 deletions(-) create mode 100644 keyboards/converter/adb_usb/info.json diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h index 491db95f1c..8691adcc65 100644 --- a/keyboards/converter/adb_usb/adb_usb.h +++ b/keyboards/converter/adb_usb/adb_usb.h @@ -17,8 +17,8 @@ along with this program. If not, see . Ported to QMK by Peter Roe */ -#ifndef KEYMAP_COMMON_H -#define KEYMAP_COMMON_H +#ifndef ADB_USB_H +#define ADB_USB_H #include "quantum.h" @@ -58,10 +58,10 @@ Ported to QMK by Peter Roe { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \ { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \ - { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \ - { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \ - { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \ - { K78, K79, K7A, K7B, K7C, K7D, KC_NO, K7F } \ + { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \ + { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \ + { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \ + { K78, K79, K7A, K7B, K7C, K7D, KC_NO, K7F } \ } /* M0116 Apple Standard Keyboard ANSI diff --git a/keyboards/converter/adb_usb/info.json b/keyboards/converter/adb_usb/info.json new file mode 100644 index 0000000000..e06f9c1adb --- /dev/null +++ b/keyboards/converter/adb_usb/info.json @@ -0,0 +1,204 @@ +{ + "keyboard_name": "ADB to USB Keyboard Converter", + "url": "", + "maintainer": "qmk", + "width": 22.5, + "height": 7, + "layouts": { + "LAYOUT_ext_ansi": { + "layout": [ + {"label":"Escape", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print Screen", "x":15.25, "y":0}, + {"label":"Scroll Lock", "x":16.25, "y":0}, + {"label":"Pause", "x":17.25, "y":0}, + {"label":"Eject", "x":21.5, "y":0}, + {"label":"`", "x":0, "y":2}, + {"label":"1", "x":1, "y":2}, + {"label":"2", "x":2, "y":2}, + {"label":"3", "x":3, "y":2}, + {"label":"4", "x":4, "y":2}, + {"label":"5", "x":5, "y":2}, + {"label":"6", "x":6, "y":2}, + {"label":"7", "x":7, "y":2}, + {"label":"8", "x":8, "y":2}, + {"label":"9", "x":9, "y":2}, + {"label":"0", "x":10, "y":2}, + {"label":"-", "x":11, "y":2}, + {"label":"=", "x":12, "y":2}, + {"label":"Backspace", "x":13, "y":2, "w":2}, + {"label":"Insert", "x":15.25, "y":2}, + {"label":"Home", "x":16.25, "y":2}, + {"label":"Page Up", "x":17.25, "y":2}, + {"label":"Num Lock", "x":18.5, "y":2}, + {"label":"Num =", "x":19.5, "y":2}, + {"label":"Num /", "x":20.5, "y":2}, + {"label":"Num *", "x":21.5, "y":2}, + {"label":"Tab", "x":0, "y":3, "w":1.5}, + {"label":"Q", "x":1.5, "y":3}, + {"label":"W", "x":2.5, "y":3}, + {"label":"E", "x":3.5, "y":3}, + {"label":"R", "x":4.5, "y":3}, + {"label":"T", "x":5.5, "y":3}, + {"label":"Y", "x":6.5, "y":3}, + {"label":"U", "x":7.5, "y":3}, + {"label":"I", "x":8.5, "y":3}, + {"label":"O", "x":9.5, "y":3}, + {"label":"P", "x":10.5, "y":3}, + {"label":"[", "x":11.5, "y":3}, + {"label":"]", "x":12.5, "y":3}, + {"label":"\\", "x":13.5, "y":3, "w":1.5}, + {"label":"Delete", "x":15.25, "y":3}, + {"label":"End", "x":16.25, "y":3}, + {"label":"Page Down", "x":17.25, "y":3}, + {"label":"Num 7", "x":18.5, "y":3}, + {"label":"Num 8", "x":19.5, "y":3}, + {"label":"Num 9", "x":20.5, "y":3}, + {"label":"Num -", "x":21.5, "y":3}, + {"label":"Lcap", "x":0, "y":4, "w":1.75}, + {"label":"A", "x":1.75, "y":4}, + {"label":"S", "x":2.75, "y":4}, + {"label":"D", "x":3.75, "y":4}, + {"label":"F", "x":4.75, "y":4}, + {"label":"G", "x":5.75, "y":4}, + {"label":"H", "x":6.75, "y":4}, + {"label":"J", "x":7.75, "y":4}, + {"label":"K", "x":8.75, "y":4}, + {"label":"L", "x":9.75, "y":4}, + {"label":";", "x":10.75, "y":4}, + {"label":"\"", "x":11.75, "y":4}, + {"label":"Enter", "x":12.75, "y":4, "w":2.25}, + {"label":"Num 4", "x":18.5, "y":4}, + {"label":"Num 5", "x":19.5, "y":4}, + {"label":"Num 6", "x":20.5, "y":4}, + {"label":"Num +", "x":21.5, "y":4}, + {"label":"Shift", "x":0, "y":5, "w":2.25}, + {"label":"Z", "x":2.25, "y":5}, + {"label":"X", "x":3.25, "y":5}, + {"label":"C", "x":4.25, "y":5}, + {"label":"V", "x":5.25, "y":5}, + {"label":"B", "x":6.25, "y":5}, + {"label":"N", "x":7.25, "y":5}, + {"label":"M", "x":8.25, "y":5}, + {"label":",", "x":9.25, "y":5}, + {"label":".", "x":10.25, "y":5}, + {"label":"/", "x":11.25, "y":5}, + {"label":"Shift", "x":12.25, "y":5, "w":2.75}, + {"label":"Up", "x":16.25, "y":5}, + {"label":"Num 1", "x":18.5, "y":5}, + {"label":"Num 2", "x":19.5, "y":5}, + {"label":"Num 3", "x":20.5, "y":5}, + {"label":"Ctrl", "x":0, "y":6, "w":1.5}, + {"label":"Alt", "x":1.5, "y":6, "w":1.25}, + {"label":"Command", "x":2.75, "y":6, "w":1.5}, + {"label":"Space", "x":4.25, "y":6, "w":6.5}, + {"label":"Alt", "x":12.25, "y":6, "w":1.25}, + {"label":"Ctrl", "x":13.5, "y":6, "w":1.5}, + {"label":"Left", "x":15.25, "y":6}, + {"label":"Down", "x":16.25, "y":6}, + {"label":"Right", "x":17.25, "y":6}, + {"label":"Num 0", "x":18.5, "y":6, "w":2}, + {"label":"Num .", "x":20.5, "y":6}, + {"label":"Num Enter", "x":21.5, "y":5, "h":2} + ] + }, + "LAYOUT_m0116_ansi": { + "width": 19.5, + "height": 6.25, + "layout": [ + {"label":"Power", "x":5, "y":0, "w":2}, + {"label":"Esc", "x":0, "y":1.25}, + {"label":"1", "x":1, "y":1.25}, + {"label":"2", "x":2, "y":1.25}, + {"label":"3", "x":3, "y":1.25}, + {"label":"4", "x":4, "y":1.25}, + {"label":"5", "x":5, "y":1.25}, + {"label":"6", "x":6, "y":1.25}, + {"label":"7", "x":7, "y":1.25}, + {"label":"8", "x":8, "y":1.25}, + {"label":"9", "x":9, "y":1.25}, + {"label":"0", "x":10, "y":1.25}, + {"label":"-", "x":11, "y":1.25}, + {"label":"=", "x":12, "y":1.25}, + {"label":"Delete", "x":13, "y":1.25, "w":1.5}, + {"label":"Clear", "x":15.5, "y":1.25}, + {"label":"Num =", "x":16.5, "y":1.25}, + {"label":"Num /", "x":17.5, "y":1.25}, + {"label":"Num *", "x":18.5, "y":1.25}, + {"label":"Tab", "x":0, "y":2.25, "w":1.5}, + {"label":"Q", "x":1.5, "y":2.25}, + {"label":"W", "x":2.5, "y":2.25}, + {"label":"E", "x":3.5, "y":2.25}, + {"label":"R", "x":4.5, "y":2.25}, + {"label":"T", "x":5.5, "y":2.25}, + {"label":"Y", "x":6.5, "y":2.25}, + {"label":"U", "x":7.5, "y":2.25}, + {"label":"I", "x":8.5, "y":2.25}, + {"label":"O", "x":9.5, "y":2.25}, + {"label":"P", "x":10.5, "y":2.25}, + {"label":"[", "x":11.5, "y":2.25}, + {"label":"]", "x":12.5, "y":2.25}, + {"label":"Num 7", "x":15.5, "y":2.25}, + {"label":"Num 8", "x":16.5, "y":2.25}, + {"label":"Num 9", "x":17.5, "y":2.25}, + {"label":"Num +", "x":18.5, "y":2.25}, + {"label":"Ctrl", "x":0, "y":3.25, "w":1.75}, + {"label":"A", "x":1.75, "y":3.25}, + {"label":"S", "x":2.75, "y":3.25}, + {"label":"D", "x":3.75, "y":3.25}, + {"label":"F", "x":4.75, "y":3.25}, + {"label":"G", "x":5.75, "y":3.25}, + {"label":"H", "x":6.75, "y":3.25}, + {"label":"J", "x":7.75, "y":3.25}, + {"label":"K", "x":8.75, "y":3.25}, + {"label":"L", "x":9.75, "y":3.25}, + {"label":";", "x":10.75, "y":3.25}, + {"label":"'", "x":11.75, "y":3.25}, + {"label":"Return", "x":12.75, "y":3.25, "w":1.75}, + {"label":"Num 4", "x":15.5, "y":3.25}, + {"label":"Num 5", "x":16.5, "y":3.25}, + {"label":"Num 6", "x":17.5, "y":3.25}, + {"label":"Num -", "x":18.5, "y":3.25}, + {"label":"Shift", "x":0, "y":4.25, "w":2.25}, + {"label":"Z", "x":2.25, "y":4.25}, + {"label":"X", "x":3.25, "y":4.25}, + {"label":"C", "x":4.25, "y":4.25}, + {"label":"V", "x":5.25, "y":4.25}, + {"label":"B", "x":6.25, "y":4.25}, + {"label":"N", "x":7.25, "y":4.25}, + {"label":"M", "x":8.25, "y":4.25}, + {"label":",", "x":9.25, "y":4.25}, + {"label":".", "x":10.25, "y":4.25}, + {"label":"/", "x":11.25, "y":4.25}, + {"label":"Shift", "x":12.25, "y":4.25, "w":2.25}, + {"label":"Num 1", "x":15.5, "y":4.25}, + {"label":"Num 2", "x":16.5, "y":4.25}, + {"label":"Num 3", "x":17.5, "y":4.25}, + {"label":"Caps Lock", "x":0, "y":5.25}, + {"label":"Option", "x":1, "y":5.25}, + {"label":"Command", "x":2, "y":5.25, "w":1.75}, + {"label":"`", "x":3.75, "y":5.25}, + {"label":"Space", "x":4.75, "y":5.25, "w":4.75}, + {"label":"\\", "x":9.5, "y":5.25}, + {"label":"Left", "x":10.5, "y":5.25}, + {"label":"Right", "x":11.5, "y":5.25}, + {"label":"Down", "x":12.5, "y":5.25}, + {"label":"Up", "x":13.5, "y":5.25}, + {"label":"Num 0", "x":15.5, "y":5.25, "w":2}, + {"label":"Num .", "x":17.5, "y":5.25}, + {"label":"Num Enter", "x":18.5, "y":4.25, "h":2} + ] + } + } +} From 756d92c1a071b6c481b67a44671308fc9d680afe Mon Sep 17 00:00:00 2001 From: Kosuke Adachi Date: Mon, 5 Nov 2018 03:46:26 +0900 Subject: [PATCH 0025/1763] Keyboard: Update the serial.c of crkbd based on the helix-serial.c (#4349) --- keyboards/crkbd/rev1/serial_config.h | 12 +- keyboards/crkbd/rev1/split_scomm.c | 49 +++-- keyboards/crkbd/rev1/split_scomm.h | 5 +- keyboards/crkbd/rev1/split_util.h | 5 +- keyboards/crkbd/serial.c | 284 ++++++++++++++++++++------- keyboards/crkbd/serial.h | 27 ++- 6 files changed, 277 insertions(+), 105 deletions(-) diff --git a/keyboards/crkbd/rev1/serial_config.h b/keyboards/crkbd/rev1/serial_config.h index 671ed821d2..4fab8e8ddf 100644 --- a/keyboards/crkbd/rev1/serial_config.h +++ b/keyboards/crkbd/rev1/serial_config.h @@ -1,10 +1,4 @@ -#pragma once - -/* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect - +#ifndef SOFT_SERIAL_PIN +#define SOFT_SERIAL_PIN D2 #define SERIAL_USE_MULTI_TRANSACTION +#endif diff --git a/keyboards/crkbd/rev1/split_scomm.c b/keyboards/crkbd/rev1/split_scomm.c index 9719eb22ea..ada7867960 100644 --- a/keyboards/crkbd/rev1/split_scomm.c +++ b/keyboards/crkbd/rev1/split_scomm.c @@ -7,8 +7,8 @@ #include #include #include "serial.h" -#ifdef SERIAL_DEBUG_MODE -#include +#ifdef CONSOLE_ENABLE + #include #endif uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; @@ -17,6 +17,7 @@ uint8_t volatile status_com = 0; uint8_t volatile status1 = 0; uint8_t slave_buffer_change_count = 0; uint8_t s_change_old = 0xff; +uint8_t s_change_new = 0xff; SSTD_t transactions[] = { #define GET_SLAVE_STATUS 0 @@ -41,12 +42,12 @@ SSTD_t transactions[] = { void serial_master_init(void) { - soft_serial_initiator_init(transactions); + soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } void serial_slave_init(void) { - soft_serial_target_init(transactions); + soft_serial_target_init(transactions, TID_LIMIT(transactions)); } // 0 => no error @@ -54,19 +55,37 @@ void serial_slave_init(void) // 2 => checksum error int serial_update_buffers(int master_update) { - int status; + int status, smatstatus; static int need_retry = 0; - if( s_change_old != slave_buffer_change_count ) { - status = soft_serial_transaction(GET_SLAVE_BUFFER); - if( status == TRANSACTION_END ) - s_change_old = slave_buffer_change_count; + + if( s_change_old != s_change_new ) { + smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER); + if( smatstatus == TRANSACTION_END ) { + s_change_old = s_change_new; +#ifdef CONSOLE_ENABLE + uprintf("slave matrix = %b %b %b %b %b\n", + serial_slave_buffer[0], serial_slave_buffer[1], + serial_slave_buffer[2], serial_slave_buffer[3], + serial_slave_buffer[4] ); +#endif + } + } else { + // serial_slave_buffer dosen't change + smatstatus = TRANSACTION_END; // dummy status + } + + if( !master_update && !need_retry) { + status = soft_serial_transaction(GET_SLAVE_STATUS); + } else { + status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS); + } + if( status == TRANSACTION_END ) { + s_change_new = slave_buffer_change_count; + need_retry = 0; + } else { + need_retry = 1; } - if( !master_update && !need_retry) - status = soft_serial_transaction(GET_SLAVE_STATUS); - else - status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS); - need_retry = ( status == TRANSACTION_END ) ? 0 : 1; - return status; + return smatstatus; } #endif // SERIAL_USE_MULTI_TRANSACTION diff --git a/keyboards/crkbd/rev1/split_scomm.h b/keyboards/crkbd/rev1/split_scomm.h index 16887eb74f..873d8939d8 100644 --- a/keyboards/crkbd/rev1/split_scomm.h +++ b/keyboards/crkbd/rev1/split_scomm.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef SPLIT_COMM_H +#define SPLIT_COMM_H #ifndef SERIAL_USE_MULTI_TRANSACTION /* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */ @@ -19,3 +20,5 @@ void serial_slave_init(void); int serial_update_buffers(int master_changed); #endif + +#endif /* SPLIT_COMM_H */ diff --git a/keyboards/crkbd/rev1/split_util.h b/keyboards/crkbd/rev1/split_util.h index f593047560..687ca19bd3 100644 --- a/keyboards/crkbd/rev1/split_util.h +++ b/keyboards/crkbd/rev1/split_util.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef SPLIT_KEYBOARD_UTIL_H +#define SPLIT_KEYBOARD_UTIL_H #include #include "eeconfig.h" @@ -14,3 +15,5 @@ void split_keyboard_setup(void); bool has_usb(void); void matrix_master_OLED_init (void); + +#endif diff --git a/keyboards/crkbd/serial.c b/keyboards/crkbd/serial.c index 11ceff0b37..325c29a3f7 100644 --- a/keyboards/crkbd/serial.c +++ b/keyboards/crkbd/serial.c @@ -1,5 +1,10 @@ /* * WARNING: be careful changing this code, it is very timing dependent + * + * 2018-10-28 checked + * avr-gcc 4.9.2 + * avr-gcc 5.4.0 + * avr-gcc 7.3.0 */ #ifndef F_CPU @@ -14,8 +19,58 @@ #include "serial.h" //#include -#ifdef USE_SERIAL +#ifdef SOFT_SERIAL_PIN +#ifdef __AVR_ATmega32U4__ + // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial. + #ifdef USE_I2C + #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1 + #error Using ATmega32U4 I2C, so can not use PD0, PD1 + #endif + #endif + + #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3 + #define SERIAL_PIN_DDR DDRD + #define SERIAL_PIN_PORT PORTD + #define SERIAL_PIN_INPUT PIND + #if SOFT_SERIAL_PIN == D0 + #define SERIAL_PIN_MASK _BV(PD0) + #define EIMSK_BIT _BV(INT0) + #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01))) + #define SERIAL_PIN_INTERRUPT INT0_vect + #elif SOFT_SERIAL_PIN == D1 + #define SERIAL_PIN_MASK _BV(PD1) + #define EIMSK_BIT _BV(INT1) + #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11))) + #define SERIAL_PIN_INTERRUPT INT1_vect + #elif SOFT_SERIAL_PIN == D2 + #define SERIAL_PIN_MASK _BV(PD2) + #define EIMSK_BIT _BV(INT2) + #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21))) + #define SERIAL_PIN_INTERRUPT INT2_vect + #elif SOFT_SERIAL_PIN == D3 + #define SERIAL_PIN_MASK _BV(PD3) + #define EIMSK_BIT _BV(INT3) + #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31))) + #define SERIAL_PIN_INTERRUPT INT3_vect + #endif + #elif SOFT_SERIAL_PIN == E6 + #define SERIAL_PIN_DDR DDRE + #define SERIAL_PIN_PORT PORTE + #define SERIAL_PIN_INPUT PINE + #define SERIAL_PIN_MASK _BV(PE6) + #define EIMSK_BIT _BV(INT6) + #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61))) + #define SERIAL_PIN_INTERRUPT INT6_vect + #else + #error invalid SOFT_SERIAL_PIN value + #endif + +#else + #error serial.c now support ATmega32U4 only +#endif + +//////////////// for backward compatibility //////////////////////////////// #ifndef SERIAL_USE_MULTI_TRANSACTION /* --- USE Simple API (OLD API, compatible with let's split serial.c) */ #if SERIAL_SLAVE_BUFFER_LENGTH > 0 @@ -42,56 +97,118 @@ SSTD_t transactions[] = { }; void serial_master_init(void) -{ soft_serial_initiator_init(transactions); } +{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } void serial_slave_init(void) -{ soft_serial_target_init(transactions); } +{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); } // 0 => no error // 1 => slave did not respond // 2 => checksum error int serial_update_buffers() -{ return soft_serial_transaction(); } +{ + int result; + result = soft_serial_transaction(); + return result; +} -#endif // Simple API (OLD API, compatible with let's split serial.c) +#endif // end of Simple API (OLD API, compatible with let's split serial.c) +//////////////////////////////////////////////////////////////////////////// #define ALWAYS_INLINE __attribute__((always_inline)) #define NO_INLINE __attribute__((noinline)) #define _delay_sub_us(x) __builtin_avr_delay_cycles(x) -// Serial pulse period in microseconds. -#define TID_SEND_ADJUST 14 +// parity check +#define ODD_PARITY 1 +#define EVEN_PARITY 0 +#define PARITY EVEN_PARITY + +#ifdef SERIAL_DELAY + // custom setup in config.h + // #define TID_SEND_ADJUST 2 + // #define SERIAL_DELAY 6 // micro sec + // #define READ_WRITE_START_ADJUST 30 // cycles + // #define READ_WRITE_WIDTH_ADJUST 8 // cycles +#else +// ============ Standard setups ============ + +#ifndef SELECT_SOFT_SERIAL_SPEED +#define SELECT_SOFT_SERIAL_SPEED 1 +// 0: about 189kbps +// 1: about 137kbps (default) +// 2: about 75kbps +// 3: about 39kbps +// 4: about 26kbps +// 5: about 20kbps +#endif -#define SELECT_SERIAL_SPEED 1 -#if SELECT_SERIAL_SPEED == 0 +#if __GNUC__ < 6 + #define TID_SEND_ADJUST 14 +#else + #define TID_SEND_ADJUST 2 +#endif + +#if SELECT_SOFT_SERIAL_SPEED == 0 // Very High speed #define SERIAL_DELAY 4 // micro sec - #define READ_WRITE_START_ADJUST 33 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 1 + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 34 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 1 // High speed #define SERIAL_DELAY 6 // micro sec - #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 2 + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 2 // Middle speed #define SERIAL_DELAY 12 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 3 + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 3 // Low speed #define SERIAL_DELAY 24 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 4 + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 4 // Very Low speed - #define SERIAL_DELAY 50 // micro sec + #define SERIAL_DELAY 36 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 5 + // Ultra Low speed + #define SERIAL_DELAY 48 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #else -#error Illegal Serial Speed -#endif - +#error invalid SELECT_SOFT_SERIAL_SPEED value +#endif /* SELECT_SOFT_SERIAL_SPEED */ +#endif /* SERIAL_DELAY */ #define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) #define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) @@ -105,17 +222,21 @@ int serial_update_buffers() #endif static SSTD_t *Transaction_table = NULL; +static uint8_t Transaction_table_size = 0; +inline static void serial_delay(void) ALWAYS_INLINE; inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); } +inline static void serial_delay_half1(void) ALWAYS_INLINE; inline static void serial_delay_half1(void) { _delay_us(SERIAL_DELAY_HALF1); } +inline static void serial_delay_half2(void) ALWAYS_INLINE; inline static void serial_delay_half2(void) { _delay_us(SERIAL_DELAY_HALF2); @@ -135,6 +256,7 @@ void serial_input_with_pullup(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } +inline static uint8_t serial_read_pin(void) ALWAYS_INLINE; inline static uint8_t serial_read_pin(void) { return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); @@ -152,30 +274,28 @@ void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } -void soft_serial_initiator_init(SSTD_t *sstd_table) +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_output(); serial_high(); } -void soft_serial_target_init(SSTD_t *sstd_table) +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_input_with_pullup(); -#if SERIAL_PIN_MASK == _BV(PD0) - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -#elif SERIAL_PIN_MASK == _BV(PD2) - // Enable INT2 - EIMSK |= _BV(INT2); - // Trigger on falling edge of INT2 - EICRA &= ~(_BV(ISC20) | _BV(ISC21)); + // Enable INT0-INT3,INT6 + EIMSK |= EIMSK_BIT; +#if SERIAL_PIN_MASK == _BV(PE6) + // Trigger on falling edge of INT6 + EICRB &= EICRx_BIT; #else - #error unknown SERIAL_PIN_MASK value + // Trigger on falling edge of INT0-INT3 + EICRA &= EICRx_BIT; #endif } @@ -191,7 +311,7 @@ void sync_recv(void) { } // Used by the reciver to send a synchronization signal to the sender. -static void sync_send(void)NO_INLINE; +static void sync_send(void) NO_INLINE; static void sync_send(void) { serial_low(); @@ -205,12 +325,12 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { uint8_t byte, i, p, pb; _delay_sub_us(READ_WRITE_START_ADJUST); - for( i = 0, byte = 0, p = 0; i < bit; i++ ) { + for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) { serial_delay_half1(); // read the middle of pulses if( serial_read_pin() ) { - byte = (byte << 1) | 1; p ^= 1; + byte = (byte << 1) | 1; p ^= 1; } else { - byte = (byte << 1) | 0; p ^= 0; + byte = (byte << 1) | 0; p ^= 0; } _delay_sub_us(READ_WRITE_WIDTH_ADJUST); serial_delay_half2(); @@ -230,13 +350,13 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE; void serial_write_chunk(uint8_t data, uint8_t bit) { uint8_t b, p; - for( p = 0, b = 1<<(bit-1); b ; b >>= 1) { - if(data & b) { - serial_high(); p ^= 1; - } else { - serial_low(); p ^= 0; - } - serial_delay(); + for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) { + if(data & b) { + serial_high(); p ^= 1; + } else { + serial_low(); p ^= 0; + } + serial_delay(); } /* send parity bit */ if(p & 1) { serial_high(); } @@ -288,6 +408,13 @@ void change_reciver2sender(void) { serial_delay_half1(); //4 } +static inline uint8_t nibble_bits_count(uint8_t bits) +{ + bits = (bits & 0x5) + (bits >> 1 & 0x5); + bits = (bits & 0x3) + (bits >> 2 & 0x3); + return bits; +} + // interrupt handle to be used by the target device ISR(SERIAL_PIN_INTERRUPT) { @@ -297,12 +424,15 @@ ISR(SERIAL_PIN_INTERRUPT) { SSTD_t *trans = Transaction_table; #else // recive transaction table index - uint8_t tid; + uint8_t tid, bits; uint8_t pecount = 0; sync_recv(); - tid = serial_read_chunk(&pecount,4); - if(pecount> 0) + bits = serial_read_chunk(&pecount,7); + tid = bits>>3; + bits = (bits&7) != nibble_bits_count(tid); + if( bits || pecount> 0 || tid > Transaction_table_size ) { return; + } serial_delay_half1(); serial_high(); // response step1 low->high @@ -315,17 +445,17 @@ ISR(SERIAL_PIN_INTERRUPT) { // target send phase if( trans->target2initiator_buffer_size > 0 ) serial_send_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size); + trans->target2initiator_buffer_size); // target switch to input change_sender2reciver(); // target recive phase if( trans->initiator2target_buffer_size > 0 ) { if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size) ) { - *trans->status = TRANSACTION_ACCEPTED; + trans->initiator2target_buffer_size) ) { + *trans->status = TRANSACTION_ACCEPTED; } else { - *trans->status = TRANSACTION_DATA_ERROR; + *trans->status = TRANSACTION_DATA_ERROR; } } else { *trans->status = TRANSACTION_ACCEPTED; @@ -349,6 +479,8 @@ int soft_serial_transaction(void) { SSTD_t *trans = Transaction_table; #else int soft_serial_transaction(int sstd_index) { + if( sstd_index > Transaction_table_size ) + return TRANSACTION_TYPE_ERROR; SSTD_t *trans = &Transaction_table[sstd_index]; #endif cli(); @@ -375,9 +507,10 @@ int soft_serial_transaction(int sstd_index) { #else // send transaction table index + int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index)); sync_send(); _delay_sub_us(TID_SEND_ADJUST); - serial_write_chunk(sstd_index, 4); + serial_write_chunk(tid, 7); serial_delay_half1(); // wait for the target response (step1 low->high) @@ -389,12 +522,12 @@ int soft_serial_transaction(int sstd_index) { // check if the target is present (step2 high->low) for( int i = 0; serial_read_pin(); i++ ) { if (i > SLAVE_INT_ACK_WIDTH + 1) { - // slave failed to pull the line low, assume not present - serial_output(); - serial_high(); - *trans->status = TRANSACTION_NO_RESPONSE; - sei(); - return TRANSACTION_NO_RESPONSE; + // slave failed to pull the line low, assume not present + serial_output(); + serial_high(); + *trans->status = TRANSACTION_NO_RESPONSE; + sei(); + return TRANSACTION_NO_RESPONSE; } _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT); } @@ -404,12 +537,12 @@ int soft_serial_transaction(int sstd_index) { // if the target is present syncronize with it if( trans->target2initiator_buffer_size > 0 ) { if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size) ) { - serial_output(); - serial_high(); - *trans->status = TRANSACTION_DATA_ERROR; - sei(); - return TRANSACTION_DATA_ERROR; + trans->target2initiator_buffer_size) ) { + serial_output(); + serial_high(); + *trans->status = TRANSACTION_DATA_ERROR; + sei(); + return TRANSACTION_DATA_ERROR; } } @@ -419,7 +552,7 @@ int soft_serial_transaction(int sstd_index) { // initiator send phase if( trans->initiator2target_buffer_size > 0 ) { serial_send_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size); + trans->initiator2target_buffer_size); } // always, release the line when not in use @@ -442,3 +575,16 @@ int soft_serial_get_and_clean_status(int sstd_index) { #endif #endif + +// Helix serial.c history +// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc) +// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4) +// (adjusted with avr-gcc 4.9.2) +// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78) +// (adjusted with avr-gcc 4.9.2) +// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae) +// (adjusted with avr-gcc 4.9.2) +// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff) +// (adjusted with avr-gcc 7.3.0) +// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66) +// (adjusted with avr-gcc 5.4.0, 7.3.0) diff --git a/keyboards/crkbd/serial.h b/keyboards/crkbd/serial.h index 76c6aaa043..7e0c0847a4 100644 --- a/keyboards/crkbd/serial.h +++ b/keyboards/crkbd/serial.h @@ -1,16 +1,19 @@ -#pragma once +#ifndef SOFT_SERIAL_H +#define SOFT_SERIAL_H #include // ///////////////////////////////////////////////////////////////// -// Need Soft Serial defines in serial_config.h +// Need Soft Serial defines in config.h // ///////////////////////////////////////////////////////////////// // ex. -// #define SERIAL_PIN_DDR DDRD -// #define SERIAL_PIN_PORT PORTD -// #define SERIAL_PIN_INPUT PIND -// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2 -// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2 +// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6 +// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5 +// // 1: about 137kbps (default) +// // 2: about 75kbps +// // 3: about 39kbps +// // 4: about 26kbps +// // 5: about 20kbps // // //// USE Simple API (OLD API, compatible with let's split serial.c) // ex. @@ -46,16 +49,18 @@ typedef struct _SSTD_t { uint8_t target2initiator_buffer_size; uint8_t *target2initiator_buffer; } SSTD_t; +#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t)) // initiator is transaction start side -void soft_serial_initiator_init(SSTD_t *sstd_table); +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size); // target is interrupt accept side -void soft_serial_target_init(SSTD_t *sstd_table); +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size); // initiator resullt #define TRANSACTION_END 0 #define TRANSACTION_NO_RESPONSE 0x1 #define TRANSACTION_DATA_ERROR 0x2 +#define TRANSACTION_TYPE_ERROR 0x4 #ifndef SERIAL_USE_MULTI_TRANSACTION int soft_serial_transaction(void); #else @@ -71,7 +76,9 @@ int soft_serial_transaction(int sstd_index); // target: // TRANSACTION_DATA_ERROR // or TRANSACTION_ACCEPTED -#define TRANSACTION_ACCEPTED 0x4 +#define TRANSACTION_ACCEPTED 0x8 #ifdef SERIAL_USE_MULTI_TRANSACTION int soft_serial_get_and_clean_status(int sstd_index); #endif + +#endif /* SOFT_SERIAL_H */ From f28a4e39fc97e22a2e547c60d9ffce188d3a6495 Mon Sep 17 00:00:00 2001 From: TurboMech <32869044+TurboMech@users.noreply.github.com> Date: Sun, 4 Nov 2018 19:00:33 -0500 Subject: [PATCH 0026/1763] Fix Espectro build (#4353) After further testing and feedback from others, the bottom row matrix was incorrect. Also RGB number was incorrect (I was tired when building this, really shouldn't do that). --- keyboards/espectro/config.h | 2 +- keyboards/espectro/espectro.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/espectro/config.h b/keyboards/espectro/config.h index 34852df43b..294091d582 100755 --- a/keyboards/espectro/config.h +++ b/keyboards/espectro/config.h @@ -59,7 +59,7 @@ #define RGB_DI_PIN E2 #ifdef RGB_DI_PIN -#define RGBLED_NUM 16 +#define RGBLED_NUM 18 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 10 #define RGBLIGHT_VAL_STEP 10 diff --git a/keyboards/espectro/espectro.h b/keyboards/espectro/espectro.h index 3d6ea466d3..6f9e4b7f7b 100755 --- a/keyboards/espectro/espectro.h +++ b/keyboards/espectro/espectro.h @@ -28,7 +28,7 @@ K100, K101, K102, K103, K104, K604, K605, K606, K607, K105, K106, K107, K108, K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K703, K209, K210, K211, K212, \ K300, K301, K302, K303, K304, K612, K705, K706, K707, K305, K306, K307, K308, K309, K310, K311, \ K400, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K704, K409, K410, K411, K412, \ -K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511 \ +K500, K501, K502, K509, K505, K506, K507, K508, K503, K504, K510, K511 \ ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ @@ -48,7 +48,7 @@ K100, K101, K102, K103, K104, K604, K605, K606, K607, K105, K106, K107, K108, K7 K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K703, K209, K210, K211, K212, \ K300, K301, K302, K303, K304, K612, K705, K706, K707, K305, K306, K307, K308, K309, K310, K311, K312, \ K400, K401, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K704, K409, K410, K411, K412, \ -K500, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512 \ +K500, K501, K502, K509, K505, K506, K507, K508, K503, K504, K510, K511, K512 \ ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ @@ -75,7 +75,7 @@ K200, K201, K202, K203, K204, K608, K609, K610, K611, K205, K206, K207, K208, K300, K300, K301, K302, K304, K612, K705, K706, K707, K305, K306, K307, K703, K308, K309, K310, K311, K312, \ K400x2, K401, K402, K403, K404, K708, K709, K710, K711, K405, K406, K407, K408, K408, K704, K409, K410, K411, K412, \ K412, \ -K500x2, K501x2, K502, K503x3, K504x3, K505x2, K506x2, K507x2, K508x2, K509, K510x2, K511, K512 \ +K500x2, K501x2, K502, K509x3, K505x3, K506x2, K507x2, K508x2, K503x2, K504, K510x2, K511, K512 \ ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \ From f2fda1bd56c97019777fb2a028d088ae37693b0f Mon Sep 17 00:00:00 2001 From: Jarred Steenvoorden Date: Mon, 5 Nov 2018 19:05:48 +1100 Subject: [PATCH 0027/1763] Keymap update Adding RGB underglow controls. (#4358) * Update userspace with common config.h * Add my dz60, satan and xd75 keyboard keymaps * Fixing executable bits changed during last upstream merge * Cleanup unnecessary files and defines * Remove unnecessary defines from userspace config * Add underglow controls to dz60 function layer * Fixing merge conflicts * Fixing exectable bits changed during merge --- keyboards/dz60/keymaps/jarred/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/dz60/keymaps/jarred/keymap.c b/keyboards/dz60/keymaps/jarred/keymap.c index 9e68506831..2ef6794934 100644 --- a/keyboards/dz60/keymaps/jarred/keymap.c +++ b/keyboards/dz60/keymaps/jarred/keymap.c @@ -13,9 +13,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, XXXXXXX,KC_APP, KC_RCTL), [_NV] = LAYOUT( - KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,_______,_______, - _______,_______,_______,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______, - _______,_______,_______,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______, - _______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______,_______, - _______,_______,_______, _______,_______,_______, _______,_______,_______, RESET, _______) + 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 ,XXXXXXX,_______, + _______,RGB_TOG,RGB_MOD,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______, + _______,RGB_HUI,RGB_HUD,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______, + _______,XXXXXXX,RGB_SAD,RGB_SAI,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______,XXXXXXX, + _______,RGB_VAD,RGB_VAI, _______,_______,_______, _______,_______,XXXXXXX, RESET,_______) }; From d1d5f200787f70bb853e32d5e5e2ce7b35ef7a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Mon, 5 Nov 2018 15:04:14 +0100 Subject: [PATCH 0028/1763] Update whitefox/konstantin keymap (#4363) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use Magic+Esc for entering bootloader mode * Expand rules.mk * Improve FN_RCTL tap dance * Avoid one-line if statements * Add PROGMEM to keymaps definition * td_fn_rctl_* → td_fn_rctrl_* * Fix FN_RCTL tap dance bug when count is 4, 8, 12 etc. * Add ACTION_TAP_DANCE_DOUBLE_MODS * Rearrange/rename keycode defines * Use RAL_RGU and RCT_RSF in keymaps * Replace keymap ASCII art with box drawing characters * Add FN_FNLK and use it * Set Unicode input mode in eeconfig_init_user instead of matrix_init_user --- .../whitefox/keymaps/konstantin/config.h | 9 +- .../whitefox/keymaps/konstantin/keymap.c | 202 +++++++++++------- .../whitefox/keymaps/konstantin/rules.mk | 6 + 3 files changed, 142 insertions(+), 75 deletions(-) diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h index 39450d6802..d1c3002d27 100644 --- a/keyboards/whitefox/keymaps/konstantin/config.h +++ b/keyboards/whitefox/keymaps/konstantin/config.h @@ -2,6 +2,12 @@ #define FORCE_NKRO +#undef IS_COMMAND +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) + +#define MAGIC_KEY_LAYER0_ALT1 BSLS +#define MAGIC_KEY_BOOTLOADER ESC + #define MOUSEKEY_DELAY 50 #define MOUSEKEY_INTERVAL 15 #define MOUSEKEY_MAX_SPEED 4 @@ -12,6 +18,3 @@ #define PERMISSIVE_HOLD #define TAPPING_TERM 200 #define TAPPING_TOGGLE 2 - -#undef IS_COMMAND -#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c index edb049287c..6732d9a01e 100644 --- a/keyboards/whitefox/keymaps/konstantin/keymap.c +++ b/keyboards/whitefox/keymaps/konstantin/keymap.c @@ -1,25 +1,29 @@ #include QMK_KEYBOARD_H -#define FN MO(L_FN) -#define FN_CAPS LT(L_FN, KC_CAPS) -#define FN_RCTL TD(TD_FN_RCTL) // Unused -#define RLALT TD(TD_RLALT) // Unused -#define DESKTOP TD(TD_DESKTOP) - -#define DESKT_L LCTL(LGUI(KC_LEFT)) -#define DESKT_R LCTL(LGUI(KC_RGHT)) #define TOP LCTL(KC_HOME) #define BOTTOM LCTL(KC_END) +#define DSKTP_L LCTL(LGUI(KC_LEFT)) +#define DSKTP_R LCTL(LGUI(KC_RGHT)) -#define UC_COMM UC(0x002C) -#define UC_LPRN UC(0x0028) -#define UC_RPRN UC(0x0029) -#define UC_EQLS UC(0x003D) -#define UC_MULS UC(0x00D7) -#define UC_DIVS UC(0x00F7) -#define UC_MINS UC(0x2212) +#define FN MO(L_FN) +#define FN_CAPS LT(L_FN, KC_CAPS) +#define FN_FNLK TT(L_FN) -void matrix_init_user(void) { +#define DESKTOP TD(TD_DESKTOP) +#define FN_RCTL TD(TD_FN_RCTL) +#define RAL_LAL TD(TD_RAL_LAL) +#define RAL_RGU TD(TD_RAL_RGU) +#define RCT_RSF TD(TD_RCT_RSF) + +#define COMMA UC(0x002C) +#define L_PAREN UC(0x0028) +#define R_PAREN UC(0x0029) +#define EQUALS UC(0x003D) +#define TIMES UC(0x00D7) +#define DIVIDE UC(0x00F7) +#define MINUS UC(0x2212) + +void eeconfig_init_user(void) { set_unicode_input_mode(UC_WINC); } @@ -37,7 +41,9 @@ enum custom_keycodes { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case CLEAR: - if (record->event.pressed) { SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); } + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + } return false; case NUMPAD: @@ -55,90 +61,142 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } -enum tap_dance { - TD_FN_RCTL, - TD_RLALT, - TD_DESKTOP, -}; +struct { + bool fn_on; // Layer state when tap dance started + bool started; +} td_fn_rctrl_data; + +void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) { + if (!td_fn_rctrl_data.started) { + td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN); + td_fn_rctrl_data.started = true; + } + // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl + if (state->count == 1 || state->count == 3) { + layer_on(L_FN); + } else if (state->count == 2) { + if (!td_fn_rctrl_data.fn_on) { + layer_off(L_FN); + } + register_code(KC_RCTL); + } +} + +void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) { + if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) { + layer_off(L_FN); + } + if (state->count >= 2) { + unregister_code(KC_RCTL); + } + td_fn_rctrl_data.started = false; +} + +#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \ + .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \ + .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \ + } -void td_fn_rctl_finished(qk_tap_dance_state_t *state, void *user_data) { - // Single tap → Fn, double tap → RCtrl, triple tap → Fn+RCtrl etc. - if (state->count & 1) { layer_on(L_FN); } - if (state->count & 2) { register_code(KC_RCTL); } +void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data; + // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2 + if (state->count == 1 || state->count == 3) { + register_code(mods->kc1); + } else if (state->count == 2) { + unregister_code(mods->kc1); + register_code(mods->kc2); + } + // Prevent tap dance from sending kc1 and kc2 as weak mods + state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2)); } -void td_fn_rctl_reset(qk_tap_dance_state_t *state, void *user_data) { - if (state->count & 1) { layer_off(L_FN); } - if (state->count & 2) { unregister_code(KC_RCTL); } +void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data; + if (state->count == 1 || state->count > 2) { + unregister_code(mods->kc1); + } + if (state->count >= 2) { + unregister_code(mods->kc2); + } } +enum tap_dance { + TD_DESKTOP, + TD_FN_RCTL, + TD_RAL_LAL, + TD_RAL_RGU, + TD_RCT_RSF, +}; + qk_tap_dance_action_t tap_dance_actions[] = { - [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_fn_rctl_finished, td_fn_rctl_reset), - [TD_RLALT] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_LALT), [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop + [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset), + [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT), + [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI), + [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT), }; -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Base layer - * ,---------------------------------------------------------------. - * |Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |PSc| - * |---------------------------------------------------------------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |Bspc |Del| - * |---------------------------------------------------------------| - * |FnCaps| A | S | D | F | G | H | J | K | L | ; | ' | Enter |PgU| - * |---------------------------------------------------------------| - * | LShift | Z | X | C | V | B | N | M | , | . | / |RCtrl | ↑ |PgD| - * |---------------------------------------------------------------| - * |LCtl|LGui|LAlt| Space |RAlt| Fn | | ← | ↓ | → | - * `---------------------------------------------------------------' + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │PSc│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │Del│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │CtlSft│ ↑ │PgD│ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │LCtl│LGui│LAlt│ Space │AlGu│FnLk│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_BASE] = LAYOUT_truefox( \ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_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_DEL, \ FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RCTL, KC_UP, KC_PGDN, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,FN, KC_LEFT,KC_DOWN,KC_RGHT \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,RCT_RSF, KC_UP, KC_PGDN, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, RAL_RGU,FN_FNLK, KC_LEFT,KC_DOWN,KC_RGHT \ ), /* Function layer - * ,---------------------------------------------------------------. - * | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Num|Scr|Pau| - * |---------------------------------------------------------------| - * | M4 |M2 |M↑ |M1 |M3 |M5 | | | |Stp|Ply|Prv|Nxt|Clear|Ins| - * |---------------------------------------------------------------| - * | |M← |M↓ |M→ |MW↑| | | | | | | | |Top| - * |---------------------------------------------------------------| - * | |MA0|MA2|MW←|MW→| | | |VoD|VoU|Mut| App |PgU|Btm| - * |---------------------------------------------------------------| - * | |Dstp|Dst←| MW↓ |Dst→| | |Hom|PgD|End| - * `---------------------------------------------------------------' + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│Scr│Pau│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │ │ │Stp│Ply│Prv│Nxt│Clear│Ins│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │Top│ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ │MA0│MA2│MW←│MW→│ │ │ │VoD│VoU│Mut│ App │PgU│Btm│ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │ │Dstp│Dst←│ MW↓ │Dst→│ │ │Hom│PgD│End│ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_FN] = LAYOUT_truefox( \ _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK,KC_PAUS, \ KC_BTN4,KC_BTN2,KC_MS_U,KC_BTN1,KC_BTN3,KC_BTN5,_______,_______,_______,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \ _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,_______,_______,_______,_______,_______,_______, _______, TOP, \ _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_APP, KC_PGUP,BOTTOM, \ - _______,DESKTOP,DESKT_L, KC_WH_D, DESKT_R,_______, KC_HOME,KC_PGDN,KC_END \ + _______,DESKTOP,DSKTP_L, KC_WH_D, DSKTP_R,_______, KC_HOME,KC_PGDN,KC_END \ ), /* Numpad layer - * ,---------------------------------------------------------------. - * |Num| | | | | | |P7 |P8 |P9 |P- | − | = |Num| | | - * |---------------------------------------------------------------| - * | | | | | | | |P4 |P5 |P6 |P+ | ( | ) | | | - * |---------------------------------------------------------------| - * | | | | | | | |P1 |P2 |P3 |P* | × | PEnter | | - * |---------------------------------------------------------------| - * | | | | | | |P0 |P0 | , |P. |P/ | ÷ | | | - * |---------------------------------------------------------------| - * | | | | | | | | | | | - * `---------------------------------------------------------------' + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │ PEnter │ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ │ │ │ │ │ │P0 │P0 │ , │P. │P/ │ ÷ │ │ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │ │ │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_NUMPAD] = LAYOUT_truefox( \ - NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,UC_MINS,UC_EQLS,NUMPAD, _______,_______, \ - _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,UC_LPRN,UC_RPRN,_______, _______, \ - _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,UC_MULS, KC_PENT, _______, \ - _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, UC_COMM,KC_PDOT,KC_PSLS,UC_DIVS, _______,_______, \ + NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,MINUS, EQUALS, NUMPAD, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,L_PAREN,R_PAREN,_______, _______, \ + _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,TIMES, KC_PENT, _______, \ + _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, COMMA, KC_PDOT,KC_PSLS,DIVIDE, _______,_______, \ _______,_______,_______, _______, _______,_______, _______,_______,_______ \ ), }; diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk index f1f3d2378e..abf92c2c46 100644 --- a/keyboards/whitefox/keymaps/konstantin/rules.mk +++ b/keyboards/whitefox/keymaps/konstantin/rules.mk @@ -1,4 +1,10 @@ +BACKLIGHT_ENABLE = no BOOTMAGIC_ENABLE = no +COMMAND_ENABLE = yes CONSOLE_ENABLE = yes +EXTRAKEY_ENABLE = yes +MOUSEKEY_ENABLE = yes +NKRO_ENABLE = yes TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes +VISUALIZER_ENABLE = no From a95fc388fd85ffddcaf07e56ce5a147458fad47c Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Mon, 5 Nov 2018 15:04:52 +0100 Subject: [PATCH 0029/1763] Redox: move curly brackets one row down. (#4364) In #4258, the 2 curly brackets were inadvertently moved one row up. This fixes that. --- keyboards/redox/keymaps/jeherve/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/redox/keymaps/jeherve/keymap.c b/keyboards/redox/keymaps/jeherve/keymap.c index f8dfc4854c..c2852f312c 100644 --- a/keyboards/redox/keymaps/jeherve/keymap.c +++ b/keyboards/redox/keymaps/jeherve/keymap.c @@ -158,7 +158,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,TT(_NAV),TT(_SYMB), TT(_SYMB),TT(_NAV),KC_K ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT , //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ - MO_INTR ,KC_LCTL ,KC_HYPR ,KC_LALT , KC_LCMD , KC_BSPC ,KC_LCTL , KC_ENT ,KC_SPC , KC_RCMD , TT_ADJ ,KC_HYPR ,KC_RCTL ,MO_INTR + MO_INTR ,KC_LCTL ,KC_HYPR ,KC_LALT , KC_LCMD , KC_BSPC ,KC_LCTL , KC_ENT ,KC_SPC , KC_RCMD , TT_ADJ ,KC_HYPR ,KC_RCTL ,MO_INTR //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ ), @@ -166,13 +166,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ , //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_LCBR , KC_RCBR ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,_______ , + _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,_______ , _______ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,_______ , //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ - _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,_______ , _______ ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_MINS ,KC_UNDS ,_______ , + _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,KC_LCBR , KC_RCBR ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_MINS ,KC_UNDS ,_______ , //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ - _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , _______ , _______ ,_______ ,_______ ,_______ + _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , _______ , _______ ,_______ ,_______ ,_______ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ ), @@ -186,7 +186,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ - _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ + _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ ), @@ -200,7 +200,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ XXXXXXX ,UC_00E2 ,XXXXXXX ,UC_00E7 ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,UC_0171 ,UC_00EA ,XXXXXXX ,UC_0151 ,XXXXXXX , //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ - _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,NBSP , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ + _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,NBSP , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ ), @@ -214,7 +214,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ - _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ + _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ ) From a49d0a1e83d686a6c7a0673ffbd691f80908ea6f Mon Sep 17 00:00:00 2001 From: Danny Date: Mon, 5 Nov 2018 14:00:38 -0500 Subject: [PATCH 0030/1763] Keyboard: Add Nyquist Rev 3 (#4287) * Add Nyquist Rev 3 * Switch to split_common --- keyboards/nyquist/eeprom-lefthand.eep | 2 - keyboards/nyquist/eeprom-righthand.eep | 2 - keyboards/nyquist/i2c.c | 162 ------- keyboards/nyquist/i2c.h | 49 -- keyboards/nyquist/info.json | 3 + keyboards/nyquist/keymaps/default/config.h | 7 +- keyboards/nyquist/keymaps/default/rules.mk | 4 - keyboards/nyquist/keymaps/hexwire/config.h | 7 +- keyboards/nyquist/keymaps/hexwire/rules.mk | 3 - keyboards/nyquist/matrix.c | 497 --------------------- keyboards/nyquist/nyquist.h | 8 +- keyboards/nyquist/rev1/config.h | 7 +- keyboards/nyquist/rev1/rev1.h | 5 +- keyboards/nyquist/rev2/config.h | 7 +- keyboards/nyquist/rev2/rev2.h | 5 +- keyboards/nyquist/rev3/config.h | 81 ++++ keyboards/nyquist/rev3/rev3.c | 21 + keyboards/nyquist/rev3/rev3.h | 63 +++ keyboards/nyquist/rev3/rules.mk | 1 + keyboards/nyquist/rules.mk | 20 +- keyboards/nyquist/serial.c | 228 ---------- keyboards/nyquist/serial.h | 26 -- keyboards/nyquist/split_util.c | 86 ---- keyboards/nyquist/split_util.h | 20 - 24 files changed, 188 insertions(+), 1126 deletions(-) delete mode 100644 keyboards/nyquist/eeprom-lefthand.eep delete mode 100644 keyboards/nyquist/eeprom-righthand.eep delete mode 100644 keyboards/nyquist/i2c.c delete mode 100644 keyboards/nyquist/i2c.h delete mode 100644 keyboards/nyquist/matrix.c create mode 100644 keyboards/nyquist/rev3/config.h create mode 100644 keyboards/nyquist/rev3/rev3.c create mode 100644 keyboards/nyquist/rev3/rev3.h create mode 100644 keyboards/nyquist/rev3/rules.mk delete mode 100644 keyboards/nyquist/serial.c delete mode 100644 keyboards/nyquist/serial.h delete mode 100644 keyboards/nyquist/split_util.c delete mode 100644 keyboards/nyquist/split_util.h diff --git a/keyboards/nyquist/eeprom-lefthand.eep b/keyboards/nyquist/eeprom-lefthand.eep deleted file mode 100644 index b9666a74c0..0000000000 --- a/keyboards/nyquist/eeprom-lefthand.eep +++ /dev/null @@ -1,2 +0,0 @@ -:0B0000000000000000000000000001F4 -:00000001FF diff --git a/keyboards/nyquist/eeprom-righthand.eep b/keyboards/nyquist/eeprom-righthand.eep deleted file mode 100644 index 94cc5be7fc..0000000000 --- a/keyboards/nyquist/eeprom-righthand.eep +++ /dev/null @@ -1,2 +0,0 @@ -:0B0000000000000000000000000000F5 -:00000001FF diff --git a/keyboards/nyquist/i2c.c b/keyboards/nyquist/i2c.c deleted file mode 100644 index 084c890c40..0000000000 --- a/keyboards/nyquist/i2c.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "i2c.h" - -#ifdef USE_I2C - -// Limits the amount of we wait for any one i2c transaction. -// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is -// 9 bits, a single transaction will take around 90μs to complete. -// -// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit -// poll loop takes at least 8 clock cycles to execute -#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 - -#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) - -volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -static volatile uint8_t slave_buffer_pos; -static volatile bool slave_has_register_set = false; - -// Wait for an i2c operation to finish -inline static -void i2c_delay(void) { - uint16_t lim = 0; - while(!(TWCR & (1<10. - // Check datasheets for more info. - TWBR = ((F_CPU/SCL_CLOCK)-16)/2; -} - -// Start a transaction with the given i2c slave address. The direction of the -// transfer is set with I2C_READ and I2C_WRITE. -// returns: 0 => success -// 1 => error -uint8_t i2c_master_start(uint8_t address) { - TWCR = (1< slave ACK -// 1 => slave NACK -uint8_t i2c_master_write(uint8_t data) { - TWDR = data; - TWCR = (1<= SLAVE_BUFFER_SIZE ) { - ack = 0; - slave_buffer_pos = 0; - } - slave_has_register_set = true; - } else { - i2c_slave_buffer[slave_buffer_pos] = TWDR; - BUFFER_POS_INC(); - } - break; - - case TW_ST_SLA_ACK: - case TW_ST_DATA_ACK: - // master has addressed this device as a slave transmitter and is - // requesting data. - TWDR = i2c_slave_buffer[slave_buffer_pos]; - BUFFER_POS_INC(); - break; - - case TW_BUS_ERROR: // something went wrong, reset twi state - TWCR = 0; - default: - break; - } - // Reset everything, so we are ready for the next TWI interrupt - TWCR |= (1< - -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -#define I2C_READ 1 -#define I2C_WRITE 0 - -#define I2C_ACK 1 -#define I2C_NACK 0 - -#define SLAVE_BUFFER_SIZE 0x10 - -// i2c SCL clock frequency -#define SCL_CLOCK 100000L - -extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -void i2c_master_init(void); -uint8_t i2c_master_start(uint8_t address); -void i2c_master_stop(void); -uint8_t i2c_master_write(uint8_t data); -uint8_t i2c_master_read(int); -void i2c_reset_state(void); -void i2c_slave_init(uint8_t address); - - -static inline unsigned char i2c_start_read(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_READ); -} - -static inline unsigned char i2c_start_write(unsigned char addr) { - return i2c_master_start((addr << 1) | I2C_WRITE); -} - -// from SSD1306 scrips -extern unsigned char i2c_rep_start(unsigned char addr); -extern void i2c_start_wait(unsigned char addr); -extern unsigned char i2c_readAck(void); -extern unsigned char i2c_readNak(void); -extern unsigned char i2c_read(unsigned char ack); - -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - -#endif diff --git a/keyboards/nyquist/info.json b/keyboards/nyquist/info.json index 0a038f6dd2..295864cfc9 100644 --- a/keyboards/nyquist/info.json +++ b/keyboards/nyquist/info.json @@ -7,6 +7,9 @@ "layouts": { "LAYOUT": { "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}] + }, + "LAYOUT_ortho_5x12": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}] } } } diff --git a/keyboards/nyquist/keymaps/default/config.h b/keyboards/nyquist/keymaps/default/config.h index c4604af436..0fa606f296 100644 --- a/keyboards/nyquist/keymaps/default/config.h +++ b/keyboards/nyquist/keymaps/default/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -37,5 +34,3 @@ along with this program. If not, see . #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/nyquist/keymaps/default/rules.mk b/keyboards/nyquist/keymaps/default/rules.mk index 1e57612788..1e3cebb145 100644 --- a/keyboards/nyquist/keymaps/default/rules.mk +++ b/keyboards/nyquist/keymaps/default/rules.mk @@ -1,5 +1 @@ RGBLIGHT_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/nyquist/keymaps/hexwire/config.h b/keyboards/nyquist/keymaps/hexwire/config.h index 8b9c3ea2bd..4f1901b5dd 100644 --- a/keyboards/nyquist/keymaps/hexwire/config.h +++ b/keyboards/nyquist/keymaps/hexwire/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "config_common.h" +#pragma once /* Use I2C or Serial, not both */ @@ -39,5 +36,3 @@ along with this program. If not, see . #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/nyquist/keymaps/hexwire/rules.mk b/keyboards/nyquist/keymaps/hexwire/rules.mk index 1e57612788..a81250cdf6 100644 --- a/keyboards/nyquist/keymaps/hexwire/rules.mk +++ b/keyboards/nyquist/keymaps/hexwire/rules.mk @@ -1,5 +1,2 @@ RGBLIGHT_ENABLE = yes -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/nyquist/matrix.c b/keyboards/nyquist/matrix.c deleted file mode 100644 index 3cdad4adb8..0000000000 --- a/keyboards/nyquist/matrix.c +++ /dev/null @@ -1,497 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -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 . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include "pro_micro.h" -#include "config.h" -#include "timer.h" - -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" - extern backlight_config_t backlight_config; -#endif - -#ifdef USE_I2C -# include "i2c.h" -#else // USE_SERIAL -# include "serial.h" -#endif - -#ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 -#endif - -#if (DEBOUNCING_DELAY > 0) - static uint16_t debouncing_time; - static bool debouncing = false; -#endif - -#if (MATRIX_COLS <= 8) -# define print_matrix_header() print("\nr/c 01234567\n") -# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) -# define matrix_bitpop(i) bitpop(matrix[i]) -# define ROW_SHIFTER ((uint8_t)1) -#else -# error "Currently only supports 8 COLS" -#endif -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -#define ERROR_DISCONNECT_COUNT 5 - -#define SERIAL_LED_ADDR 0x00 - -#define ROWS_PER_HAND (MATRIX_ROWS/2) - -static uint8_t error_count = 0; - -static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -#if (DIODE_DIRECTION == COL2ROW) - static void init_cols(void); - static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); - static void unselect_rows(void); - static void select_row(uint8_t row); - static void unselect_row(uint8_t row); -#elif (DIODE_DIRECTION == ROW2COL) - static void init_rows(void); - static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); - static void unselect_cols(void); - static void unselect_col(uint8_t col); - static void select_col(uint8_t col); -#endif - -__attribute__ ((weak)) -void matrix_init_kb(void) { - matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { - matrix_scan_user(); -} - -__attribute__ ((weak)) -void matrix_init_user(void) { -} - -__attribute__ ((weak)) -void matrix_scan_user(void) { -} - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ -#ifdef DISABLE_JTAG - // JTAG disable for PORT F. write JTD bit twice within four cycles. - MCUCR |= (1< 0) - bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row); - - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } - -# else - read_cols_on_row(matrix+offset, current_row); -# endif - - } - -#elif (DIODE_DIRECTION == ROW2COL) - // Set col, read rows - for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { -# if (DEBOUNCING_DELAY > 0) - bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col); - if (matrix_changed) { - debouncing = true; - debouncing_time = timer_read(); - } -# else - read_rows_on_col(matrix+offset, current_col); -# endif - - } -#endif - -# if (DEBOUNCING_DELAY > 0) - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { - for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { - matrix[i+offset] = matrix_debouncing[i+offset]; - } - debouncing = false; - } -# endif - - return 1; -} - -#ifdef USE_I2C - -// Get rows from other half over i2c -int i2c_transaction(void) { - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - - int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); - if (err) goto i2c_error; - - // start of matrix stored at 0x00 - err = i2c_master_write(0x00); - if (err) goto i2c_error; - -#ifdef BACKLIGHT_ENABLE - // Write backlight level for slave to read - err = i2c_master_write(backlight_config.enable ? backlight_config.level : 0); -#else - // Write zero, so our byte index is the same - err = i2c_master_write(0x00); -#endif - if (err) goto i2c_error; - - // Start read - err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); - if (err) goto i2c_error; - - if (!err) { - int i; - for (i = 0; i < ROWS_PER_HAND-1; ++i) { - matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); - } - matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); - i2c_master_stop(); - } else { -i2c_error: // the cable is disconnceted, or something else went wrong - i2c_reset_state(); - return err; - } - - return 0; -} - -#else // USE_SERIAL - -int serial_transaction(void) { - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - - if (serial_update_buffers()) { - return 1; - } - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = serial_slave_buffer[i]; - } - -#ifdef BACKLIGHT_ENABLE - // Write backlight level for slave to read - serial_master_buffer[SERIAL_LED_ADDR] = backlight_config.enable ? backlight_config.level : 0; -#endif - return 0; -} -#endif - -uint8_t matrix_scan(void) -{ - uint8_t ret = _matrix_scan(); - -#ifdef USE_I2C - if( i2c_transaction() ) { -#else // USE_SERIAL - if( serial_transaction() ) { -#endif - // turn on the indicator led when halves are disconnected - TXLED1; - - error_count++; - - if (error_count > ERROR_DISCONNECT_COUNT) { - // reset other half if disconnected - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = 0; - } - } - } else { - // turn off the indicator led on no error - TXLED0; - error_count = 0; - } - matrix_scan_quantum(); - return ret; -} - -void matrix_slave_scan(void) { - _matrix_scan(); - - int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; - -#ifdef USE_I2C -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(i2c_slave_buffer[0]); -#endif - for (int i = 0; i < ROWS_PER_HAND; ++i) { - i2c_slave_buffer[i+1] = matrix[offset+i]; - } -#else // USE_SERIAL - for (int i = 0; i < ROWS_PER_HAND; ++i) { - serial_slave_buffer[i] = matrix[offset+i]; - } - -#ifdef BACKLIGHT_ENABLE - // Read backlight level sent from master and update level on slave - backlight_set(serial_master_buffer[SERIAL_LED_ADDR]); -#endif -#endif -} - -bool matrix_is_modified(void) -{ -#if (DEBOUNCING_DELAY > 0) - if (debouncing) return false; -#endif - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) -{ - // Store last value of row prior to reading - matrix_row_t last_row_value = current_matrix[current_row]; - - // Clear data in matrix row - current_matrix[current_row] = 0; - - // Select row and wait for row selecton to stabilize - select_row(current_row); - wait_us(30); - - // For each col... - for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { - - // Select the col pin to read (active low) - uint8_t pin = col_pins[col_index]; - uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); - - // Populate the matrix row with the state of the col pin - current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); - } - - // Unselect row - unselect_row(current_row); - - return (last_row_value != current_matrix[current_row]); -} - -static void select_row(uint8_t row) -{ - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW -} - -static void unselect_row(uint8_t row) -{ - uint8_t pin = row_pins[row]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI -} - -static void unselect_rows(void) -{ - for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -#elif (DIODE_DIRECTION == ROW2COL) - -static void init_rows(void) -{ - for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { - uint8_t pin = row_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) -{ - bool matrix_changed = false; - - // Select col and wait for col selecton to stabilize - select_col(current_col); - wait_us(30); - - // For each row... - for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) - { - - // Store last value of row prior to reading - matrix_row_t last_row_value = current_matrix[row_index]; - - // Check row pin state - if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) - { - // Pin LO, set col bit - current_matrix[row_index] |= (ROW_SHIFTER << current_col); - } - else - { - // Pin HI, clear col bit - current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); - } - - // Determine if the matrix changed state - if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) - { - matrix_changed = true; - } - } - - // Unselect col - unselect_col(current_col); - - return matrix_changed; -} - -static void select_col(uint8_t col) -{ - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW -} - -static void unselect_col(uint8_t col) -{ - uint8_t pin = col_pins[col]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI -} - -static void unselect_cols(void) -{ - for(uint8_t x = 0; x < MATRIX_COLS; x++) { - uint8_t pin = col_pins[x]; - _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN - _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI - } -} - -#endif diff --git a/keyboards/nyquist/nyquist.h b/keyboards/nyquist/nyquist.h index d401a45f78..9a3e996476 100644 --- a/keyboards/nyquist/nyquist.h +++ b/keyboards/nyquist/nyquist.h @@ -1,5 +1,4 @@ -#ifndef NYQUIST_H -#define NYQUIST_H +#pragma once #ifdef KEYBOARD_nyquist_rev1 #include "rev1.h" @@ -7,6 +6,9 @@ #ifdef KEYBOARD_nyquist_rev2 #include "rev2.h" #endif +#ifdef KEYBOARD_nyquist_rev3 + #include "rev3.h" +#endif #include "quantum.h" @@ -26,4 +28,4 @@ KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45 \ ) -#endif +#define LAYOUT_kc_ortho_5x12 LAYOUT_kc diff --git a/keyboards/nyquist/rev1/config.h b/keyboards/nyquist/rev1/config.h index eec084eccd..35fbaffb96 100644 --- a/keyboards/nyquist/rev1/config.h +++ b/keyboards/nyquist/rev1/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef REV1_CONFIG_H -#define REV1_CONFIG_H - -#include QMK_KEYBOARD_CONFIG_H +#pragma once /* USB Device descriptor parameter */ #define VENDOR_ID 0xCB10 @@ -81,5 +78,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/nyquist/rev1/rev1.h b/keyboards/nyquist/rev1/rev1.h index 2d4c9f73ee..6d3a23383b 100644 --- a/keyboards/nyquist/rev1/rev1.h +++ b/keyboards/nyquist/rev1/rev1.h @@ -1,5 +1,4 @@ -#ifndef REV1_H -#define REV1_H +#pragma once #include "nyquist.h" @@ -64,5 +63,3 @@ #endif #define LAYOUT_ortho_5x12 LAYOUT - -#endif diff --git a/keyboards/nyquist/rev2/config.h b/keyboards/nyquist/rev2/config.h index ab062c9209..7dc743b275 100644 --- a/keyboards/nyquist/rev2/config.h +++ b/keyboards/nyquist/rev2/config.h @@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef REV2_CONFIG_H -#define REV2_CONFIG_H - -#include QMK_KEYBOARD_CONFIG_H +#pragma once /* USB Device descriptor parameter */ #define VENDOR_ID 0xCB10 @@ -82,5 +79,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/nyquist/rev2/rev2.h b/keyboards/nyquist/rev2/rev2.h index 1eec5d2beb..6d3a23383b 100644 --- a/keyboards/nyquist/rev2/rev2.h +++ b/keyboards/nyquist/rev2/rev2.h @@ -1,5 +1,4 @@ -#ifndef REV2_H -#define REV2_H +#pragma once #include "nyquist.h" @@ -64,5 +63,3 @@ #endif #define LAYOUT_ortho_5x12 LAYOUT - -#endif diff --git a/keyboards/nyquist/rev3/config.h b/keyboards/nyquist/rev3/config.h new file mode 100644 index 0000000000..6c51bc9a80 --- /dev/null +++ b/keyboards/nyquist/rev3/config.h @@ -0,0 +1,81 @@ +/* +Copyright 2017 Danny Nguyen + +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 . +*/ + +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xCB10 +#define PRODUCT_ID 0x1156 +#define DEVICE_VER 0x0300 +#define MANUFACTURER Keebio +#define PRODUCT The Nyquist Keyboard +#define DESCRIPTION Split 60 percent ortholinear keyboard + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 10 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { F0, F5, D7, F6, F7 } +#define MATRIX_COL_PINS { F1, F4, B7, D2, D3, D4 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN B4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 12 + +/* Backlight LEDs */ +#define BACKLIGHT_PIN D5 +#define BACKLIGHT_LEVELS 7 + +/* + * 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 diff --git a/keyboards/nyquist/rev3/rev3.c b/keyboards/nyquist/rev3/rev3.c new file mode 100644 index 0000000000..34500fb104 --- /dev/null +++ b/keyboards/nyquist/rev3/rev3.c @@ -0,0 +1,21 @@ +#include "rev3.h" + +#ifdef SSD1306OLED +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + led_set_user(usb_led); +} +#endif + +void matrix_init_kb(void) { + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; diff --git a/keyboards/nyquist/rev3/rev3.h b/keyboards/nyquist/rev3/rev3.h new file mode 100644 index 0000000000..3a3141f6e0 --- /dev/null +++ b/keyboards/nyquist/rev3/rev3.h @@ -0,0 +1,63 @@ +#pragma once + +#include "nyquist.h" +#include "quantum.h" + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +//void promicro_bootloader_jmp(bool program); + +#ifndef FLIP_HALF +// Standard Keymap +// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \ + L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { R05, R04, R03, R02, R01, R00 }, \ + { R15, R14, R13, R12, R11, R10 }, \ + { R25, R24, R23, R22, R21, R20 }, \ + { R35, R34, R33, R32, R31, R30 }, \ + { R45, R44, R43, R42, R41, R40 } \ + } +#else +// Keymap with right side flipped +// (TRRS jack on both halves are to the right) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \ + L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, R43, R44, R45 } \ + } +#endif + +#define LAYOUT_ortho_5x12 LAYOUT + diff --git a/keyboards/nyquist/rev3/rules.mk b/keyboards/nyquist/rev3/rules.mk new file mode 100644 index 0000000000..bd518d8f27 --- /dev/null +++ b/keyboards/nyquist/rev3/rules.mk @@ -0,0 +1 @@ +BACKLIGHT_ENABLE = yes diff --git a/keyboards/nyquist/rules.mk b/keyboards/nyquist/rules.mk index 74d5625f85..5313b85022 100644 --- a/keyboards/nyquist/rules.mk +++ b/keyboards/nyquist/rules.mk @@ -1,8 +1,3 @@ -SRC += matrix.c \ - i2c.c \ - split_util.c \ - serial.c - # MCU name #MCU = at90usb1287 MCU = atmega32u4 @@ -41,9 +36,13 @@ F_USB = $(F_CPU) # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina +ifeq ($(strip $(KEYBOARD)), nyquist/rev3) + BOOTLOADER = dfu +else + BOOTLOADER = caterina +endif # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT @@ -63,13 +62,10 @@ 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 -USE_I2C = yes -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes - +SPLIT_KEYBOARD = yes LAYOUTS = ortho_5x12 - DEFAULT_FOLDER = nyquist/rev2 diff --git a/keyboards/nyquist/serial.c b/keyboards/nyquist/serial.c deleted file mode 100644 index 74bcbb6bf6..0000000000 --- a/keyboards/nyquist/serial.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * WARNING: be careful changing this code, it is very timing dependent - */ - -#ifndef F_CPU -#define F_CPU 16000000 -#endif - -#include -#include -#include -#include -#include "serial.h" - -#ifndef USE_I2C - -// Serial pulse period in microseconds. Its probably a bad idea to lower this -// value. -#define SERIAL_DELAY 24 - -uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; -uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; - -#define SLAVE_DATA_CORRUPT (1<<0) -volatile uint8_t status = 0; - -inline static -void serial_delay(void) { - _delay_us(SERIAL_DELAY); -} - -inline static -void serial_output(void) { - SERIAL_PIN_DDR |= SERIAL_PIN_MASK; -} - -// make the serial pin an input with pull-up resistor -inline static -void serial_input(void) { - SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; - SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -inline static -uint8_t serial_read_pin(void) { - return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); -} - -inline static -void serial_low(void) { - SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; -} - -inline static -void serial_high(void) { - SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -void serial_master_init(void) { - serial_output(); - serial_high(); -} - -void serial_slave_init(void) { - serial_input(); - - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -} - -// Used by the master to synchronize timing with the slave. -static -void sync_recv(void) { - serial_input(); - // This shouldn't hang if the slave disconnects because the - // serial line will float to high if the slave does disconnect. - while (!serial_read_pin()); - serial_delay(); -} - -// Used by the slave to send a synchronization signal to the master. -static -void sync_send(void) { - serial_output(); - - serial_low(); - serial_delay(); - - serial_high(); -} - -// Reads a byte from the serial line -static -uint8_t serial_read_byte(void) { - uint8_t byte = 0; - serial_input(); - for ( uint8_t i = 0; i < 8; ++i) { - byte = (byte << 1) | serial_read_pin(); - serial_delay(); - _delay_us(1); - } - - return byte; -} - -// Sends a byte with MSB ordering -static -void serial_write_byte(uint8_t data) { - uint8_t b = 8; - serial_output(); - while( b-- ) { - if(data & (1 << b)) { - serial_high(); - } else { - serial_low(); - } - serial_delay(); - } -} - -// interrupt handle to be used by the slave device -ISR(SERIAL_PIN_INTERRUPT) { - sync_send(); - - uint8_t checksum = 0; - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_slave_buffer[i]); - sync_send(); - checksum += serial_slave_buffer[i]; - } - serial_write_byte(checksum); - sync_send(); - - // wait for the sync to finish sending - serial_delay(); - - // read the middle of pulses - _delay_us(SERIAL_DELAY/2); - - uint8_t checksum_computed = 0; - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_master_buffer[i] = serial_read_byte(); - sync_send(); - checksum_computed += serial_master_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_send(); - - serial_input(); // end transaction - - if ( checksum_computed != checksum_received ) { - status |= SLAVE_DATA_CORRUPT; - } else { - status &= ~SLAVE_DATA_CORRUPT; - } -} - -inline -bool serial_slave_DATA_CORRUPT(void) { - return status & SLAVE_DATA_CORRUPT; -} - -// Copies the serial_slave_buffer to the master and sends the -// serial_master_buffer to the slave. -// -// Returns: -// 0 => no error -// 1 => slave did not respond -int serial_update_buffers(void) { - // this code is very time dependent, so we need to disable interrupts - cli(); - - // signal to the slave that we want to start a transaction - serial_output(); - serial_low(); - _delay_us(1); - - // wait for the slaves response - serial_input(); - serial_high(); - _delay_us(SERIAL_DELAY); - - // check if the slave is present - if (serial_read_pin()) { - // slave failed to pull the line low, assume not present - sei(); - return 1; - } - - // if the slave is present syncronize with it - sync_recv(); - - uint8_t checksum_computed = 0; - // receive data from the slave - for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { - serial_slave_buffer[i] = serial_read_byte(); - sync_recv(); - checksum_computed += serial_slave_buffer[i]; - } - uint8_t checksum_received = serial_read_byte(); - sync_recv(); - - if (checksum_computed != checksum_received) { - sei(); - return 1; - } - - uint8_t checksum = 0; - // send data to the slave - for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { - serial_write_byte(serial_master_buffer[i]); - sync_recv(); - checksum += serial_master_buffer[i]; - } - serial_write_byte(checksum); - sync_recv(); - - // always, release the line when not in use - serial_output(); - serial_high(); - - sei(); - return 0; -} - -#endif diff --git a/keyboards/nyquist/serial.h b/keyboards/nyquist/serial.h deleted file mode 100644 index 15fe4db7b4..0000000000 --- a/keyboards/nyquist/serial.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef MY_SERIAL_H -#define MY_SERIAL_H - -#include "config.h" -#include - -/* TODO: some defines for interrupt setup */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect - -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH 1 - -// Buffers for master - slave communication -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; - -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); -bool serial_slave_data_corrupt(void); - -#endif diff --git a/keyboards/nyquist/split_util.c b/keyboards/nyquist/split_util.c deleted file mode 100644 index 346cbc9089..0000000000 --- a/keyboards/nyquist/split_util.c +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "split_util.h" -#include "matrix.h" -#include "keyboard.h" -#include "config.h" -#include "timer.h" - -#ifdef USE_I2C -# include "i2c.h" -#else -# include "serial.h" -#endif - -volatile bool isLeftHand = true; - -static void setup_handedness(void) { - #ifdef EE_HANDS - isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); - #else - // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c - #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) - isLeftHand = !has_usb(); - #else - isLeftHand = has_usb(); - #endif - #endif -} - -static void keyboard_master_setup(void) { -#ifdef USE_I2C - i2c_master_init(); -#ifdef SSD1306OLED - matrix_master_OLED_init (); -#endif -#else - serial_master_init(); -#endif -} - -static void keyboard_slave_setup(void) { - timer_init(); -#ifdef USE_I2C - i2c_slave_init(SLAVE_I2C_ADDRESS); -#else - serial_slave_init(); -#endif -} - -bool has_usb(void) { - USBCON |= (1 << OTGPADE); //enables VBUS pad - _delay_us(5); - return (USBSTA & (1< -#include "eeconfig.h" - -#define SLAVE_I2C_ADDRESS 0x32 - -extern volatile bool isLeftHand; - -// slave version of matix scan, defined in matrix.c -void matrix_slave_scan(void); - -void split_keyboard_setup(void); -bool has_usb(void); -void keyboard_slave_loop(void); - -void matrix_master_OLED_init (void); - -#endif From a3bb8c05c9ac6e6e4e5334caba1a816fa309d414 Mon Sep 17 00:00:00 2001 From: zvecr Date: Tue, 6 Nov 2018 03:00:54 +0000 Subject: [PATCH 0031/1763] Keyboard: Initial foobar port (#4367) --- keyboards/foobar/config.h | 230 +++++++++++++++++++++ keyboards/foobar/foobar.c | 55 +++++ keyboards/foobar/foobar.h | 66 ++++++ keyboards/foobar/info.json | 25 +++ keyboards/foobar/keymaps/default/config.h | 19 ++ keyboards/foobar/keymaps/default/keymap.c | 49 +++++ keyboards/foobar/keymaps/default/readme.md | 1 + keyboards/foobar/keymaps/macro/config.h | 19 ++ keyboards/foobar/keymaps/macro/keymap.c | 40 ++++ keyboards/foobar/keymaps/macro/readme.md | 1 + keyboards/foobar/readme.md | 17 ++ keyboards/foobar/rules.mk | 83 ++++++++ 12 files changed, 605 insertions(+) create mode 100644 keyboards/foobar/config.h create mode 100644 keyboards/foobar/foobar.c create mode 100644 keyboards/foobar/foobar.h create mode 100644 keyboards/foobar/info.json create mode 100644 keyboards/foobar/keymaps/default/config.h create mode 100644 keyboards/foobar/keymaps/default/keymap.c create mode 100644 keyboards/foobar/keymaps/default/readme.md create mode 100644 keyboards/foobar/keymaps/macro/config.h create mode 100644 keyboards/foobar/keymaps/macro/keymap.c create mode 100644 keyboards/foobar/keymaps/macro/readme.md create mode 100644 keyboards/foobar/readme.md create mode 100644 keyboards/foobar/rules.mk diff --git a/keyboards/foobar/config.h b/keyboards/foobar/config.h new file mode 100644 index 0000000000..89219c4607 --- /dev/null +++ b/keyboards/foobar/config.h @@ -0,0 +1,230 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x0F00 +#define MANUFACTURER di0ib +#define PRODUCT The foobar Keyboard +#define DESCRIPTION A split 30 key keyboard + +#define USE_SERIAL + +/* Select hand configuration */ +#define MASTER_LEFT +//#define MASTER_RIGHT +//#define EE_HANDS + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 3*2 +#define MATRIX_COLS 5 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D7, E6, B4 } +#define MATRIX_COL_PINS { F6, F7, B1, B3, B2 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ diff --git a/keyboards/foobar/foobar.c b/keyboards/foobar/foobar.c new file mode 100644 index 0000000000..c032056a15 --- /dev/null +++ b/keyboards/foobar/foobar.c @@ -0,0 +1,55 @@ +/* Copyright 2018 + * + * 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 . + */ +#include "foobar.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 + + led_set_user(usb_led); +} + +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, + {{4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}}, + {{4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}}, +}; +#endif diff --git a/keyboards/foobar/foobar.h b/keyboards/foobar/foobar.h new file mode 100644 index 0000000000..fc49c72aaf --- /dev/null +++ b/keyboards/foobar/foobar.h @@ -0,0 +1,66 @@ +/* Copyright 2018 + * + * 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 . + */ +#pragma once + +#include "quantum.h" +#define ___ KC_NO + +#ifndef FLIP_HALF +#define LAYOUT_split( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { R04, R03, R02, R01, R00 }, \ + { R14, R13, R12, R11, R10 }, \ + { R24, R23, R22, R21, R20 } \ +} +#else +#define LAYOUT_split( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { R00, R01, R02, R03, R04 }, \ + { R10, R11, R12, R13, R14 }, \ + { R20, R21, R22, R23, R24 } \ +} +#endif + +#define LAYOUT_macro( \ + L00, L01, L02, L03, L04, \ + L10, L11, L12, L13, L14, \ + L20, L21, L22, L23, L24 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ } \ +} + +#define LAYOUT LAYOUT_macro + +#ifdef USE_I2C + #error "I2C not Supported" +#endif diff --git a/keyboards/foobar/info.json b/keyboards/foobar/info.json new file mode 100644 index 0000000000..cb7f29b256 --- /dev/null +++ b/keyboards/foobar/info.json @@ -0,0 +1,25 @@ +{ + "keyboard_name": "foobar", + "url": "", + "maintainer": "qmk", + "width": 6, + "height": 2, + "layouts": { + "LAYOUT_macro": { + "key_count": 15, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, + {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2} + ] + }, + "LAYOUT_split": { + "key_count": 30, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, + {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2} + ] + } + } +} diff --git a/keyboards/foobar/keymaps/default/config.h b/keyboards/foobar/keymaps/default/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/foobar/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/foobar/keymaps/default/keymap.c b/keyboards/foobar/keymaps/default/keymap.c new file mode 100644 index 0000000000..b750c61851 --- /dev/null +++ b/keyboards/foobar/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +#define _______ KC_TRNS +#define FN1_Q LT(1, KC_Q) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split( + FN1_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, + KC_Z, KC_X, KC_C, KC_V, KC_BSPC, KC_SPC, KC_B, KC_N, KC_M, KC_ENT + ), + + [1] = LAYOUT_split( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/foobar/keymaps/default/readme.md b/keyboards/foobar/keymaps/default/readme.md new file mode 100644 index 0000000000..7113469e7e --- /dev/null +++ b/keyboards/foobar/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default split keymap for foobar diff --git a/keyboards/foobar/keymaps/macro/config.h b/keyboards/foobar/keymaps/macro/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/foobar/keymaps/macro/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/foobar/keymaps/macro/keymap.c b/keyboards/foobar/keymaps/macro/keymap.c new file mode 100644 index 0000000000..1e7ec905fd --- /dev/null +++ b/keyboards/foobar/keymaps/macro/keymap.c @@ -0,0 +1,40 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_macro( /* Base */ + KC_F13, KC_F14, KC_F15, KC_F16, KC_INT1, \ + KC_F17, KC_F18, KC_F19, KC_F20, KC_INT2, \ + KC_F21, KC_F22, KC_F23, KC_F14, KC_INT5 \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/foobar/keymaps/macro/readme.md b/keyboards/foobar/keymaps/macro/readme.md new file mode 100644 index 0000000000..4cc59e7e5d --- /dev/null +++ b/keyboards/foobar/keymaps/macro/readme.md @@ -0,0 +1 @@ +# The default single board macro keymap for foobar diff --git a/keyboards/foobar/readme.md b/keyboards/foobar/readme.md new file mode 100644 index 0000000000..3898d4bb1a --- /dev/null +++ b/keyboards/foobar/readme.md @@ -0,0 +1,17 @@ +# foobar + +![foobar](https://2.bp.blogspot.com/-rr8TK6xg2N0/WbwVL2O7EfI/AAAAAAACDc8/209wN69ju0wAFICYYPNLIEGQhat5-5MbwCLcBGAs/s640/a.JPG) + +Split 30% keyboard that fits within the 100mm x 100mm PCB size. Can be used together as a split keyboard or as a single 15 key macropad. + +* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/foobar) + +Keyboard Maintainer: QMK Community +Hardware Supported: foobar PCB +Hardware Availability: [foobar project on 40% Keyboards](http://www.40percent.club/2017/09/foobar-10.html) + +Make example for this keyboard (after setting up your build environment): + + make foobar:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/foobar/rules.mk b/keyboards/foobar/rules.mk new file mode 100644 index 0000000000..3275651650 --- /dev/null +++ b/keyboards/foobar/rules.mk @@ -0,0 +1,83 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = lite # 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 = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +# Enable generic behavior for split boards +SPLIT_KEYBOARD = yes From 5729380530ca28049a193f84b0199e77ba3e8edd Mon Sep 17 00:00:00 2001 From: zvecr Date: Tue, 6 Nov 2018 03:01:13 +0000 Subject: [PATCH 0032/1763] Keyboard: Initial 6lit port (#4355) * Initial 6lit port * Pull request review changes * Switch to bootmagic lite --- keyboards/6lit/6lit.c | 53 ++++++ keyboards/6lit/6lit.h | 55 ++++++ keyboards/6lit/config.h | 230 +++++++++++++++++++++++ keyboards/6lit/info.json | 23 +++ keyboards/6lit/keymaps/default/config.h | 19 ++ keyboards/6lit/keymaps/default/keymap.c | 39 ++++ keyboards/6lit/keymaps/default/readme.md | 1 + keyboards/6lit/keymaps/macro/config.h | 19 ++ keyboards/6lit/keymaps/macro/keymap.c | 39 ++++ keyboards/6lit/keymaps/macro/readme.md | 1 + keyboards/6lit/readme.md | 17 ++ keyboards/6lit/rules.mk | 83 ++++++++ 12 files changed, 579 insertions(+) create mode 100644 keyboards/6lit/6lit.c create mode 100644 keyboards/6lit/6lit.h create mode 100644 keyboards/6lit/config.h create mode 100644 keyboards/6lit/info.json create mode 100644 keyboards/6lit/keymaps/default/config.h create mode 100644 keyboards/6lit/keymaps/default/keymap.c create mode 100644 keyboards/6lit/keymaps/default/readme.md create mode 100644 keyboards/6lit/keymaps/macro/config.h create mode 100644 keyboards/6lit/keymaps/macro/keymap.c create mode 100644 keyboards/6lit/keymaps/macro/readme.md create mode 100644 keyboards/6lit/readme.md create mode 100644 keyboards/6lit/rules.mk diff --git a/keyboards/6lit/6lit.c b/keyboards/6lit/6lit.c new file mode 100644 index 0000000000..fd3ae7d009 --- /dev/null +++ b/keyboards/6lit/6lit.c @@ -0,0 +1,53 @@ +/* Copyright 2018 + * + * 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 . + */ +#include "6lit.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 + + led_set_user(usb_led); +} + +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{2, 2}, {1, 2}, {0, 2}}, + {{2, 3}, {1, 3}, {0, 3}}, + {{0, 0}, {1, 0}, {2, 0}}, + {{0, 1}, {1, 1}, {2, 1}}, +}; +#endif diff --git a/keyboards/6lit/6lit.h b/keyboards/6lit/6lit.h new file mode 100644 index 0000000000..ae0beea35d --- /dev/null +++ b/keyboards/6lit/6lit.h @@ -0,0 +1,55 @@ +/* Copyright 2018 + * + * 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 . + */ +#pragma once + +#include "quantum.h" +#define ________ KC_NO + +#ifndef FLIP_HALF +#define LAYOUT_split( \ + L00, L01, L02, R00, R01, R02, \ + L10, L11, L12, R10, R11, R12 \ +) { \ + { L00, L01, L02 }, \ + { L10, L11, L12 }, \ + { R02, R01, R00 }, \ + { R12, R11, R10 }, \ +} +#else +#define LAYOUT_split( \ + L00, L01, L02, R00, R01, R02, \ + L10, L11, L12, R10, R11, R12 \ +) { \ + { L00, L01, L02 }, \ + { L10, L11, L12 }, \ + { R00, R01, R02 }, \ + { R10, R11, R12 }, \ +} +#endif + +#define LAYOUT_macro( \ + L00, L01, L02, \ + L10, L11, L12 \ +) { \ + { L00, L01, L02 }, \ + { L10, L11, L12 }, \ +} + +#define LAYOUT LAYOUT_macro + +#ifdef USE_I2C + #error "I2C not Supported" +#endif diff --git a/keyboards/6lit/config.h b/keyboards/6lit/config.h new file mode 100644 index 0000000000..8397818a61 --- /dev/null +++ b/keyboards/6lit/config.h @@ -0,0 +1,230 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x0F61 +#define MANUFACTURER di0ib +#define PRODUCT The 6lit Macropad +#define DESCRIPTION A split 12 key Macropad + +#define USE_SERIAL + +/* Select hand configuration */ +#define MASTER_LEFT +//#define MASTER_RIGHT +//#define EE_HANDS + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 2*2 +#define MATRIX_COLS 3 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D7, E6 } +#define MATRIX_COL_PINS { F6, F7, B1 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ diff --git a/keyboards/6lit/info.json b/keyboards/6lit/info.json new file mode 100644 index 0000000000..ce1a7d6e16 --- /dev/null +++ b/keyboards/6lit/info.json @@ -0,0 +1,23 @@ +{ + "keyboard_name": "6lit", + "url": "", + "maintainer": "qmk", + "width": 6, + "height": 2, + "layouts": { + "LAYOUT_macro": { + "key_count": 6, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1} + ] + }, + "LAYOUT_split": { + "key_count": 12, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1} + ] + } + } +} diff --git a/keyboards/6lit/keymaps/default/config.h b/keyboards/6lit/keymaps/default/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/6lit/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/6lit/keymaps/default/keymap.c b/keyboards/6lit/keymaps/default/keymap.c new file mode 100644 index 0000000000..6864c72f78 --- /dev/null +++ b/keyboards/6lit/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split( /* Base */ + KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, \ + KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24 \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/6lit/keymaps/default/readme.md b/keyboards/6lit/keymaps/default/readme.md new file mode 100644 index 0000000000..b3acc3f58a --- /dev/null +++ b/keyboards/6lit/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default split keymap for 6lit diff --git a/keyboards/6lit/keymaps/macro/config.h b/keyboards/6lit/keymaps/macro/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/6lit/keymaps/macro/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/6lit/keymaps/macro/keymap.c b/keyboards/6lit/keymaps/macro/keymap.c new file mode 100644 index 0000000000..6b10ac1330 --- /dev/null +++ b/keyboards/6lit/keymaps/macro/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_macro( /* Base */ + KC_F19, KC_F20, KC_F21, \ + KC_F22, KC_F23, KC_F24 \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/6lit/keymaps/macro/readme.md b/keyboards/6lit/keymaps/macro/readme.md new file mode 100644 index 0000000000..9f883b821c --- /dev/null +++ b/keyboards/6lit/keymaps/macro/readme.md @@ -0,0 +1 @@ +# The default single board macro keymap for 6lit diff --git a/keyboards/6lit/readme.md b/keyboards/6lit/readme.md new file mode 100644 index 0000000000..d5b2100285 --- /dev/null +++ b/keyboards/6lit/readme.md @@ -0,0 +1,17 @@ +# 6lit + +![6lit](https://1.bp.blogspot.com/-Pa8RgYZ0hy8/Wbmr4bjuV0I/AAAAAAACDbI/WLKQMDlcDVAVf1lAIRMN51usR1XcCCVNgCLcBGAs/s1600/a.JPG) + +6 key macropad that fits within the 100mm x 100mm PCB size. Can be used singly as a regular 6 key macropad as well. + +* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/6lit) + +Keyboard Maintainer: QMK Community +Hardware Supported: 6lit PCB +Hardware Availability: [6lit project on 40% Keyboards](http://www.40percent.club/2017/09/6lit.html) + +Make example for this keyboard (after setting up your build environment): + + make 6lit:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/6lit/rules.mk b/keyboards/6lit/rules.mk new file mode 100644 index 0000000000..3275651650 --- /dev/null +++ b/keyboards/6lit/rules.mk @@ -0,0 +1,83 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = lite # 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 = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +# Enable generic behavior for split boards +SPLIT_KEYBOARD = yes From 4636f0f623c71f1eda8628cbae4784fe08a8faf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Tue, 6 Nov 2018 06:34:54 +0100 Subject: [PATCH 0033/1763] Remove ALTG(kc) as it's misleading and is not actually AltGr (#4338) * Remove ALTG(kc) as it's misleading and is not actually AltGr * Add temporary alias for ALGR in keyboards/planck/keymaps/pevecyan/keymap.c --- docs/feature_advanced_keycodes.md | 1 - docs/keycodes.md | 1 - keyboards/planck/keymaps/pevecyan/keymap.c | 2 ++ quantum/keymap_extras/keymap_slovenian.h | 30 ++++++++++++---------- quantum/quantum_keycodes.h | 1 - 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index f2e4909d86..f9a5c39806 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -73,7 +73,6 @@ These allow you to combine a modifier with a keycode. When pressed, the keydown |`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`| |`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` | |`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | -|`ALTG(kc)`| |Hold Right Control and Alt and press `kc` | |`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` | |`LCA(kc)` | |Hold Left Control and Alt and press `kc` | diff --git a/docs/keycodes.md b/docs/keycodes.md index 6676bb53c9..e5d35b2b4a 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -333,7 +333,6 @@ This is a reference only. Each group of keys links to the page documenting their |`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`| |`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` | |`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | -|`ALTG(kc)`| |Hold Right Control and Alt and press `kc` | |`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` | |`LCA(kc)` | |Hold Left Control and Alt and press `kc` | diff --git a/keyboards/planck/keymaps/pevecyan/keymap.c b/keyboards/planck/keymaps/pevecyan/keymap.c index 4d76f09b0a..57f9f0e7f9 100644 --- a/keyboards/planck/keymaps/pevecyan/keymap.c +++ b/keyboards/planck/keymaps/pevecyan/keymap.c @@ -20,6 +20,8 @@ #include "muse.h" #include "keymap_slovenian.h" +#define ALTG(kc) ALGR(kc) // FIXME: Remove this + extern keymap_config_t keymap_config; enum planck_layers { diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index a9db17becd..f27123c2a2 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -17,8 +17,12 @@ #ifndef KEYMAP_SLOVENIAN #define KEYMAP_SLOVENIAN + #include "keymap.h" +// Alt gr +#define ALGR(kc) RALT(kc) +#define SI_ALGR KC_RALT //Swapped Z and Y #define SI_Z KC_Y @@ -90,18 +94,18 @@ #define SI_UNDS LSFT(SI_MINS) // _ // Alt Gr-ed characters -#define SI_CIRC ALTG(KC_3) // ^ -#define SI_DEG ALTG(KC_5) // ° -#define SI_GRV ALTG(KC_7) // ` -#define SI_ACCU ALTG(KC_9) // ´ -#define SI_LCBR ALTG(KC_B) // { -#define SI_RCBR ALTG(KC_N) // } -#define SI_LBRC ALTG(KC_F) // [ -#define SI_RBRC ALTG(KC_G) // ] -#define SI_BSLS ALTG(KC_Q) // backslash -#define SI_AT ALTG(KC_V) // @ -#define SI_EURO ALTG(KC_E) // € -#define SI_TILD ALTG(KC_1) // ~ -#define SI_PIPE ALTG(KC_W) // | +#define SI_CIRC ALGR(KC_3) // ^ +#define SI_DEG ALGR(KC_5) // ° +#define SI_GRV ALGR(KC_7) // ` +#define SI_ACCU ALGR(KC_9) // ´ +#define SI_LCBR ALGR(KC_B) // { +#define SI_RCBR ALGR(KC_N) // } +#define SI_LBRC ALGR(KC_F) // [ +#define SI_RBRC ALGR(KC_G) // ] +#define SI_BSLS ALGR(KC_Q) // backslash +#define SI_AT ALGR(KC_V) // @ +#define SI_EURO ALGR(KC_E) // € +#define SI_TILD ALGR(KC_1) // ~ +#define SI_PIPE ALGR(KC_W) // | #endif diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index e983798f2b..53fece21cc 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -475,7 +475,6 @@ enum quantum_keycodes { #define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc)) #define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc)) #define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc)) -#define ALTG(kc) (QK_RCTL | QK_RALT | (kc)) #define SGUI(kc) (QK_LGUI | QK_LSFT | (kc)) #define SCMD(kc) SGUI(kc) #define SWIN(kc) SGUI(kc) From 672926562519c1ee7370b3ef188c11525de326e5 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 5 Nov 2018 21:35:16 -0800 Subject: [PATCH 0034/1763] Clarify the Mod Tap defines in documentation (#4352) * Fix up Mod Tap settings keys * Change link names * permissive hold wordsmith Co-Authored-By: drashna * ignore mod tap wordsmithing Co-Authored-By: drashna * grammar fix Co-Authored-By: drashna * wordsmithing Co-Authored-By: drashna * word smithing Co-Authored-By: drashna --- docs/config_options.md | 9 +++-- docs/feature_advanced_keycodes.md | 62 +++++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index 19861c9d23..c4921c21d7 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -132,14 +132,15 @@ If you define these options you will enable the associated feature, which may in * `#define TAPPING_TOGGLE 2` * how many taps before triggering the toggle * `#define PERMISSIVE_HOLD` - * makes tap and hold keys work better for fast typers who don't want tapping term set above 500 + * makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the `TAPPING_TERM` * See [Permissive Hold](feature_advanced_keycodes.md#permissive-hold) for details * `#define IGNORE_MOD_TAP_INTERRUPT` - * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold - * See [Mod tap interrupt](feature_advanced_keycodes.md#mod-tap-interrupt) for details + * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the `TAPPING_TERM` for both keys. + * See [Mod tap interrupt](feature_advanced_keycodes.md#ignore-mod-tap-interrupt) for details * `#define TAPPING_FORCE_HOLD` * makes it possible to use a dual role key as modifier shortly after having been tapped - * See [Hold after tap](feature_advanced_keycodes.md#hold-after-tap) + * See [Hold after tap](feature_advanced_keycodes.md#tapping-force-hold) + * Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle) * `#define LEADER_TIMEOUT 300` * how long before the leader key times out * `#define ONESHOT_TIMEOUT 300` diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index f9a5c39806..bb5cb7419b 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -170,30 +170,56 @@ As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new #define PERMISSIVE_HOLD ``` -This makes it easier for fast typists to use dual-function keys. Without this, if you let go of a held key inside the tapping term, it won't register. +This makes tap and hold keys (like Mod Tap) work better for fast typist, or for high `TAPPING_TERM` settings. -Example: (Tapping Term = 200ms) +If you press a Mod Tap key, tap another key (press and release) and then release the Mod Tap key, all within the tapping term, it will output the "tapping" function for both keys. -- SHFT_T(KC_A) Down -- KC_X Down -- KC_X Up -- SHFT_T(KC_A) Up +For Instance: + +- `SHFT_T(KC_A)` Down +- `KC_X` Down +- `KC_X` Up +- `SHFT_T(KC_A)` Up + +Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`). + +?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`. + +# Ignore Mod Tap Interrupt + +To enable this setting, add this to your `config.h`: + +```c +#define IGNORE_MOD_TAP_INTERRUPT +``` -With defaults, if above is typed within tapping term, this will emit `ax`. With permissive hold, if above is typed within tapping term, this will emit `X` (so, Shift+X). +Similar to Permissive Hold, this alters how the firmware processes input for fast typist. If you press a Mod Tap key, press another key, release the Mod Tap key, and then release the normal key, it would normally output the "tapping" function for both keys. This may not be desirable for rolling combo keys. -# Mod tap interrupt +Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_TERM` to trigger the hold function (the mod). -When a dual role key used for a modifier is quickly followed by another keys, it is interpreted as held even before the tapping term elapsed. This is a problem if a key is used for example inside a rolling combo because the second key will be pressed before the first key is released. +For Instance: -For example, when trying to type the rolling combo "zx" and z being configured to send Ctrl when hold, z rapidly followed by x actually sends Ctrl-x. That's bad. +- `SHFT_T(KC_A)` Down +- `KC_X` Down +- `SHFT_T(KC_A)` Up +- `KC_X` Up -You can disable this behavior by defining `IGNORE_MOD_TAP_INTERRUPT` in `config.h`. +Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` enabled, holding both keys are required for the `TAPPING_TERM` to register the hold action. A quick tap will output `ax` in this case, while a hold on both will still output `X` (`SHIFT`+`x`). -Note that this only concerns modifiers and not layer switching keys. -# Hold after tap +?> __Note__: This only concerns modifiers and not layer switching keys. -When the user holds a key after tap, this repeats the tapped key rather to hold a modifier key. This allows to use auto repeat for the tapped key. If you prefer to hold a modifier instead, define `TAPPING_FORCE_HOLD` in `config.h`. +?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`. + +# Tapping Force Hold + +To enable `tapping force hold`, add the following to your `config.h`: + +```c +#define TAPPING_FORCE_HOLD +``` + +When the user holds a key after tap, this repeats the tapped key rather to hold a modifier key. This allows to use auto repeat for the tapped key. Example: @@ -211,6 +237,12 @@ With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allo # Retro Tapping +To enable `retro tapping`, add the following to your `config.h`: + +```c +#define RETRO_TAPPING +``` + Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term. -For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With `RETRO_TAPPING` defined in your `config.h`, it will send `KC_SPACE`. +For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead. From f2101cfb6a2270345fe6235d4c36e2e0d49db528 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 5 Nov 2018 21:36:26 -0800 Subject: [PATCH 0035/1763] Update to drashna keymaps (#4365) * Consistency fixes and more eeprom defaults * Handle setting Unicode mode on eeprom reset better * Unicode EEPROM hack * Re-enable permissive hold and ignore mod tap * Set unicode input mode * More unicode stuff * more haaaaaacks * Attempted RGB Cleanup * Fix compiler issue * Add GitLab CI config for personal compiling * Add avr gcc version to GitLab CI script * Add rgblight init to matrix init --- layouts/community/ergodox/drashna/keymap.c | 2 +- layouts/community/ortho_4x12/drashna/config.h | 2 +- layouts/community/ortho_4x12/drashna/keymap.c | 52 ++++++++++++------- users/drashna/.gitlab-ci.yml | 26 ++++++++++ users/drashna/config.h | 4 +- users/drashna/drashna.c | 40 +++++++++----- users/drashna/rgb_stuff.c | 35 ++++--------- 7 files changed, 98 insertions(+), 63 deletions(-) create mode 100644 users/drashna/.gitlab-ci.yml diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index 518eaf0348..360a2d9c6d 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c @@ -40,7 +40,7 @@ bool skip_leds = false; KC_TAB, K01, K02, K03, K04, K05, TG(_DIABLO), TG(_DIABLO), K06, K07, K08, K09, K0A, KC_BSLS, \ KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \ KC_MLSF, CTL_T(K21), K22, K23, K24, K25, TG(_GAMEPAD), TG(_GAMEPAD), K26, K27, K28, K29, CTL_T(K2A), KC_MRSF, \ - KC_GRV, OSM(MOD_MEH),OSM(MOD_LGUI),KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, UC_IRNY, \ + KC_GRV, OSM(MOD_MEH),OSM(MOD_LGUI),KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, UC_SHRG, \ OS_LALT, OS_LGUI, OS_RGUI, CTL_T(KC_ESCAPE), \ KC_HOME, KC_PGUP, \ LT(_LOWER, KC_SPACE),KC_BSPC, KC_END, KC_PGDN, KC_DEL, LT(_RAISE, KC_ENTER) \ diff --git a/layouts/community/ortho_4x12/drashna/config.h b/layouts/community/ortho_4x12/drashna/config.h index b4c780cc11..f279651b63 100644 --- a/layouts/community/ortho_4x12/drashna/config.h +++ b/layouts/community/ortho_4x12/drashna/config.h @@ -18,7 +18,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) // #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended +// #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended // #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1 // #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 // #define EECONFIG_RGB_MATRIX (uint32_t *)16 diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c index 108df69315..2a9e32cc88 100644 --- a/layouts/community/ortho_4x12/drashna/keymap.c +++ b/layouts/community/ortho_4x12/drashna/keymap.c @@ -17,6 +17,10 @@ #include QMK_KEYBOARD_H #include "drashna.h" +#ifdef RGB_MATRIX_ENABLE +extern bool g_suspend_state; +#endif + #ifdef BACKLIGHT_ENABLE enum planck_keycodes { BACKLIT = NEW_SAFE_RANGE, @@ -135,6 +139,15 @@ bool music_mask_user(uint16_t keycode) { #ifdef RGB_MATRIX_ENABLE +void suspend_power_down_keymap(void) +{ + rgb_matrix_set_suspend_state(true); +} + +void suspend_wakeup_init_keymap(void) +{ + rgb_matrix_set_suspend_state(false); +} void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) { rgb_led led; @@ -152,25 +165,26 @@ void rgb_matrix_indicators_user(void) { uint8_t this_mod = get_mods(); uint8_t this_led = host_keyboard_leds(); uint8_t this_osm = get_oneshot_mods(); - - switch (biton32(layer_state)) { - case _RAISE: - rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break; - case _LOWER: - rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break; - case _ADJUST: - rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break; - default: - switch (biton32(default_layer_state)) { - case _QWERTY: - rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, true); break; - case _COLEMAK: - rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, true); break; - case _DVORAK: - rgb_matrix_layer_helper(0x00, 0xFF, 0x00, true); break; - case _WORKMAN: - rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, true); break; - } + if (!g_suspend_state) { + switch (biton32(layer_state)) { + case _RAISE: + rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break; + case _LOWER: + rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break; + case _ADJUST: + rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break; + default: + switch (biton32(default_layer_state)) { + case _QWERTY: + rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, true); break; + case _COLEMAK: + rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, true); break; + case _DVORAK: + rgb_matrix_layer_helper(0x00, 0xFF, 0x00, true); break; + case _WORKMAN: + rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, true); break; + } + } } switch (biton32(default_layer_state)) { diff --git a/users/drashna/.gitlab-ci.yml b/users/drashna/.gitlab-ci.yml new file mode 100644 index 0000000000..3c95ad8507 --- /dev/null +++ b/users/drashna/.gitlab-ci.yml @@ -0,0 +1,26 @@ +stages: + - build + +qmk_firmware: + stage: build + variables: + GIT_SUBMODULE_STRATEGY: recursive + tags: + - linux + image: ubuntu + before_script: + - apt-get update -qy + - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip + - avr-gcc --version + script: + - make iris/rev2:drashna iris/rev2:drashna_old ergodox_ez:drashna viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna + artifacts: + name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" + paths: + - ./*.hex + - ./*.bin + only: + - master + - drashna_keymaps + - merge-requests + - branches diff --git a/users/drashna/config.h b/users/drashna/config.h index 9d7d20add0..7e6a7d1c81 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -44,8 +44,8 @@ // and when this option isn't enabled, z rapidly followed by x // actually sends Ctrl-x. That's bad.) #define IGNORE_MOD_TAP_INTERRUPT -#undef PERMISSIVE_HOLD -// #define TAPPING_FORCE_HOLD +#define PERMISSIVE_HOLD +//#define TAPPING_FORCE_HOLD //#define RETRO_TAPPING #define FORCE_NKRO diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index b2219e9aa7..4111d29314 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -20,6 +20,12 @@ along with this program. If not, see . #include "rgb_stuff.h" userspace_config_t userspace_config; +#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) + #define DRASHNA_UNICODE_MODE UC_WIN +#else + // set to 2 for UC_WIN, set to 4 for UC_WINC + #define DRASHNA_UNICODE_MODE 2 +#endif uint16_t copy_paste_timer; // Helper Functions @@ -154,19 +160,18 @@ void matrix_init_user(void) { userspace_config.raw = eeconfig_read_user(); -#ifdef BOOTLOADER_CATERINA - DDRD &= ~(1<<5); - PORTD &= ~(1<<5); + #ifdef BOOTLOADER_CATERINA + DDRD &= ~(1<<5); + PORTD &= ~(1<<5); - DDRB &= ~(1<<0); - PORTB &= ~(1<<0); -#endif + DDRB &= ~(1<<0); + PORTB &= ~(1<<0); + #endif -#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) - if (eeprom_read_byte(EECONFIG_UNICODEMODE) != UC_WIN) { - set_unicode_input_mode(UC_WIN); - } -#endif //UNICODE_ENABLE + #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) + set_unicode_input_mode(DRASHNA_UNICODE_MODE); + get_unicode_input_mode(); + #endif //UNICODE_ENABLE matrix_init_keymap(); } @@ -266,9 +271,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { uint8_t temp_mod = get_mods(); - clear_mods(); + uint8_t temp_osm = get_oneshot_mods(); + clear_mods(); clear_oneshot_mods(); send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10); - if (temp_mod & MODS_SHIFT_MASK) { + if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) { #if defined(__ARM__) send_string_with_delay_P(PSTR(":dfu-util"), 10); #elif defined(BOOTLOADER_DFU) @@ -282,7 +288,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #if defined(KEYBOARD_viterbi) send_string_with_delay_P(PSTR(":dfu"), 10); #endif - if (temp_mod & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); } + if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); } send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10); set_mods(temp_mod); } @@ -422,4 +428,10 @@ void eeconfig_init_user(void) { userspace_config.raw = 0; userspace_config.rgb_layer_change = true; eeconfig_update_user(userspace_config.raw); + #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) + set_unicode_input_mode(DRASHNA_UNICODE_MODE); + get_unicode_input_mode(); + #else + eeprom_update_byte(EECONFIG_UNICODEMODE, DRASHNA_UNICODE_MODE); + #endif } diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 9ad94c0c3d..b6de4d39e5 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -12,14 +12,6 @@ void rgblight_sethsv_default_helper(uint8_t index) { #endif // RGBLIGHT_ENABLE #ifdef INDICATOR_LIGHTS -uint8_t last_mod; -uint8_t last_led; -uint8_t last_osm; -uint8_t current_mod; -uint8_t current_led; -uint8_t current_osm; - - void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) { if (userspace_config.rgb_layer_change && biton32(layer_state) == 0) { if (this_mod & MODS_SHIFT_MASK || this_led & (1< Date: Mon, 5 Nov 2018 21:38:18 -0800 Subject: [PATCH 0036/1763] Add EEPROM_RESET keycode to core code (#4234) * Add EEPROM Reset keycode * Add keycode to docs * Move EEPROM Reset code to the end of the enum * Cleanup and naming change --- docs/quantum_keycodes.md | 25 +++++++++++++------------ quantum/quantum.c | 5 +++++ quantum/quantum_keycodes.h | 4 ++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md index 1d7fc0e127..90192e6324 100644 --- a/docs/quantum_keycodes.md +++ b/docs/quantum_keycodes.md @@ -8,15 +8,16 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are ## QMK Keycodes -|Key |Aliases |Description | -|-------------|-----------|---------------------------------------------------------------------| -|`RESET` | |Put the keyboard into DFU mode for flashing | -|`DEBUG` | |Toggle debug mode | -|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, ` when pressed with Shift or GUI| -|`KC_LSPO` | |Left Shift when held, `(` when tapped | -|`KC_RSPC` | |Right Shift when held, `)` when tapped | -|`KC_LEAD` | |The [Leader key](feature_leader_key.md) | -|`KC_LOCK` | |The [Lock key](feature_key_lock.md) | -|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) | -|`M(n)` | |Call macro `n` | -|`MACROTAP(n)`| |Macro-tap `n` idk FIXME | +|Key |Aliases |Description | +|---------------|-----------|---------------------------------------------------------------------| +|`RESET` | |Put the keyboard into DFU mode for flashing | +|`DEBUG` | |Toggle debug mode | +|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it | +|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, ` when pressed with Shift or GUI| +|`KC_LSPO` | |Left Shift when held, `(` when tapped | +|`KC_RSPC` | |Right Shift when held, `)` when tapped | +|`KC_LEAD` | |The [Leader key](feature_leader_key.md) | +|`KC_LOCK` | |The [Lock key](feature_key_lock.md) | +|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) | +|`M(n)` | |Call macro `n` | +|`MACROTAP(n)` | |Macro-tap `n` idk FIXME | diff --git a/quantum/quantum.c b/quantum/quantum.c index 5f1a691c88..69692233eb 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -298,6 +298,11 @@ bool process_record_quantum(keyrecord_t *record) { print("DEBUG: enabled.\n"); } return false; + case EEPROM_RESET: + if (record->event.pressed) { + eeconfig_init(); + } + return false; #ifdef FAUXCLICKY_ENABLE case FC_TOG: if (record->event.pressed) { diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 53fece21cc..14f8c2b812 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -454,6 +454,8 @@ enum quantum_keycodes { TERM_OFF, #endif + EEPROM_RESET, + // always leave at the end SAFE_RANGE }; @@ -569,6 +571,8 @@ enum quantum_keycodes { #define KC_GESC GRAVE_ESC +#define EEP_RST EEPROM_RESET + #define CK_TOGG CLICKY_TOGGLE #define CK_RST CLICKY_RESET #define CK_UP CLICKY_UP From 26a201e6875e82c623c136eccf937b511199c701 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 28 Oct 2018 09:18:41 -0700 Subject: [PATCH 0037/1763] fix example to reflect caveat --- docs/feature_combo.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/feature_combo.md b/docs/feature_combo.md index 5bb73ef106..05ffc0d725 100644 --- a/docs/feature_combo.md +++ b/docs/feature_combo.md @@ -44,15 +44,15 @@ For a more complicated implementation, you can use the `process_combo_event` fun ```c enum combo_events { ZC_COPY, - ZV_PASTE + XV_PASTE }; const uint16_t PROGMEM copy_combo[] = {KC_Z, KC_C, COMBO_END}; -const uint16_t PROGMEM paste_combo[] = {KC_Z, KC_V, COMBO_END}; +const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END}; combo_t key_combos[COMBO_COUNT] = { [ZC_COPY] = COMBO_ACTION(copy_combo), - [ZV_PASTE] = COMBO_ACTION(paste_combo), + [XV_PASTE] = COMBO_ACTION(paste_combo), }; void process_combo_event(uint8_t combo_index, bool pressed) { @@ -66,7 +66,7 @@ void process_combo_event(uint8_t combo_index, bool pressed) { } break; - case ZV_PASTE: + case XV_PASTE: if (pressed) { register_code(KC_LCTL); register_code(KC_V); @@ -78,7 +78,7 @@ void process_combo_event(uint8_t combo_index, bool pressed) { } ``` -This will send Ctrl+C if you hit Z and C, and Ctrl+V if you hit Z and V. But you could change this to do stuff like change layers, play sounds, or change settings. +This will send Ctrl+C if you hit Z and C, and Ctrl+V if you hit X and V. But you could change this to do stuff like change layers, play sounds, or change settings. ## Additional Configuration From 4a033641dff0cbf430a5005d6d6c1e5b8c4b540c Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 28 Oct 2018 09:29:18 -0700 Subject: [PATCH 0038/1763] Update Features page to reflect all of the features linked in the sidebar/summary --- docs/features.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/features.md b/docs/features.md index 537e1061cd..43d972e689 100644 --- a/docs/features.md +++ b/docs/features.md @@ -8,13 +8,17 @@ QMK has a staggering number of features for building your keyboard. It can take * [Auto Shift](feature_auto_shift.md) - Tap for the normal key, hold slightly longer for its shifted state. * [Backlight](feature_backlight.md) - LED lighting support for your keyboard. * [Bootmagic](feature_bootmagic.md) - Adjust the behavior of your keyboard using hotkeys. +* [Combos](feature_combos.md) - Custom actions for multiple key holds. +* [Command](feature_command.md) - Runtime version of bootmagic (Formerly known as "Magic"). * [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself. +* [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave. * [HD44780 LCD Display](feature_hd44780.md) - Support for LCD character displays using the HD44780 standard. * [Key Lock](feature_key_lock.md) - Lock a key in the "down" state. * [Layouts](feature_layouts.md) - Use one keymap with any keyboard that supports your layout. * [Leader Key](feature_leader_key.md) - Tap the leader key followed by a sequence to trigger custom behavior. * [Macros](feature_macros.md) - Send multiple key presses when pressing only one physical key. * [Mouse keys](feature_mouse_keys.md) - Control your mouse pointer from your keyboard. +* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) - Sticky Keys, lets hit a key rather than holding it. * [Pointing Device](feature_pointing_device.md) - Framework for connecting your custom pointing device to your keyboard. * [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard. * [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard. From ec34b5386455a4170db97aad21dc50b77d6ddfdd Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 29 Oct 2018 15:07:38 -0700 Subject: [PATCH 0039/1763] Fixe line endings --- keyboards/qwertyydox/rules.mk | 138 +++++++++++++++++----------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/keyboards/qwertyydox/rules.mk b/keyboards/qwertyydox/rules.mk index d04a4b9f30..8c6171bc00 100644 --- a/keyboards/qwertyydox/rules.mk +++ b/keyboards/qwertyydox/rules.mk @@ -1,69 +1,69 @@ -# 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) - -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - -# 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 = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = no # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. -SUBPROJECT_rev1 = yes -USE_I2C = yes # I2C is used between the sides -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - -SPLIT_KEYBOARD = yes - -DEFAULT_FOLDER = qwertyydox/rev1 +# 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) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# 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 = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +SUBPROJECT_rev1 = yes +USE_I2C = yes # I2C is used between the sides +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +SPLIT_KEYBOARD = yes + +DEFAULT_FOLDER = qwertyydox/rev1 From 40313cfa3b4a4f1643382f0446e0a889ef3e76dc Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 30 Oct 2018 18:00:43 -0700 Subject: [PATCH 0040/1763] Fix Terminal feature on ChibiOS --- common_features.mk | 1 + tmk_core/common.mk | 4 +++- tmk_core/common/print.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/common_features.mk b/common_features.mk index f44dfc47de..8f53a82aae 100644 --- a/common_features.mk +++ b/common_features.mk @@ -213,6 +213,7 @@ endif ifeq ($(strip $(TERMINAL_ENABLE)), yes) SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c OPT_DEFS += -DTERMINAL_ENABLE + OPT_DEFS += -DUSER_PRINT endif ifeq ($(strip $(USB_HID_ENABLE)), yes) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 3844b13d48..65dcf96f66 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -43,9 +43,11 @@ ifeq ($(PLATFORM),CHIBIOS) TMK_COMMON_DEFS += -DSTM32_EEPROM_ENABLE else TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom_teensy.c -endif + endif ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes) TMK_COMMON_SRC += $(CHIBIOS)/os/various/syscalls.c + else ifeq($(strip $(TERMINAL_ENABLE)), yes) + TMK_COMMON_SRC += $(CHIBIOS)/os/various/syscalls.c endif endif diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index d945276572..06c6cbd7f1 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -73,7 +73,9 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); #elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */ +#ifndef TERMINAL_ENABLE # include "chibios/printf.h" +#endif # ifdef USER_PRINT /* USER_PRINT */ From 73e634482ea8f57d1f1a5f1e16bc3ffd74f84b8e Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 30 Oct 2018 18:03:46 -0700 Subject: [PATCH 0041/1763] command.h include was not set correctly --- tmk_core/common/command.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tmk_core/common/command.h b/tmk_core/common/command.h index d9d89ba0f1..c38f2b9e80 100644 --- a/tmk_core/common/command.h +++ b/tmk_core/common/command.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef COMMAND_H -#define COMMAND +#pragma once /* FIXME: Add doxygen comments for the behavioral defines in here. */ @@ -155,5 +154,3 @@ bool command_proc(uint8_t code); #define XMAGIC_KC(key) KC_##key #define MAGIC_KC(key) XMAGIC_KC(key) - -#endif From 1b3ac77fec9817aad30f8d70f063d3b1eba42403 Mon Sep 17 00:00:00 2001 From: tcatkins99 Date: Tue, 6 Nov 2018 11:06:50 -0500 Subject: [PATCH 0042/1763] mapdev's Espectro layout (#4366) * Add mapdev layout to espectro * Add mapdev layout to espectro * - Update MO Co-Authored-By: tcatkins99 --- keyboards/espectro/keymaps/mapdev/keymap.c | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 keyboards/espectro/keymaps/mapdev/keymap.c diff --git a/keyboards/espectro/keymaps/mapdev/keymap.c b/keyboards/espectro/keymaps/mapdev/keymap.c new file mode 100644 index 0000000000..bbd791582d --- /dev/null +++ b/keyboards/espectro/keymaps/mapdev/keymap.c @@ -0,0 +1,88 @@ +/* + * 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 . + */ + + +#include QMK_KEYBOARD_H +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +#define _BL 0 //Base layer +#define _FN1 1 //Function layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* BL +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | END | P UP | P DOWN | DEL | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | BACK | NUM | | | | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - | +|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + | +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER | +| | | | | | | MO | | | | | | | +| CTRL | LGUI | L ALT | SPACE | R ALT | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + [_BL] = LAYOUT_default( + 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_VOLD, KC_VOLU, KC_HOME, KC_END, KC_PGUP, KC_PGDN, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_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, + 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_P4, KC_P5, KC_P6, + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + MO(_FN1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT + ), + +/* FN_1 +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | VOL | VOL | NEXT | | | +| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | | +| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | | | | | | DELETE | | | | | +|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________| +| | BACK | BACK | | | | | | | | | | | | | | | | +| | LIGHT | LIGHT | | | | | | | | | | | | | | | | +|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| | +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| | +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| + */ + + [_FN1] = LAYOUT_default( + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, KC_END, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, + _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +}; + From 388df5359b913eaf1ce6fb0ef624e430ad010ea5 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 6 Nov 2018 01:31:56 -0800 Subject: [PATCH 0043/1763] Fix Spacing issue in makefile that breaks Terminal config --- tmk_core/common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 65dcf96f66..8eac1734f4 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -46,7 +46,7 @@ ifeq ($(PLATFORM),CHIBIOS) endif ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes) TMK_COMMON_SRC += $(CHIBIOS)/os/various/syscalls.c - else ifeq($(strip $(TERMINAL_ENABLE)), yes) + else ifeq ($(strip $(TERMINAL_ENABLE)), yes) TMK_COMMON_SRC += $(CHIBIOS)/os/various/syscalls.c endif endif From 63e212c0b78be664785433c11cd728f15f50cd6a Mon Sep 17 00:00:00 2001 From: Sean Dwyer Date: Tue, 6 Nov 2018 11:54:53 -0800 Subject: [PATCH 0044/1763] Add localized LED flash effect on keypress to Massdrop ALT (#4340) --- .../massdrop/alt/keymaps/reywood/keymap.c | 195 ++++++++++++++++++ .../alt/keymaps/reywood/rgb_matrix_user.c | 193 +++++++++++++++++ .../alt/keymaps/reywood/rgb_matrix_user.h | 3 + .../massdrop/alt/keymaps/reywood/rules.mk | 34 +++ tmk_core/protocol/arm_atsam/led_matrix.c | 14 +- tmk_core/protocol/arm_atsam/led_matrix.h | 3 +- 6 files changed, 438 insertions(+), 4 deletions(-) create mode 100644 keyboards/massdrop/alt/keymaps/reywood/keymap.c create mode 100644 keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c create mode 100644 keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h create mode 100644 keyboards/massdrop/alt/keymaps/reywood/rules.mk diff --git a/keyboards/massdrop/alt/keymaps/reywood/keymap.c b/keyboards/massdrop/alt/keymaps/reywood/keymap.c new file mode 100644 index 0000000000..8b69f0e8eb --- /dev/null +++ b/keyboards/massdrop/alt/keymaps/reywood/keymap.c @@ -0,0 +1,195 @@ +#include QMK_KEYBOARD_H +#include "rgb_matrix_user.h" + +enum alt_keycodes { + L_BRI = SAFE_RANGE, //LED Brightness Increase + L_BRD, //LED Brightness Decrease + L_PTN, //LED Pattern Select Next + L_PTP, //LED Pattern Select Previous + L_PSI, //LED Pattern Speed Increase + L_PSD, //LED Pattern Speed Decrease + L_T_MD, //LED Toggle Mode + L_T_ONF, //LED Toggle On / Off + L_ON, //LED On + L_OFF, //LED Off + L_T_BR, //LED Toggle Breath Effect + L_T_PTD, //LED Toggle Scrolling Pattern Direction + U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active + U_T_AGCR, //USB Toggle Automatic GCR control + DBG_TOG, //DEBUG Toggle On / Off + DBG_MTRX, //DEBUG Toggle Matrix Prints + DBG_KBD, //DEBUG Toggle Keyboard Prints + DBG_MOU, //DEBUG Toggle Mouse Prints + MD_BOOT, //Restart into bootloader after hold timeout +}; + +#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode +#define ______ KC_TRNS + +keymap_config_t keymap_config; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \ + ), + [1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \ + _______, _______, _______, KC_UP, _______, _______, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \ + _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_VOLU, _______, \ + _______, _______, _______, KC_MPLY, MO(2), _______, KC_MRWD, KC_VOLD, KC_MFFD \ + ), + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, L_T_MD, L_T_ONF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +// 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) { +}; + +#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT)) +#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL)) +#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT)) + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + static uint32_t key_timer; + + rgb_matrix_record_key_press(record); + + switch (keycode) { + case L_BRI: + if (record->event.pressed) { + if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX; + else gcr_desired += LED_GCR_STEP; + if (led_animation_breathing) gcr_breathe = gcr_desired; + } + return false; + case L_BRD: + if (record->event.pressed) { + if (LED_GCR_STEP > gcr_desired) gcr_desired = 0; + else gcr_desired -= LED_GCR_STEP; + if (led_animation_breathing) gcr_breathe = gcr_desired; + } + return false; + case L_PTN: + if (record->event.pressed) { + if (led_animation_id == led_setups_count - 1) led_animation_id = 0; + else led_animation_id++; + } + return false; + case L_PTP: + if (record->event.pressed) { + if (led_animation_id == 0) led_animation_id = led_setups_count - 1; + else led_animation_id--; + } + return false; + case L_PSI: + if (record->event.pressed) { + led_animation_speed += ANIMATION_SPEED_STEP; + } + return false; + case L_PSD: + if (record->event.pressed) { + led_animation_speed -= ANIMATION_SPEED_STEP; + if (led_animation_speed < 0) led_animation_speed = 0; + } + return false; + case L_T_MD: + if (record->event.pressed) { + led_lighting_mode++; + if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL; + } + return false; + case L_T_ONF: + if (record->event.pressed) { + led_enabled = !led_enabled; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_ON: + if (record->event.pressed) { + led_enabled = 1; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_OFF: + if (record->event.pressed) { + led_enabled = 0; + I2C3733_Control_Set(led_enabled); + } + return false; + case L_T_BR: + if (record->event.pressed) { + led_animation_breathing = !led_animation_breathing; + if (led_animation_breathing) { + gcr_breathe = gcr_desired; + led_animation_breathe_cur = BREATHE_MIN_STEP; + breathe_dir = 1; + } + } + return false; + case L_T_PTD: + if (record->event.pressed) { + led_animation_direction = !led_animation_direction; + } + return false; + case U_T_AUTO: + if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { + TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode"); + } + return false; + case U_T_AGCR: + if (record->event.pressed && MODS_SHIFT && MODS_CTRL) { + TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode"); + } + return false; + case DBG_TOG: + if (record->event.pressed) { + TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode"); + } + return false; + case DBG_MTRX: + if (record->event.pressed) { + TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix"); + } + return false; + case DBG_KBD: + if (record->event.pressed) { + TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard"); + } + return false; + case DBG_MOU: + if (record->event.pressed) { + TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse"); + } + return false; + case MD_BOOT: + if (record->event.pressed) { + key_timer = timer_read32(); + } else { + if (timer_elapsed32(key_timer) >= 500) { + reset_keyboard(); + } + } + return false; + default: + return true; //Process all other keycodes normally + } +} diff --git a/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c new file mode 100644 index 0000000000..36131e2020 --- /dev/null +++ b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c @@ -0,0 +1,193 @@ +#include "quantum.h" +#include "led_matrix.h" + +extern issi3733_led_t *led_cur; +extern uint8_t led_per_run; +extern issi3733_led_t *lede; +extern issi3733_led_t led_map[]; + +static uint16_t last_boost_update; +static uint8_t led_boosts[ISSI3733_LED_COUNT]; +static uint8_t led_boost_index; +static uint8_t led_cur_index; + +#define LED_BOOST_REFRESH_INTERVAL_IN_MS 40 +#define LED_BOOST_DECAY 0.7 +#define LED_BOOST_PROPAGATE 0.5 +#define LED_BOOST_PEAK 100 + +#define MIN_RGB 0x050008 +#define MIN_R (MIN_RGB >> 16 & 0xff) +#define MIN_G (MIN_RGB >> 8 & 0xff) +#define MIN_B (MIN_RGB & 0xff) + +#define MAX_RGB 0xc26eff +#define MAX_R (MAX_RGB >> 16 & 0xff) +#define MAX_G (MAX_RGB >> 8 & 0xff) +#define MAX_B (MAX_RGB & 0xff) + +#define UNDERGLOW_RGB 0x4f002e +#define UNDERGLOW_R (UNDERGLOW_RGB >> 16 & 0xff) +#define UNDERGLOW_G (UNDERGLOW_RGB >> 8 & 0xff) +#define UNDERGLOW_B (UNDERGLOW_RGB & 0xff) + +#define UNDERGLOW_SCAN_CODE 255 + +#define max(a, b) (((a) > (b)) ? (a) : (b)) + +#define __ -1 +static const uint8_t KEY_TO_LED_MAP[MATRIX_ROWS][MATRIX_COLS] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, + {15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, + {30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, __, 42, 43}, + {44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57}, + {58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 66}, +}; + +#define KEY_LED_COUNT 67 +#define KP(c, r) { .col = c, .row = r } // shorthand for keypos_t +static const keypos_t LED_TO_KEY_MAP[KEY_LED_COUNT] = { + KP(0, 0), KP(1, 0), KP(2, 0), KP(3, 0), KP(4, 0), KP(5, 0), KP(6, 0), KP(7, 0), KP(8, 0), KP(9, 0), KP(10, 0), KP(11, 0), KP(12, 0), KP(13, 0), KP(14, 0), + KP(0, 1), KP(1, 1), KP(2, 1), KP(3, 1), KP(4, 1), KP(5, 1), KP(6, 1), KP(7, 1), KP(8, 1), KP(9, 1), KP(10, 1), KP(11, 1), KP(12, 1), KP(13, 1), KP(14, 1), + KP(0, 2), KP(1, 2), KP(2, 2), KP(3, 2), KP(4, 2), KP(5, 2), KP(6, 2), KP(7, 2), KP(8, 2), KP(9, 2), KP(10, 2), KP(11, 2), KP(13, 2), KP(14, 2), + KP(0, 3), KP(2, 3), KP(3, 3), KP(4, 3), KP(5, 3), KP(6, 3), KP(7, 3), KP(8, 3), KP(9, 3), KP(10, 3), KP(11, 3), KP(12, 3), KP(13, 3), KP(14, 3), + KP(0, 4), KP(1, 4), KP(2, 4), KP(6, 4), KP(10, 4), KP(11, 4), KP(12, 4), KP(13, 4), KP(14, 4), +}; + + +static void update_led_boosts(void); +static void update_led_cur_rgb_values(void); +static void set_nearest_led_to_max(uint8_t col, uint8_t row); +static uint8_t calculate_new_color_component_value(uint8_t max, uint8_t min); +static void calculate_new_led_boosts(uint8_t new_led_boosts[]); +static uint8_t calculate_new_led_boost_at(int index); +static uint8_t get_propagated_boost_from_neighbors(int led_position); +static uint8_t get_led_boost_at_keypos(uint8_t row, uint8_t col); +static void set_new_led_boosts(uint8_t* new_led_boosts); +static uint8_t map_key_position_to_led_index(uint8_t col, uint8_t row); + + +void rgb_matrix_init_user(void) { + for (int i = 0; i < ISSI3733_LED_COUNT; i++) { + led_boosts[i] = 0; + } + last_boost_update = timer_read(); + led_boost_index = 0; + led_cur_index = 0; +} + +void led_matrix_run(void) { + uint8_t led_this_run = 0; + + if (led_cur == 0) { //Denotes start of new processing cycle in the case of chunked processing + led_cur = led_map; + led_cur_index = 0; + } + update_led_boosts(); + + while (led_cur < lede && led_this_run < led_per_run) { + update_led_cur_rgb_values(); + + led_cur++; + led_cur_index++; + led_this_run++; + } +} + +void rgb_matrix_record_key_press(keyrecord_t *record) { + if (record->event.pressed) { + keypos_t key = record->event.key; + set_nearest_led_to_max(key.col, key.row); + } +} + + +static void update_led_boosts(void) { + if (timer_elapsed(last_boost_update) > LED_BOOST_REFRESH_INTERVAL_IN_MS) { + last_boost_update = timer_read(); + + uint8_t new_led_boosts[ISSI3733_LED_COUNT]; + calculate_new_led_boosts(new_led_boosts); + set_new_led_boosts(new_led_boosts); + } +} + +static void update_led_cur_rgb_values(void) { + if (led_cur->scan == UNDERGLOW_SCAN_CODE) { + *led_cur->rgb.r = UNDERGLOW_R; + *led_cur->rgb.g = UNDERGLOW_G; + *led_cur->rgb.b = UNDERGLOW_B; + } else { + *led_cur->rgb.r = calculate_new_color_component_value(MAX_R, MIN_R); + *led_cur->rgb.g = calculate_new_color_component_value(MAX_G, MIN_G); + *led_cur->rgb.b = calculate_new_color_component_value(MAX_B, MIN_B); + } +} + +static void set_nearest_led_to_max(uint8_t col, uint8_t row) { + uint8_t led_index = map_key_position_to_led_index(col, row); + if (led_index >= 0 && led_index < ISSI3733_LED_COUNT) { + led_boosts[led_index] = LED_BOOST_PEAK; + } +} + +static uint8_t calculate_new_color_component_value(uint8_t max, uint8_t min) { + uint8_t current_boost = led_boosts[led_cur_index]; + return (float)(max - min) * current_boost / LED_BOOST_PEAK + min; +} + +static void calculate_new_led_boosts(uint8_t new_led_boosts[]) { + for (int i = 0; i < ISSI3733_LED_COUNT; i++) { + new_led_boosts[i] = calculate_new_led_boost_at(i); + } +} + +static uint8_t calculate_new_led_boost_at(int index) { + uint8_t decayed_boost = led_boosts[index] * LED_BOOST_DECAY; + uint8_t propagated_boost = get_propagated_boost_from_neighbors(index); + uint8_t new_boost = (propagated_boost > decayed_boost) ? propagated_boost : decayed_boost; + if (new_boost > LED_BOOST_PEAK) { + new_boost = LED_BOOST_PEAK; + } + return new_boost; +} + +static uint8_t get_propagated_boost_from_neighbors(int led_position) { + if (led_position < 0 || led_position >= KEY_LED_COUNT) { + return 0; + } + keypos_t led_keypos = LED_TO_KEY_MAP[led_position]; + uint8_t top_boost = get_led_boost_at_keypos(led_keypos.row - 1, led_keypos.col); + uint8_t bottom_boost = get_led_boost_at_keypos(led_keypos.row + 1, led_keypos.col); + uint8_t left_boost = get_led_boost_at_keypos(led_keypos.row, led_keypos.col - 1); + uint8_t right_boost = get_led_boost_at_keypos(led_keypos.row, led_keypos.col + 1); + uint8_t max_boost = max(max(top_boost, bottom_boost), max(left_boost, right_boost)); + if (max_boost > LED_BOOST_PEAK) { + max_boost = LED_BOOST_PEAK; + } + return max_boost * LED_BOOST_PROPAGATE; +} + +static uint8_t get_led_boost_at_keypos(uint8_t row, uint8_t col) { + if (row < 0 || row >= MATRIX_ROWS || col < 0 || col >= MATRIX_COLS) { + return 0; + } + uint8_t led_index = KEY_TO_LED_MAP[row][col]; + if (led_index < 0) { + return 0; + } + return led_boosts[led_index]; +} + +static void set_new_led_boosts(uint8_t* new_led_boosts) { + for (int i = 0; i < ISSI3733_LED_COUNT; i++) { + led_boosts[i] = new_led_boosts[i]; + } +} + +static uint8_t map_key_position_to_led_index(uint8_t col, uint8_t row) { + if (row >= 0 && row < MATRIX_ROWS && col >= 0 && col < MATRIX_COLS) { + return KEY_TO_LED_MAP[row][col]; + } + return -1; +} diff --git a/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h new file mode 100644 index 0000000000..4ffd202e9b --- /dev/null +++ b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h @@ -0,0 +1,3 @@ +#pragma once + +void rgb_matrix_record_key_press(keyrecord_t *record); diff --git a/keyboards/massdrop/alt/keymaps/reywood/rules.mk b/keyboards/massdrop/alt/keymaps/reywood/rules.mk new file mode 100644 index 0000000000..b5b961a0f3 --- /dev/null +++ b/keyboards/massdrop/alt/keymaps/reywood/rules.mk @@ -0,0 +1,34 @@ +# project specific files +SRC = led_programs.c +SRC += matrix.c +SRC += rgb_matrix_user.c + +#For platform and packs +ARM_ATSAM = SAMD51J18A +MCU = cortex-m4 + +CUSTOM_MATRIX = yes + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) +VIRTSER_ENABLE = no # USB Serial Driver +RAW_ENABLE = no # Raw device +AUTO_SHIFT_ENABLE = no # Auto Shift diff --git a/tmk_core/protocol/arm_atsam/led_matrix.c b/tmk_core/protocol/arm_atsam/led_matrix.c index 7ee1dad224..c328fdc4ce 100644 --- a/tmk_core/protocol/arm_atsam/led_matrix.c +++ b/tmk_core/protocol/arm_atsam/led_matrix.c @@ -257,13 +257,15 @@ issi3733_led_t *led_cur; uint8_t led_per_run = 15; float breathe_mult; -void led_matrix_run(led_setup_t *f) +__attribute__ ((weak)) +void led_matrix_run(void) { float ro; float go; float bo; float px; uint8_t led_this_run = 0; + led_setup_t *f = (led_setup_t*)led_setups[led_animation_id]; if (led_cur == 0) //Denotes start of new processing cycle in the case of chunked processing { @@ -459,13 +461,19 @@ uint8_t led_matrix_init(void) //Run led matrix code once for initial LED coloring led_cur = 0; - led_matrix_run((led_setup_t*)led_setups[led_animation_id]); + rgb_matrix_init_user(); + led_matrix_run(); DBGC(DC_LED_MATRIX_INIT_COMPLETE); return 0; } +__attribute__ ((weak)) +void rgb_matrix_init_user(void) { + +} + #define LED_UPDATE_RATE 10 //ms //led data processing can take time, so process data in chunks to free up the processor @@ -502,7 +510,7 @@ void led_matrix_task(void) if (led_cur != lede) { //m15_off; //debug profiling - led_matrix_run((led_setup_t*)led_setups[led_animation_id]); + led_matrix_run(); //m15_on; //debug profiling } } diff --git a/tmk_core/protocol/arm_atsam/led_matrix.h b/tmk_core/protocol/arm_atsam/led_matrix.h index 01b078b711..3f2b9cdb86 100644 --- a/tmk_core/protocol/arm_atsam/led_matrix.h +++ b/tmk_core/protocol/arm_atsam/led_matrix.h @@ -86,6 +86,7 @@ typedef struct led_disp_s { } led_disp_t; uint8_t led_matrix_init(void); +void rgb_matrix_init_user(void); #define LED_MODE_NORMAL 0 //Must be 0 #define LED_MODE_KEYS_ONLY 1 @@ -134,7 +135,7 @@ extern void *led_setups[]; extern issi3733_led_t *led_cur; extern issi3733_led_t *lede; -void led_matrix_run(led_setup_t *f); +void led_matrix_run(void); void led_matrix_task(void); void gcr_compute(void); From f8d800583544bca258b9c10af3ba44de9764639e Mon Sep 17 00:00:00 2001 From: Monksoffunk Date: Wed, 7 Nov 2018 05:00:02 +0900 Subject: [PATCH 0045/1763] Zinc : Update to latest serial.c #4278 (#4361) * Add Zinc keyboard * Fix photo * Fix readme.md * Fix RGB LED init of monks/keymap.c * Fix default keymap and readme.jp * Fix change DEFS of RGB ANIMATIONS to LED_ANIMATIONS * Add EOL * Use serial_config_simpleapi.h * Fix comment char * Fix error handling in split_scomm.c : mtei works * Fix keymaps * Remove DISABLE_LEADER definition * Remove pro_micro.h * Add 2 spaces after Hardware name * Fix keymaps - remove audio codes - change LAYOUT to LAYOUT_ortho_4X12 - change "persistent_default_layer_set" to core function * Use the Community Layouts feature - with some clean up * Update latest serial.c #4278 --- keyboards/zinc/serial.c | 78 +++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/keyboards/zinc/serial.c b/keyboards/zinc/serial.c index 830f86b55a..325c29a3f7 100644 --- a/keyboards/zinc/serial.c +++ b/keyboards/zinc/serial.c @@ -1,5 +1,10 @@ /* * WARNING: be careful changing this code, it is very timing dependent + * + * 2018-10-28 checked + * avr-gcc 4.9.2 + * avr-gcc 5.4.0 + * avr-gcc 7.3.0 */ #ifndef F_CPU @@ -65,6 +70,7 @@ #error serial.c now support ATmega32U4 only #endif +//////////////// for backward compatibility //////////////////////////////// #ifndef SERIAL_USE_MULTI_TRANSACTION /* --- USE Simple API (OLD API, compatible with let's split serial.c) */ #if SERIAL_SLAVE_BUFFER_LENGTH > 0 @@ -106,7 +112,8 @@ int serial_update_buffers() return result; } -#endif // Simple API (OLD API, compatible with let's split serial.c) +#endif // end of Simple API (OLD API, compatible with let's split serial.c) +//////////////////////////////////////////////////////////////////////////// #define ALWAYS_INLINE __attribute__((always_inline)) #define NO_INLINE __attribute__((noinline)) @@ -136,38 +143,68 @@ int serial_update_buffers() // 5: about 20kbps #endif -#define TID_SEND_ADJUST 2 +#if __GNUC__ < 6 + #define TID_SEND_ADJUST 14 +#else + #define TID_SEND_ADJUST 2 +#endif #if SELECT_SOFT_SERIAL_SPEED == 0 // Very High speed #define SERIAL_DELAY 4 // micro sec - #define READ_WRITE_START_ADJUST 33 // cycles - #define READ_WRITE_WIDTH_ADJUST 6 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 34 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #elif SELECT_SOFT_SERIAL_SPEED == 1 // High speed #define SERIAL_DELAY 6 // micro sec - #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #elif SELECT_SOFT_SERIAL_SPEED == 2 // Middle speed #define SERIAL_DELAY 12 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #elif SELECT_SOFT_SERIAL_SPEED == 3 // Low speed #define SERIAL_DELAY 24 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #elif SELECT_SOFT_SERIAL_SPEED == 4 // Very Low speed #define SERIAL_DELAY 36 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #elif SELECT_SOFT_SERIAL_SPEED == 5 // Ultra Low speed #define SERIAL_DELAY 48 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #else #error invalid SELECT_SOFT_SERIAL_SPEED value #endif /* SELECT_SOFT_SERIAL_SPEED */ @@ -187,16 +224,19 @@ int serial_update_buffers() static SSTD_t *Transaction_table = NULL; static uint8_t Transaction_table_size = 0; +inline static void serial_delay(void) ALWAYS_INLINE; inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); } +inline static void serial_delay_half1(void) ALWAYS_INLINE; inline static void serial_delay_half1(void) { _delay_us(SERIAL_DELAY_HALF1); } +inline static void serial_delay_half2(void) ALWAYS_INLINE; inline static void serial_delay_half2(void) { _delay_us(SERIAL_DELAY_HALF2); @@ -216,6 +256,7 @@ void serial_input_with_pullup(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } +inline static uint8_t serial_read_pin(void) ALWAYS_INLINE; inline static uint8_t serial_read_pin(void) { return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); @@ -270,7 +311,7 @@ void sync_recv(void) { } // Used by the reciver to send a synchronization signal to the sender. -static void sync_send(void)NO_INLINE; +static void sync_send(void) NO_INLINE; static void sync_send(void) { serial_low(); @@ -536,7 +577,14 @@ int soft_serial_get_and_clean_status(int sstd_index) { #endif // Helix serial.c history -// 2018-1-29 fork from let's split (#2308) -// 2018-6-28 bug fix master to slave comm (#3255) -// 2018-8-11 improvements (#3608) -// 2018-10-21 fix serial and RGB animation conflict (#4191) +// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc) +// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4) +// (adjusted with avr-gcc 4.9.2) +// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78) +// (adjusted with avr-gcc 4.9.2) +// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae) +// (adjusted with avr-gcc 4.9.2) +// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff) +// (adjusted with avr-gcc 7.3.0) +// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66) +// (adjusted with avr-gcc 5.4.0, 7.3.0) From 8f5ac39fb90e9036a9df60f286888e02daf3fd1b Mon Sep 17 00:00:00 2001 From: TheOneTrueTrench <38593283+TheOneTrueTrench@users.noreply.github.com> Date: Tue, 6 Nov 2018 20:01:18 +0000 Subject: [PATCH 0046/1763] separated all my changes into separate files, working on generalizing my relativity macros. (#4368) * Updating to my local changes. * Added auto-complete for joins. * Added lights to imply current state better --- keyboards/dz60/keymaps/marianas/customLogic.c | 138 +++++ keyboards/dz60/keymaps/marianas/customLogic.h | 10 + .../dz60/keymaps/marianas/keyDefinitions.h | 124 +++++ keyboards/dz60/keymaps/marianas/keymap.c | 521 +----------------- keyboards/dz60/keymaps/marianas/keymap.h | 114 +--- keyboards/dz60/keymaps/marianas/relativity.c | 510 +++++++++++++++++ keyboards/dz60/keymaps/marianas/relativity.h | 32 ++ keyboards/dz60/keymaps/marianas/rules.mk | 4 + 8 files changed, 839 insertions(+), 614 deletions(-) create mode 100644 keyboards/dz60/keymaps/marianas/customLogic.c create mode 100644 keyboards/dz60/keymaps/marianas/customLogic.h create mode 100644 keyboards/dz60/keymaps/marianas/keyDefinitions.h create mode 100644 keyboards/dz60/keymaps/marianas/relativity.c create mode 100644 keyboards/dz60/keymaps/marianas/relativity.h diff --git a/keyboards/dz60/keymaps/marianas/customLogic.c b/keyboards/dz60/keymaps/marianas/customLogic.c new file mode 100644 index 0000000000..b7dbcac95b --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/customLogic.c @@ -0,0 +1,138 @@ +#include QMK_KEYBOARD_H +#include "customLogic.h" +#include "keymap.h" +#include "keyDefinitions.h" +#include "relativity.h" +#include "timer.h" + +static int16_t fnTimer = 0; + + + +uint32_t layer_state_set_user(uint32_t state) +{ + switch (biton32(state)) + { + case QWERTY: + rgblight_mode(9); + break; + case NAV_CLUSTER: + rgblight_mode(29); + break; + case GAMING: + rgblight_mode(26); + break; + case SQLMACROS: + rgblight_mode(1); + break; + case FN_LAYER: + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL+5); + break; + } + return state; +} + + + +bool printSqlVerbs(uint16_t keycode, keyrecord_t *record) +{ + if (record->event.pressed) + { + switch (keycode) + { + case S_LFTJN: + SEND_STRING("LEFT JOIN"); + activateRelativity(); + return false; + case S_INRJN: + SEND_STRING("INNER JOIN "); + activateRelativity(); + return false; + case S_SLCT: + SEND_STRING("SELECT "); return + false; + case S_FROM: + SEND_STRING("FROM "); return + false; + case S_DSNCT: + SEND_STRING("DISTINCT "); return + false; + case S_ORDER: + SEND_STRING("ORDER BY "); return + false; + case S_WHERE: + SEND_STRING("WHERE "); return + false; + case S_ALTER: + SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = SUPPLY;"); return false; + case S_ASTRK: + SEND_STRING("* "); return false; + + } + } + return true; +} + + +bool isFn = false; +bool didFn = false; + + +bool updateLayerState(uint16_t keycode, keyrecord_t *record) +{ + + if (record->event.pressed) + { + switch (keycode) + { + case FN_QT: + fnTimer = timer_read(); + layer_on(FN_LAYER); + isFn = true; + return false; + } + if (isFn) + { + didFn = true; + return true; + } + } + else + { + switch(keycode) + { + case FN_QT: + layer_off(FN_LAYER); + if (!didFn) + { + #if fnTimeout + if (TIMER_DIFF_16(timer_read(), fnTimer) <= fnTimeout) + { + activateRelativity(); + } + else + { + deactivateRelativity(); + } + #else + activateRelativity(); + #endif + } + didFn = false; + isFn = false; + return false; + } + } + return true; +} + + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + return + storeShiftState(keycode, record) && + printSqlVerbs(keycode, record) && + updateLayerState(keycode, record) && + handleSmartMacros(keycode, record); +} diff --git a/keyboards/dz60/keymaps/marianas/customLogic.h b/keyboards/dz60/keymaps/marianas/customLogic.h new file mode 100644 index 0000000000..f0e6ecdcac --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/customLogic.h @@ -0,0 +1,10 @@ +#define fnTimeout 500 + + +uint32_t layer_state_set_user(uint32_t state); + +bool printSqlVerbs(uint16_t keycode, keyrecord_t *record); + +bool updateLayerState(uint16_t keycode, keyrecord_t *record); + +bool process_record_user(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/dz60/keymaps/marianas/keyDefinitions.h b/keyboards/dz60/keymaps/marianas/keyDefinitions.h new file mode 100644 index 0000000000..010ace7694 --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/keyDefinitions.h @@ -0,0 +1,124 @@ + +//Control +#define MO_FNLR MO(FN_LAYER) +#define BACKSPC KC_BSPC +#define ENTER_OR_SQL LT(SQLMACROS,KC_ENT) +#define ESCAP KC_ESC +#define PSCR KC_PSCREEN +#define SCRL KC_SCROLLLOCK +#define PAUS KC_PAUSE +#define NSRT KC_INSERT +#define HOME KC_HOME +#define PGUP KC_PGUP +#define PGDN KC_PGDN +#define END_ KC_END +#define DELT KC_DELETE +#define UPUP KC_UP +#define D_WN KC_DOWN +#define LEFT KC_LEFT +#define RGHT KC_RIGHT + +//KEYPAD +#define KP_1 KC_KP_1 +#define KP_2 KC_KP_2 +#define KP_3 KC_KP_3 +#define KP_4 KC_KP_4 +#define KP_5 KC_KP_5 +#define KP_6 KC_KP_6 +#define KP_7 KC_KP_7 +#define KP_8 KC_KP_8 +#define KP_9 KC_KP_9 +#define KP_0 KC_KP_0 +#define NMLK KC_NUMLOCK +#define STAR KC_KP_ASTERISK +#define KSSH KC_KP_SLASH +#define KMIN KC_KP_MINUS +#define PLUS KC_KP_PLUS +#define KNTR KC_KP_ENTER +#define KDOT KC_KP_DOT + +//Modifiers +#define CTLL KC_LCTL +#define LEFTSHFT KC_LSPO +#define WINL KC_LGUI +#define ALTL KC_LALT +#define CTLR KC_RCTL +#define RIGHT_SHIFT__PAREN KC_RSPC +#define WINR KC_RGUI +#define ALTR KC_RALT +#define APPR KC_APP + + +//Punctuation +#define CMMA KC_COMM +#define PRRD KC_DOT +#define SLSH KC_SLSH +#define QUOT KC_QUOT +#define COLN KC_SCLN +#define LBRC KC_LBRC +#define RBRC KC_RBRC +#define EQUL KC_EQL +#define MNUS KC_MINS +#define BSLASH KC_BSLS + +//Layers +#define QWRTY TO(QWERTY) +#define NAVS TO(NAV_CLUSTER) +#define GAME TO(GAMING) + +//Space +#define ____ KC_TRNS +#define _____ KC_TRNS +#define ______ KC_TRNS +#define _______ KC_TRNS +#define ________ KC_TRNS +#define ___________ KC_TRNS +#define _________________ KC_TRNS +#define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC +#define KCNO KC_NO + +enum sql_macros { + S_LFTJN = SAFE_RANGE, // L + S_INRJN, // I + S_SLCT, // S + S_FROM, // F + S_DSNCT, // D + S_ORDER, // O + S_WHERE, // W + S_ALTER, // Esc + S_ASTRK, // * + + TD_A, + TD_B, + TD_C, // Corp, Corporation, Company + TD_D, // Distribution, Dist, Distributor + TD_E, + TD_F, + TD_G, // GlobalLookup + TD_H, + TD_I, // Instance, Item + TD_J, + TD_K, + TD_L, + TD_M, + TD_N, // NadRate + TD_O, + TD_P, // Product, Person, + TD_Q, // Darden + TD_R, + TD_S, // Supplier, Step + TD_T, // Task, Type + TD_U, + TD_V, + TD_W, // Workflow, + TD_X, + TD_Y, + TD_Z, + TD_BSPC, + TD_ENT, + TD_ESC, + + FN_QT +}; + +bool isShifted(void); diff --git a/keyboards/dz60/keymaps/marianas/keymap.c b/keyboards/dz60/keymaps/marianas/keymap.c index e40bc6897b..f86074b9c2 100644 --- a/keyboards/dz60/keymaps/marianas/keymap.c +++ b/keyboards/dz60/keymaps/marianas/keymap.c @@ -1,505 +1,10 @@ #include QMK_KEYBOARD_H #include "keymap.h" +#include "relativity.h" +#include "keyDefinitions.h" +#include "customLogic.h" -enum marianas_layers { - QWERTY, -/* - COLEMAK, - DVORAK, -*/ - NAV_CLUSTER, - GAMING, - SQLMACROS, - SQLNAMES, - FN_LAYER -}; - -enum sql_macros { - S_LFTJN = SAFE_RANGE, // L - S_INRJN, // I - S_SLCT, // S - S_FROM, // F - S_DSNCT, // D - S_ORDER, // O - S_WHERE, // W - S_ALTER, // Esc - S_ASTRK, // * - - TD_A, - TD_B, - TD_C, // Corp, Corporation, Company - TD_D, // Distribution, Dist, Distributor - TD_E, - TD_F, - TD_G, // GlobalLookup - TD_H, - TD_I, // Instance, Item - TD_J, - TD_K, - TD_L, - TD_M, - TD_N, // NadRate - TD_O, - TD_P, // Product, Person, - TD_Q, // Darden - TD_R, - TD_S, // Supplier, Step - TD_T, // Task, Type - TD_U, - TD_V, - TD_W, // Workflow, - TD_X, - TD_Y, - TD_Z, - TD_BSPC, - TD_ENT, - TD_ESC -}; - -uint16_t *macroTaps = 0; - -char *tableNameList = 0; - -uint8_t *charCount = 0; -uint8_t countPointer = 0; - -bool shifted = false; - -bool sendAbbr = false; - - -void initStringData(void) -{ - if (macroTaps == 0) - { - macroTaps = malloc(macroTapsLen*sizeof(uint16_t)); - for(int i = 0; i < macroTapsLen; i++) - { - macroTaps[i] = 0; - } - } - if (tableNameList == 0) - { - tableNameList = malloc(tableNameListLen*sizeof(char)); - for(int i = 0; i < tableNameListLen; i++) - { - tableNameList[i] = 0; - } - } - if (charCount == 0) - { - charCount = malloc(charCountLen*sizeof(uint8_t)); - for (int i = 0; i < charCountLen; i++) - { - charCount[i] = 0; - } - } -} - - -uint32_t layer_state_set_user(uint32_t state) -{ - switch (biton32(state)) - { - case QWERTY: - rgblight_mode(9); - break; - case NAV_CLUSTER: - rgblight_mode(29); - break; - case GAMING: - rgblight_mode(26); - break; - case SQLMACROS: - rgblight_mode(1); - rgblight_setrgb(0x00, 0xFF, 0x80); - break; - case SQLNAMES: - rgblight_mode(1); - rgblight_setrgb(0x80, 0xFF, 0x00); - break; - case FN_LAYER: - rgblight_mode(1); - rgblight_setrgb(0x00, 0x80, 0xFF); - break; - } - return state; -} - -bool containsCode(uint16_t kc) -{ - for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++) - { - if (macroTaps[i] == kc) return true; - } - return false; -} - -bool lastCodeIs(uint16_t kc) -{ - for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++) - { - if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true; - } - return false; -} - -bool last2CodeAre(uint16_t kc) -{ - for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) - { - if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true; - } - return false; -} - -bool last2CodesAre(uint16_t kc, uint16_t kc2) -{ - for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) - { - if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true; - } - return false; -} - -void addKeyCode(uint16_t kc) -{ - int i = 0; - while (i < macroTapsLen-2 && macroTaps[i] > 0) i++; - if (macroTaps[i] == 0) - { - macroTaps[i] = kc; - macroTaps[i+1] = 0; - } -} - -void eraseKeyCodes(void) -{ - int i = 0; - while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0; -} - -void eraseCharCounts(void) -{ - int i = 0; - while (i < charCountLen) - { - charCount[i] = 0; - } -} - -void printTableAbbreviation(void) -{ - initStringData(); - if (tableNameList[0] == 0) - { - return; - } - send_char(0x20); - int i = 0; - for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) - { - if (tableNameList[i] >= 65 && tableNameList[i] <= 90) - { - send_char(tableNameList[i]+32); - } - else - { - send_char(tableNameList[i]); - } - } - send_char(0x20); -} - -void eraseTableAbbreviation(void) -{ - initStringData(); - for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) - { - tableNameList[i] = '\0'; - } -} - -void printString(char* str) -{ - - if (str[0] != '\0') - { - int i = 0; - while (true) - { - if (str[i] == 0) - { - break; - } - send_char(str[i++]); - charCount[countPointer]++; - } - } -} - -void printStringAndQueueChar(char* str) -{ - initStringData(); - if (charCount[countPointer] != 0) - { - countPointer++; - } - sendAbbr = true; - if (str[0] != '\0') - { - printString(str); - - for (int i = 0; i < tableNameListLen-1; i++) - { - if (tableNameList[i] == '\0') - { - tableNameList[i] = str[0]; - tableNameList[i+1] = '\0'; - break; - } - else if (i == tableNameListLen-2) - { - printTableAbbreviation(); - break; - } - } - //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) - //{ - // send_char(tableNameList[i]); - //} - //send_string_P("Darden"); - //send_string_P(&myarray); - //send_string_P(str); - } -} - -void ReplaceString(char *orig, char *repl) -{ - int i = 0; - while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i]) - i++; - - if(orig[i] != 0x0) - { - int o = i; - while (orig[o++] != 0x0) { - charCount[countPointer]--; - register_code(KC_BSPC); - unregister_code(KC_BSPC); - } - } - printString(repl+i); -} - -void deletePrev(void) -{ - for (int i = 0; i < charCount[countPointer]; i++) - { - register_code(KC_BSPC); - unregister_code(KC_BSPC); - } - charCount[countPointer] = 0; - countPointer--; - int i = 1; - for (;i < tableNameListLen-1; i++) - { - if (tableNameList[i] == 0x0) - { - break; - } - } - tableNameList[i-1] = 0x0; -} - -void processSmartMacroTap(uint16_t kc) -{ - initStringData(); - switch(kc) - { - case TD_C: - if (containsCode(TD_D)) - { - printString("ribution"); - printStringAndQueueChar("Center"); - } - else if (last2CodeAre(TD_C)) - { - ReplaceString("Corporation", "Contact"); - } - else if(lastCodeIs(TD_C)) - { - printString("oration"); - } - else - { - printStringAndQueueChar("Corp"); - } - break; - case TD_D: - if (last2CodeAre(TD_D)) - { - ReplaceString("Distribution", "Distributor"); - } - else if(lastCodeIs(TD_D)) - { - printString("ribution"); - } - else - { - printStringAndQueueChar("Dist"); - } - break; - case TD_G: - printStringAndQueueChar("Global"); - printStringAndQueueChar("Lookup"); - break; - case TD_I: - if (containsCode(TD_W)) - printStringAndQueueChar("Instance"); - else - printStringAndQueueChar("Item"); - break; - case TD_N: - printStringAndQueueChar("NadRate"); - break; - case TD_P: - if (last2CodesAre(TD_D, TD_C)) - { - ReplaceString("DistributionCenter", "DistCenter"); - printStringAndQueueChar("Pricing"); - } - else if (last2CodeAre(TD_P)) - { - } - else if(lastCodeIs(TD_P)) - { - ReplaceString("Product", "Person"); - } - else - { - printStringAndQueueChar("Product"); - } - break; - case TD_Q: - printStringAndQueueChar("Darden"); - break; - case TD_S: - if (containsCode(TD_W)) - if (containsCode(TD_S) || containsCode(TD_D)) - printStringAndQueueChar("Step"); - else - printStringAndQueueChar("Session"); - else - printStringAndQueueChar("Supplier"); - break; - case TD_T: - if (containsCode(TD_W)) - printStringAndQueueChar("Task"); - else - printStringAndQueueChar("Type"); - break; - case TD_W: - printStringAndQueueChar("Workflow"); - break; - } - addKeyCode(kc); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) -{ - if (record->event.pressed) - { - switch (keycode) - { - case KC_LSPO: - case KC_RSPC: - shifted = true; - return true; - - case S_LFTJN: SEND_STRING("LEFT JOIN"); return false; - case S_INRJN: SEND_STRING("INNER JOIN "); return false; - case S_SLCT: SEND_STRING("SELECT "); return false; - case S_FROM: SEND_STRING("FROM "); return false; - case S_DSNCT: SEND_STRING("DISTINCT "); return false; - case S_ORDER: SEND_STRING("ORDER "); return false; - case S_WHERE: SEND_STRING("WHERE "); return false; - case S_ALTER: SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = "); return false; - case S_ASTRK: SEND_STRING("* "); return false; - - case KC_BSLS: - initStringData(); - layer_on(SQLNAMES); - return false; - - case TD_BSPC: - if (!shifted){ - deletePrev(); - } - else { - register_code(KC_BSPC); - unregister_code(KC_BSPC); - } - return false; - - case TD_A: - case TD_B: - case TD_C: - case TD_D: - case TD_E: - case TD_F: - case TD_G: - case TD_H: - case TD_I: - case TD_J: - case TD_K: - case TD_L: - case TD_M: - case TD_N: - case TD_O: - case TD_P: - case TD_Q: - case TD_R: - case TD_S: - case TD_T: - case TD_U: - case TD_V: - case TD_W: - case TD_X: - case TD_Y: - case TD_Z: - processSmartMacroTap(keycode); - return false; - - case TD_ENT: - printTableAbbreviation(); - case TD_ESC: - eraseKeyCodes(); - eraseTableAbbreviation(); - layer_off(SQLNAMES); - return true; - } - } - else - { - switch (keycode) - { - - case KC_BSLS: - if (macroTaps[0] == 0) - { - SEND_STRING("\\"); - layer_off(SQLNAMES); - } - return true; - case KC_LSPO: - case KC_RSPC: - shifted = false; - return true; - } - } - return true; -}; +// planned change: store previous table names and abbreviations to allow scrolling for inner joins on table name+id and abbreviation+id. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -507,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_60_ansi( ESCAP, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MNUS, EQUL, BACKSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, BSLASH, - MO_FNLR, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, COLN, QUOT, ENTER_OR_SQL, + FN_QT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, COLN, QUOT, ENTER_OR_SQL, LEFTSHFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, CMMA, PRRD, SLSH, RIGHT_SHIFT__PAREN, CTLL, WINL, ALTL, SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE, ALTR, WINR, APPR, CTLR), @@ -531,23 +36,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_60_ansi( S_ALTER, ____, ____, ____, ____, ____, ____, ____, S_ASTRK, ____, ____, ____, ____, ___________, ______, ____, S_WHERE, ____, ____, ____, ____, ____, S_INRJN, S_ORDER, ____, ____, ____, ______, - _______, KC_LBRC, S_SLCT, KC_PAST,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________, - ________, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _________________, + _______, KC_LBRC, S_SLCT, S_ASTRK ,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________, + ________, RGB_VAI, RGB_VAD, ____, ____, ____, ____, ____, ____, ____, ____, _________________, ____, ____, ____, /*------------------*/_____/*------------------*/, ____, ____, ____, ____), - [SQLNAMES]= - LAYOUT_60_ansi( - TD_ESC, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, TD_BSPC, - ________, TD_Q, TD_W, TD_E, TD_R, TD_T, TD_Y, TD_U, TD_I, TD_O, TD_P, ____, ____, _____, - ___________, TD_A, TD_S, TD_D, TD_F, TD_G, TD_H, TD_J, TD_K, TD_L, ____, ____, TD_ENT, - ___________, TD_Z, TD_X, TD_C, TD_V, TD_B, TD_N, TD_M, ____, ____, ____, _________________, - ____, ____, ____, /*----------------------*/TD_ENT/*-----------------------*/, ____, ____, ____, RESET), - [FN_LAYER]= LAYOUT_60_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, KC_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), ____, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, ____, ____, KC_VOLD, KC_MUTE, KC_VOLU, ____, ____, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, ____, - ____, ____, ____, ____, ____, ____, KC_END, ____, QWRTY, NAVS, GAME, ____, - ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, ____) + ____, RGB_HUI, RGB_SAI, RGB_SAD, ____, ____, KC_END, QWRTY, GAME, NAVS, ____, ____, + ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, RESET) }; diff --git a/keyboards/dz60/keymaps/marianas/keymap.h b/keyboards/dz60/keymaps/marianas/keymap.h index 00e51cea2c..bb1ea68c77 100644 --- a/keyboards/dz60/keymaps/marianas/keymap.h +++ b/keyboards/dz60/keymaps/marianas/keymap.h @@ -1,105 +1,15 @@ -#include "quantum.h" +#include QMK_KEYBOARD_H -//Control -#define MO_FNLR MO(FN_LAYER) -#define BACKSPC KC_BSPC -#define ENTER_OR_SQL LT(SQLMACROS,KC_ENT) -#define ESCAP KC_ESC -#define PSCR KC_PSCREEN -#define SCRL KC_SCROLLLOCK -#define PAUS KC_PAUSE -#define NSRT KC_INSERT -#define HOME KC_HOME -#define PGUP KC_PGUP -#define PGDN KC_PGDN -#define END_ KC_END -#define DELT KC_DELETE -#define UPUP KC_UP -#define D_WN KC_DOWN -#define LEFT KC_LEFT -#define RGHT KC_RIGHT -//KEYPAD -#define KP_1 KC_KP_1 -#define KP_2 KC_KP_2 -#define KP_3 KC_KP_3 -#define KP_4 KC_KP_4 -#define KP_5 KC_KP_5 -#define KP_6 KC_KP_6 -#define KP_7 KC_KP_7 -#define KP_8 KC_KP_8 -#define KP_9 KC_KP_9 -#define KP_0 KC_KP_0 -#define NMLK KC_NUMLOCK -#define STAR KC_KP_ASTERISK -#define KSSH KC_KP_SLASH -#define KMIN KC_KP_MINUS -#define PLUS KC_KP_PLUS -#define KNTR KC_KP_ENTER -#define KDOT KC_KP_DOT +enum marianas_layers { + QWERTY, +/* + COLEMAK, + DVORAK, +*/ + NAV_CLUSTER, + GAMING, + SQLMACROS, + FN_LAYER +}; -//Modifiers -#define CTLL KC_LCTL -#define LEFTSHFT KC_LSPO -#define WINL KC_LGUI -#define ALTL KC_LALT -#define CTLR KC_RCTL -#define RIGHT_SHIFT__PAREN KC_RSPC -#define WINR KC_RGUI -#define ALTR KC_RALT -#define APPR KC_APP - - -//Punctuation -#define CMMA KC_COMM -#define PRRD KC_DOT -#define SLSH KC_SLSH -#define QUOT KC_QUOT -#define COLN KC_SCLN -#define LBRC KC_LBRC -#define RBRC KC_RBRC -#define EQUL KC_EQL -#define MNUS KC_MINS -#define BSLASH KC_BSLS - -//Layers -#define QWRTY TO(QWERTY) -#define NAVS TO(NAV_CLUSTER) -#define GAME TO(GAMING) - -//Space -#define ____ KC_TRNS -#define _____ KC_TRNS -#define ______ KC_TRNS -#define _______ KC_TRNS -#define ________ KC_TRNS -#define ___________ KC_TRNS -#define _________________ KC_TRNS -#define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC -#define KCNO KC_NO - - - - - -#define macroTapsLen 32 -#define tableNameListLen 32 -#define charCountLen 32 - -void initStringData(void); -uint32_t layer_state_set_user(uint32_t state); -bool containsCode(uint16_t kc); -bool lastCodeIs(uint16_t kc); -bool last2CodeAre(uint16_t kc); -bool last2CodesAre(uint16_t kc, uint16_t kc2); -void addKeyCode(uint16_t kc); -void eraseKeyCodes(void); -void eraseCharCounts(void); -void printTableAbbreviation(void); -void eraseTableAbbreviation(void); -void printString(char* str); -void printStringAndQueueChar(char* str); -void ReplaceString(char *orig, char *repl); -void deletePrev(void); -void processSmartMacroTap(uint16_t kc); -bool process_record_user(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/dz60/keymaps/marianas/relativity.c b/keyboards/dz60/keymaps/marianas/relativity.c new file mode 100644 index 0000000000..96a5eb4e6f --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/relativity.c @@ -0,0 +1,510 @@ +#include "relativity.h" +#include "keymap.h" +#include "keyDefinitions.h" + + +uint16_t *macroTaps = 0; + +char *tableNameList = 0; + +uint8_t *charCount = 0; +uint8_t countPointer = 0; + +bool relativityActive = false; + + +bool sendAbbr = false; + + +static int16_t relativityTimer = 0; + + +bool tempOff = false; + + + + +void initStringData() +{ + if (macroTaps == 0) + { + macroTaps = malloc(macroTapsLen*sizeof(uint16_t)); + for(int i = 0; i < macroTapsLen; i++) + { + macroTaps[i] = 0; + } + } + if (tableNameList == 0) + { + tableNameList = malloc(tableNameListLen*sizeof(char)); + for(int i = 0; i < tableNameListLen; i++) + { + tableNameList[i] = 0; + } + } + if (charCount == 0) + { + charCount = malloc(charCountLen*sizeof(uint8_t)); + for (int i = 0; i < charCountLen; i++) + { + charCount[i] = 0; + } + } +} + +void activateRelativity(void) +{ + initStringData(); + rgblight_mode(RGBLIGHT_MODE_KNIGHT); + relativityTimer = timer_read(); + relativityActive = true; +} + +bool deactivateRelativity(void) +{ + rgblight_mode(9); + eraseKeyCodes(); + eraseTableAbbreviation(); + eraseCharCounts(); + relativityActive = false; + tempOff = false; + return false; +} + +bool containsCode(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc) return true; + } + return false; +} + +bool lastCodeIs(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true; + } + return false; +} + +bool last2CodeAre(uint16_t kc) +{ + for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true; + } + return false; +} + +bool last2CodesAre(uint16_t kc, uint16_t kc2) +{ + for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) + { + if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true; + } + return false; +} + +void addKeyCode(uint16_t kc) +{ + int i = 0; + while (i < macroTapsLen-2 && macroTaps[i] > 0) i++; + if (macroTaps[i] == 0) + { + macroTaps[i] = kc; + macroTaps[i+1] = 0; + } +} + +void eraseKeyCodes(void) +{ + int i = 0; + while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0; +} + +void eraseCharCounts(void) +{ + while (countPointer > 0) + { + charCount[countPointer] = 0; + countPointer--; + } + charCount[countPointer] = 0; +} + +void printTableAbbreviationLimited(void) +{ + if (tableNameList[0] == 0) + { + return; + } + int i = 0; + for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + { + if (tableNameList[i] >= 65 && tableNameList[i] <= 90) + { + send_char(tableNameList[i]+32); + } + else + { + send_char(tableNameList[i]); + } + } +} + +void printTableAbbreviation(void) +{ + if (tableNameList[0] == 0) + { + return; + } + send_char(0x20); + int i = 0; + for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + { + if (tableNameList[i] >= 65 && tableNameList[i] <= 90) + { + send_char(tableNameList[i]+32); + } + else + { + send_char(tableNameList[i]); + } + } + send_char(0x20); +} + +void eraseTableAbbreviation(void) +{ + for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + { + tableNameList[i] = '\0'; + } +} + +void printString(char* str) +{ + + if (str[0] != '\0') + { + int i = 0; + while (true) + { + if (str[i] == 0) + { + break; + } + send_char(str[i++]); + charCount[countPointer]++; + } + } +} + +void printStringAndQueueChar(char* str) +{ + if (charCount[countPointer] > 0 && countPointer < charCountLen) + { + countPointer++; + } + sendAbbr = true; + if (str[0] != '\0') + { + printString(str); + + for (int i = 0; i < tableNameListLen-1; i++) + { + if (tableNameList[i] == '\0') + { + tableNameList[i] = str[0]; + tableNameList[i+1] = '\0'; + break; + } + else if (i == tableNameListLen-2) + { + printTableAbbreviation(); + break; + } + } + //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) + //{ + // send_char(tableNameList[i]); + //} + //send_string_P("Darden"); + //send_string_P(&myarray); + //send_string_P(str); + } +} + +void ReplaceString(char *orig, char *repl) +{ + int i = 0; + while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i]) + i++; + + if(orig[i] != 0x0) + { + int o = i; + while (orig[o++] != 0x0) { + charCount[countPointer]--; + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + } + printString(repl+i); +} + +void deletePrev(void) +{ + if (countPointer == 0 && charCount[countPointer] == 0) + return; + for (int i = 0; i < charCount[countPointer]; i++) + { + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + charCount[countPointer] = 0; + int i = 1; + for (;i < tableNameListLen-1; i++) + { + if (tableNameList[i] == 0x0) + { + break; + } + } + tableNameList[i-1] = 0x0; + if (countPointer > 0) + { + countPointer--; + } +} + +bool processSmartMacroTap(uint16_t kc) +{ + if (relativityTimer > 0 && TIMER_DIFF_16(timer_read(), relativityTimer) >= relTimeout) + { + deactivateRelativity(); + return true; + } + relativityTimer = 0; + switch(kc) + { + case KC_C: + if (containsCode(KC_D)) + { + printString("ribution"); + printStringAndQueueChar("Center"); + } + else if (last2CodeAre(KC_C)) + { + ReplaceString("Corporation", "Contact"); + } + else if(lastCodeIs(KC_C)) + { + printString("oration"); + } + else + { + printStringAndQueueChar("Corp"); + } + break; + case KC_D: + if (last2CodeAre(KC_D)) + { + ReplaceString("Distribution", "Distributor"); + } + else if(lastCodeIs(KC_D)) + { + printString("ribution"); + } + else + { + printStringAndQueueChar("Dist"); + } + break; + case KC_G: + printStringAndQueueChar("Global"); + printStringAndQueueChar("Lookup"); + break; + case KC_I: + if (containsCode(KC_W)) + printStringAndQueueChar("Instance"); + else + printStringAndQueueChar("Item"); + break; + case KC_N: + printStringAndQueueChar("NadRate"); + break; + case KC_P: + if (last2CodesAre(KC_D, KC_C)) + { + ReplaceString("DistributionCenter", "DistCenter"); + printStringAndQueueChar("Pricing"); + } + else if (last2CodeAre(KC_P)) + { + } + else if(lastCodeIs(KC_P)) + { + ReplaceString("Product", "Person"); + } + else + { + printStringAndQueueChar("Product"); + } + break; + case KC_Q: + printStringAndQueueChar("Darden"); + break; + case KC_S: + if (containsCode(KC_W)) + if (containsCode(KC_S) || containsCode(KC_D)) + printStringAndQueueChar("Step"); + else + printStringAndQueueChar("Session"); + else + printStringAndQueueChar("Supplier"); + break; + case KC_T: + if (containsCode(KC_W)) + printStringAndQueueChar("Task"); + else + printStringAndQueueChar("Type"); + break; + case KC_W: + printStringAndQueueChar("Workflow"); + break; + } + addKeyCode(kc); + return false; +} + + +bool shifted = false; +bool isShifted() +{ + return shifted; +} + +void setShifted(bool val) +{ + shifted = val; +} + + +bool storeShiftState(uint16_t keycode, keyrecord_t *record) +{ + + if (record->event.pressed) + { + switch (keycode) + { + case KC_LSPO: + case KC_RSPC: + shifted = true; + } + } + else + { + switch (keycode) + { + + case KC_LSPO: + case KC_RSPC: + shifted = false; + return true; + } + } + return true; +} + +bool handleSmartMacros(uint16_t keycode, keyrecord_t *record) +{ + if (relativityActive != true) return true; + if (record->event.pressed) + { + switch (keycode) + { + case KC_BSPC: + if (!isShifted()){ + deletePrev(); + } + else { + register_code(KC_BSPC); + unregister_code(KC_BSPC); + } + return false; + case KC_A: + case KC_B: + case KC_C: + case KC_D: + case KC_E: + case KC_F: + case KC_G: + case KC_H: + case KC_I: + case KC_J: + case KC_K: + case KC_L: + case KC_M: + case KC_N: + case KC_O: + case KC_P: + case KC_Q: + case KC_R: + case KC_S: + case KC_T: + case KC_U: + case KC_V: + case KC_W: + case KC_X: + case KC_Y: + case KC_Z: + return processSmartMacroTap(keycode); + + case PRRD: + if (tempOff) + { + SEND_STRING("Id = "); + printTableAbbreviationLimited(); + SEND_STRING(".Id"); + return deactivateRelativity(); + } + else + { + printTableAbbreviation(); + SEND_STRING("ON "); + printTableAbbreviationLimited(); + eraseKeyCodes(); + eraseTableAbbreviation(); + eraseCharCounts(); + tempOff = true; + return true; + } + + + case KC_SPC: + printTableAbbreviation(); + return deactivateRelativity(); + case ENTER_OR_SQL: + if (tempOff) + { + SEND_STRING("Id = "); + printTableAbbreviationLimited(); + SEND_STRING(".Id"); + deactivateRelativity(); + return true; + } + else + { + printTableAbbreviation(); + deactivateRelativity(); + return true; + } + case KC_ESC: + return deactivateRelativity(); + } + } + return true; +} diff --git a/keyboards/dz60/keymaps/marianas/relativity.h b/keyboards/dz60/keymaps/marianas/relativity.h new file mode 100644 index 0000000000..c917b1a4dc --- /dev/null +++ b/keyboards/dz60/keymaps/marianas/relativity.h @@ -0,0 +1,32 @@ +#include QMK_KEYBOARD_H +#define macroTapsLen 32 +#define tableNameListLen 32 +#define charCountLen 32 + +#define relTimeout 1500 + + +void activateRelativity(void); +bool deactivateRelativity(void); +void initStringData(void); +bool containsCode(uint16_t kc); +bool lastCodeIs(uint16_t kc); +bool last2CodeAre(uint16_t kc); +bool last2CodesAre(uint16_t kc, uint16_t kc2); +void addKeyCode(uint16_t kc); +void eraseKeyCodes(void); +void eraseCharCounts(void); +void printTableAbbreviation(void); +void eraseTableAbbreviation(void); +void printString(char* str); +void printStringAndQueueChar(char* str); +void ReplaceString(char *orig, char *repl); +void deletePrev(void); +bool processSmartMacroTap(uint16_t kc); +bool isShifted(void); +void setShifted(bool); + + + +bool handleSmartMacros(uint16_t keycode, keyrecord_t *record); +bool storeShiftState(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/dz60/keymaps/marianas/rules.mk b/keyboards/dz60/keymaps/marianas/rules.mk index ab188f3b2c..230d194ab8 100644 --- a/keyboards/dz60/keymaps/marianas/rules.mk +++ b/keyboards/dz60/keymaps/marianas/rules.mk @@ -15,3 +15,7 @@ AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes TAP_DANCE_ENABLE = no AUTO_SHIFT_ENABLE = no + + +SRC += relativity.c +SRC += customLogic.c From a91f439aec39ec8bbcbb2f579a9434c266f09f5c Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Wed, 7 Nov 2018 05:02:30 +0900 Subject: [PATCH 0047/1763] Helix-serial.c configuration improvement (#4370) The new simple API can be selected. Previous version, can select two way. * use old API (compatible with let's split serial.c) * use new API (multi-type transaction) This version, can select three way. * use old API (compatible with let's split serial.c) * use new API (single-type transaction) * use new API (multi-type transaction) There is no change in the code generated by this change. --- keyboards/helix/serial.c | 6 +++--- keyboards/helix/serial.h | 35 ++++++++++++++++++++--------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/keyboards/helix/serial.c b/keyboards/helix/serial.c index 325c29a3f7..6006ebf1bd 100644 --- a/keyboards/helix/serial.c +++ b/keyboards/helix/serial.c @@ -71,8 +71,8 @@ #endif //////////////// for backward compatibility //////////////////////////////// -#ifndef SERIAL_USE_MULTI_TRANSACTION -/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ +#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION) +/* --- USE OLD API (compatible with let's split serial.c) */ #if SERIAL_SLAVE_BUFFER_LENGTH > 0 uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; #endif @@ -112,7 +112,7 @@ int serial_update_buffers() return result; } -#endif // end of Simple API (OLD API, compatible with let's split serial.c) +#endif // end of OLD API (compatible with let's split serial.c) //////////////////////////////////////////////////////////////////////////// #define ALWAYS_INLINE __attribute__((always_inline)) diff --git a/keyboards/helix/serial.h b/keyboards/helix/serial.h index 7e0c0847a4..2e53928df2 100644 --- a/keyboards/helix/serial.h +++ b/keyboards/helix/serial.h @@ -15,31 +15,36 @@ // // 4: about 26kbps // // 5: about 20kbps // -// //// USE Simple API (OLD API, compatible with let's split serial.c) +// //// USE OLD API (compatible with let's split serial.c) // ex. // #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 // #define SERIAL_MASTER_BUFFER_LENGTH 1 // -// //// USE flexible API (using multi-type transaction function) -// #define SERIAL_USE_MULTI_TRANSACTION +// //// USE NEW API +// //// USE simple API (using signle-type transaction function) +// #define SERIAL_USE_SINGLE_TRANSACTION +// //// USE flexible API (using multi-type transaction function) +// #define SERIAL_USE_MULTI_TRANSACTION // // ///////////////////////////////////////////////////////////////// -#ifndef SERIAL_USE_MULTI_TRANSACTION -/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ -#if SERIAL_SLAVE_BUFFER_LENGTH > 0 -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -#endif -#if SERIAL_MASTER_BUFFER_LENGTH > 0 -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; -#endif +//////////////// for backward compatibility //////////////////////////////// +#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION) +/* --- USE OLD API (compatible with let's split serial.c) */ + #if SERIAL_SLAVE_BUFFER_LENGTH > 0 + extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; + #endif + #if SERIAL_MASTER_BUFFER_LENGTH > 0 + extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + #endif -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); + void serial_master_init(void); + void serial_slave_init(void); + int serial_update_buffers(void); -#endif // USE Simple API +#endif // end of USE OLD API +//////////////////////////////////////////////////////////////////////////// // Soft Serial Transaction Descriptor typedef struct _SSTD_t { From 29dd6645898d1647c5e4326c9851c2f1562bb6a0 Mon Sep 17 00:00:00 2001 From: Danilo Vulicevic Date: Tue, 6 Nov 2018 21:03:33 +0100 Subject: [PATCH 0048/1763] Add whitefox/billypython keymap (#4374) * Add keyboards/whitefox/keymaps/billypython Cloned from vomindoraan/qmk_firmware * Customize keymap for Linux --- .../whitefox/keymaps/billypython/config.h | 20 ++ .../whitefox/keymaps/billypython/keymap.c | 205 ++++++++++++++++++ .../whitefox/keymaps/billypython/rules.mk | 10 + 3 files changed, 235 insertions(+) create mode 100644 keyboards/whitefox/keymaps/billypython/config.h create mode 100644 keyboards/whitefox/keymaps/billypython/keymap.c create mode 100644 keyboards/whitefox/keymaps/billypython/rules.mk diff --git a/keyboards/whitefox/keymaps/billypython/config.h b/keyboards/whitefox/keymaps/billypython/config.h new file mode 100644 index 0000000000..d1c3002d27 --- /dev/null +++ b/keyboards/whitefox/keymaps/billypython/config.h @@ -0,0 +1,20 @@ +#pragma once + +#define FORCE_NKRO + +#undef IS_COMMAND +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) + +#define MAGIC_KEY_LAYER0_ALT1 BSLS +#define MAGIC_KEY_BOOTLOADER ESC + +#define MOUSEKEY_DELAY 50 +#define MOUSEKEY_INTERVAL 15 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 50 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 + +#define PERMISSIVE_HOLD +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 diff --git a/keyboards/whitefox/keymaps/billypython/keymap.c b/keyboards/whitefox/keymaps/billypython/keymap.c new file mode 100644 index 0000000000..8096885cf8 --- /dev/null +++ b/keyboards/whitefox/keymaps/billypython/keymap.c @@ -0,0 +1,205 @@ +#include QMK_KEYBOARD_H + +#define TOP LCTL(KC_HOME) +#define BOTTOM LCTL(KC_END) +#define DSKTP_L LCTL(LGUI(KC_LEFT)) +#define DSKTP_R LCTL(LGUI(KC_RGHT)) + +#define FN MO(L_FN) +#define FN_CAPS LT(L_FN, KC_CAPS) +#define FN_FNLK TT(L_FN) + +#define DESKTOP TD(TD_DESKTOP) +#define FN_RCTL TD(TD_FN_RCTL) +#define RAL_LAL TD(TD_RAL_LAL) +#define RAL_RGU TD(TD_RAL_RGU) +#define RCT_RSF TD(TD_RCT_RSF) +#define RSF_RCT TD(TD_RSF_RCT) + +#define COMMA UC(0x002C) +#define L_PAREN UC(0x0028) +#define R_PAREN UC(0x0029) +#define EQUALS UC(0x003D) +#define TIMES UC(0x00D7) +#define DIVIDE UC(0x00F7) +#define MINUS UC(0x2212) + +void eeconfig_init_user(void) { + set_unicode_input_mode(UC_LNX); +} + +enum layers { + L_BASE, + L_FN, + L_NUMPAD, +}; + +enum custom_keycodes { + CLEAR = SAFE_RANGE, + NUMPAD, +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CLEAR: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + } + return false; + + case NUMPAD: + if (record->event.pressed) { + layer_invert(L_NUMPAD); + bool num_lock = host_keyboard_leds() & 1<count == 1 || state->count == 3) { + layer_on(L_FN); + } else if (state->count == 2) { + if (!td_fn_rctrl_data.fn_on) { + layer_off(L_FN); + } + register_code(KC_RCTL); + } +} + +void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) { + if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) { + layer_off(L_FN); + } + if (state->count >= 2) { + unregister_code(KC_RCTL); + } + td_fn_rctrl_data.started = false; +} + +#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \ + .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \ + .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \ + } + +void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data; + // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2 + if (state->count == 1 || state->count == 3) { + register_code(mods->kc1); + } else if (state->count == 2) { + unregister_code(mods->kc1); + register_code(mods->kc2); + } + // Prevent tap dance from sending kc1 and kc2 as weak mods + state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2)); +} + +void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) { + qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data; + if (state->count == 1 || state->count > 2) { + unregister_code(mods->kc1); + } + if (state->count >= 2) { + unregister_code(mods->kc2); + } +} + +enum tap_dance { + TD_DESKTOP, + TD_FN_RCTL, + TD_RAL_LAL, + TD_RAL_RGU, + TD_RCT_RSF, + TD_RSF_RCT, +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop + [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset), + [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT), + [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI), + [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT), + [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RSFT, KC_RCTL), +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │PSc│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │Del│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SftCtl│ ↑ │PgD│ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │LCtl│LGui│LAlt│ Space │AlGu│FnLk│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ + */ + [L_BASE] = LAYOUT_truefox( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_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_DEL, \ + FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,RSF_RCT, KC_UP, KC_PGDN, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, RAL_RGU,FN_FNLK, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + + /* Function layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│Scr│Pau│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │PgU│ ↑ │PgD│Ply│Prv│Nxt│Clear│Ins│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │ │M← │M↓ │M→ │MW↑│ │Hom│ ← │ ↓ │ → │End│ │ │Top│ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ │MA0│MA2│MW←│MW→│ │ │ │VoD│VoU│Mut│ App │PgU│Btm│ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │ │ │ │ MW↓ │ │ │ │Hom│PgD│End│ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ + */ + [L_FN] = LAYOUT_truefox( \ + _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK,KC_PAUS, \ + KC_BTN4,KC_BTN2,KC_MS_U,KC_BTN1,KC_BTN3,KC_BTN5,_______,KC_PGUP,KC_UP, KC_PGDN,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \ + _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, _______, _______, TOP, \ + _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_APP, KC_PGUP,BOTTOM, \ + _______,_______,_______, KC_WH_D, _______,_______, KC_HOME,KC_PGDN,KC_END \ + ), + + /* Numpad layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ + * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │ PEnter │ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ + * │ │ │ │ │ │ │P0 │P0 │ , │P. │P/ │ ÷ │ │ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │ │ │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ + */ + [L_NUMPAD] = LAYOUT_truefox( \ + NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,MINUS, EQUALS, NUMPAD, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,L_PAREN,R_PAREN,_______, _______, \ + _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,TIMES, KC_PENT, _______, \ + _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, COMMA, KC_PDOT,KC_PSLS,DIVIDE, _______,_______, \ + _______,_______,_______, _______, _______,_______, _______,_______,_______ \ + ), +}; diff --git a/keyboards/whitefox/keymaps/billypython/rules.mk b/keyboards/whitefox/keymaps/billypython/rules.mk new file mode 100644 index 0000000000..abf92c2c46 --- /dev/null +++ b/keyboards/whitefox/keymaps/billypython/rules.mk @@ -0,0 +1,10 @@ +BACKLIGHT_ENABLE = no +BOOTMAGIC_ENABLE = no +COMMAND_ENABLE = yes +CONSOLE_ENABLE = yes +EXTRAKEY_ENABLE = yes +MOUSEKEY_ENABLE = yes +NKRO_ENABLE = yes +TAP_DANCE_ENABLE = yes +UNICODE_ENABLE = yes +VISUALIZER_ENABLE = no From a5d22424f40cf386120008b5d44d810c62d0ffcb Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 6 Nov 2018 12:04:25 -0800 Subject: [PATCH 0049/1763] Commit my DZ60 keymap (#4375) * default mechmerlin keymap initial commit * fix up the keymap * cleanup keymap * add rgb sleep functionality * add the beginning of a readme * fix that compile error * fixup formatting * spruce up that readme * add RGB lighting controls to _CL layer * update readme * set rgb underglow color * update readme * fix formatting --- keyboards/dz60/keymaps/mechmerlin/config.h | 6 ++ keyboards/dz60/keymaps/mechmerlin/keymap.c | 40 ++++++++++++ keyboards/dz60/keymaps/mechmerlin/readme.md | 68 +++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 keyboards/dz60/keymaps/mechmerlin/config.h create mode 100644 keyboards/dz60/keymaps/mechmerlin/keymap.c create mode 100644 keyboards/dz60/keymaps/mechmerlin/readme.md diff --git a/keyboards/dz60/keymaps/mechmerlin/config.h b/keyboards/dz60/keymaps/mechmerlin/config.h new file mode 100644 index 0000000000..92d4cfb50a --- /dev/null +++ b/keyboards/dz60/keymaps/mechmerlin/config.h @@ -0,0 +1,6 @@ +#pragma once + +// Turn off RGB when computer goes to sleep +#ifdef RGBLIGHT_ENABLE +#define RGBLIGHT_SLEEP +#endif // RGBLIGHT_ENABLE diff --git a/keyboards/dz60/keymaps/mechmerlin/keymap.c b/keyboards/dz60/keymaps/mechmerlin/keymap.c new file mode 100644 index 0000000000..1a8593ef16 --- /dev/null +++ b/keyboards/dz60/keymaps/mechmerlin/keymap.c @@ -0,0 +1,40 @@ +#include QMK_KEYBOARD_H + +enum keyboard_layers { + _BL = 0, // Base Layer + _FL, // Function Layer + _CL // Control Layer +}; + +// Custom #defined keycodes (shorter macros for readability) +#define KC_CTCP LCTL_T(KC_CAPS) +#define KC_RSSH RSFT_T(KC_SLSH) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BL] = LAYOUT_60_b_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_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_CTCP, 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_RSSH, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + [_FL] = LAYOUT_60_b_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, KC_DEL, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_PGUP, MO(_CL), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END), + + [_CL] = LAYOUT_60_b_ansi( + RESET, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; + +// Set underglow RGB leds to yellow +// Find the list of available colors in quantum/rgblight_list.h +void matrix_init_user(void) { + rgblight_sethsv_noeeprom_yellow(); +} diff --git a/keyboards/dz60/keymaps/mechmerlin/readme.md b/keyboards/dz60/keymaps/mechmerlin/readme.md new file mode 100644 index 0000000000..76ff54de54 --- /dev/null +++ b/keyboards/dz60/keymaps/mechmerlin/readme.md @@ -0,0 +1,68 @@ +# MechMerlin's DZ60 Keymap + +The purpose of this keymap is to provide examples on how to do some common QMK features. + +Make example for this keyboard (after setting up your build environment): + + make dz60:mechmerlin + +## Merlin's DZ60 Hardware Info +--- + +The DZ60 is a 60% pcb produced by KBDFans. It comes in two variants, USB Mini B and USB C. It supports many many layouts. It also supports both backlight and RGB underglow. The USB C variant does not have a hardware reset switch. USB C to C is not supported. + +Merlin's DZ60 uses +- Layout B, in QMK this is LAYOUT_60_b_ansi. +- USB C +- 50g Zilents +- Arrows are 78g Zilents +- KPRepublic XD64 Case + +## Layers +--- + +Merlin's keymap has three different layers. To switch layers you can use the `MO(X)` keycode, where `X` is the layer you want to switch to. + +### _BL + +This is the base layer also known as layer 0. It is a standard QWERTY layout. It has the `_FL` layer switch key. + +### _FL + +This is the function layer also known as layer 1. It utiizes the following: +- Function Keys +- Navigation Keys +- Audio keys such as Mute, Volume Down and Volume Up. +- `_CL` layer switch key + +### _CL + +This is the control layer also known as layer 2. It utilizes the following: +- RGB Controls +- `RESET` key + +## Non Standard Keycodes +--- +### RESET + +As long `BOOTMAGIC_ENABLE` is set to `yes` in `rules.mk`, the DZ60 can be put into bootloader mode by holding the `space` key and the `b` key while plugging in. However sometmes this doesn't work or is troublesome to do, might as well use the `RESET` keycode to accomplish this. + +### RSFT_T(KC_SLSH) + +Layout B is missing the `?` key and is instead replaced with a `right shift`. This keycode makes it so that the key can be tapped for `?` and held for `right shift`. + +### LCTL_T(KC_CAPS) + +`Caps Lock` is only ever used by tapping, why not use it as a `control` key when held? This keycode makes it so that the key can be tapped for `caps lock` and held for `control`. + + +## RGB Lighting +--- + +### RGBLIGHT_SLEEP + +This is set in `mechmerlin/config.h` so that when the computer goes to sleep, the RGB lights will also go to sleep on the keyboard. They will turn back on when the computer wakes. + +### RGB Underglow Color: Yellow + +This is set in `mechmerlin/keymap.c` in the `matrix_init_user` function. The list of available colors can be found in [`quantum/rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/388df5359b913eaf1ce6fb0ef624e430ad010ea5/quantum/rgblight_list.h#L59-L121). From 3dec80b7746ee61e4c9e67da817635828dd86b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Tue, 6 Nov 2018 21:21:44 +0100 Subject: [PATCH 0050/1763] Improve wording, punctuation and capitalization in newbs_getting_started guide (#4342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve wording, punctuation and capitalization in newbs_getting_started guide Also add some links * Update example build command output Co-Authored-By: vomindoraan * Replace occurrences of "layout" with "keymap" Co-Authored-By: MechMerlin <30334081+mechmerlin@users.noreply.github.com> * Explicitly instruct users to open an MSYS2 MinGW 64-bit terminal * MSYS2 Console → MSYS2 MinGW * Replace thin spaces with regular spaces --- docs/newbs_getting_started.md | 78 +++++++++++++++++------------------ 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md index 2181542856..276c7fec32 100644 --- a/docs/newbs_getting_started.md +++ b/docs/newbs_getting_started.md @@ -1,99 +1,97 @@ # Introduction -Your computer keyboard has a processor inside of it, not unlike the one inside your computer. This processor runs software that is responsible for detecting button presses and sending reports about the state of the keyboard when they are pressed or released. QMK fills the role of that software, detecting button presses and passing that information on to the host computer. When you build your custom layout you are creating the equivalent of an .exe for your keyboard. +Your computer keyboard has a processor inside of it, not unlike the one inside your computer. This processor runs software that is responsible for detecting button presses and sending reports about the state of the keyboard when buttons are pressed or released. QMK fills the role of that software, detecting button presses and passing that information on to the host computer. When you build your custom keymap, you are creating the equivalent of an executable program for your keyboard. -QMK tries to put a lot of power into your hands by making easy things easy, and hard things possible. You don't have to know how to program to create powerful layouts, you only have to follow a few simple syntax rules. +QMK tries to put a lot of power into your hands by making easy things easy, and hard things possible. You don't have to know how to program to create powerful keymaps — you only have to follow a few simple syntax rules. # Getting Started -Before you can build keymaps you need to install some software and setup your build environment. This only has to be done one time no matter how many keyboards you want to compile firmware for. +Before you can build keymaps, you need to install some software and set up your build environment. This only has to be done once no matter how many keyboards you plan to compile firmware for. ## Download Software ### Text Editor -You'll need a program that can edit and save **plain text** files. If you are on Windows you can make due with Notepad, and on Linux you can use Gedit, both of which are simple but functional text editors. On macOS be careful with TextEdit.app, it will not save plain text files unless you make sure to select "Make Plain text" from the "Format" menu, or you can use another program such as Sublime Text. +You'll need a program that can edit and save **plain text** files. If you're on Windows you can make do with Notepad, and on Linux you can use gedit. Both of these are simple but functional text editors. On macOS, be careful with the default TextEdit app: it will not save plain text files unless you explicitly select _Make Plain Text_ from the _Format_ menu. + +You can also download and install a dedicated text editor like [Sublime Text](https://www.sublimetext.com/) or [VS Code](https://code.visualstudio.com/). This is probably the best way to go regardless of platform, as these programs are specifically made for editing code. ?> Not sure which text editor to use? Laurence Bradford wrote [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) to the subject. ### QMK Toolbox -QMK Toolbox is an optional graphical Windows and macOS program that allows you to both program and debug your custom keyboard. You will likely prefer it to easily flash your keyboard and receive the debugging messages that your keyboard will print. - -Download the files from the links below: - -For Windows: "qmk_toolbox.exe" or "qmk_toolbox_install.exe" (with installer) +QMK Toolbox is an optional graphical program for Windows and macOS that allows you to both program and debug your custom keyboard. You will likely find it invaluable for easily flashing your keyboard and viewing debug messages that it prints. -For Mac: "QMK.Toolbox.app.zip" or "QMK.Toolbox.pkg" (with installer) +[Download the latest release here.](https://github.com/qmk/qmk_toolbox/releases/latest) -* [Newest Release](https://github.com/qmk/qmk_toolbox/releases/latest) -* [Source Code](https://github.com/qmk/qmk_toolbox/) +* For Windows: `qmk_toolbox.exe` (portable) or `qmk_toolbox_install.exe` (installer) +* For macOS: `QMK.Toolbox.app.zip` (portable) or `QMK.Toolbox.pkg` (installer) -## Environment Setup +## Set Up Your Environment -We've tried to make QMK as easy to setup as possible. You only have to prepare your Linux or Unix environment and let QMK install the rest. +We've tried to make QMK as easy to set up as possible. You only have to prepare your Linux or Unix environment, then let QMK install the rest. -?> If you haven't worked with the Linux/Unix command line before there are a few basic concepts and commands you should learn. These resources will teach you enough to work with QMK:
+?> If you haven't worked with the Linux/Unix command line before, there are a few basic concepts and commands you should learn. These resources will teach you enough to be able to work with QMK:
[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)
[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html) ### Windows -You will need to install msys2 and git. +You will need to install MSYS2 and Git. -* Follow the installation instructions on the msys2 homepage: http://www.msys2.org -* Close any open msys2 terminals, and open a new terminal -* Install git by running this command: `pacman -S git` +* Follow the installation instructions on the [MSYS2 homepage](http://www.msys2.org). +* Close any open MSYS2 terminals and open a new MSYS2 MinGW 64-bit terminal. +* Install Git by running this command: `pacman -S git`. ### macOS -You will need to install homebrew. Follow the instructions on the homebrew homepage: https://brew.sh +You will need to install Homebrew. Follow the instructions on the [Homebrew homepage](https://brew.sh). -After homebrew is installed continue with "Download QMK", following step "Setup QMK" runs a script that will install other packages. +After Homebrew is installed, continue with _Set Up QMK_. In that step you will run a script that will install other packages. ### Linux -You will need to install git. It's extremely likely you already have it, but if not one of the following commands should install it: +You will need to install Git. It's very likely that you already have it, but if not, one of the following commands should install it: -* Debian/Ubuntu/Devuan: `apt-get install git` -* Fedora/Redhat/Centos: `yum install git` +* Debian / Ubuntu / Devuan: `apt-get install git` +* Fedora / Red Hat / CentOS: `yum install git` * Arch: `pacman -S git` -## Download QMK +?> Docker is also an option on all platforms. [Click here for details.](getting_started_build_tools.md#docker) -Once you have setup your Linux/Unix environment you are ready to download QMK. We will do this by using git to "clone" the QMK repository. Open a Terminal or MSYS2 Console window and leave it open for the remainder of this guide. Inside that window run these two commands: +## Set Up QMK + +Once you have set up your Linux/Unix environment, you are ready to download QMK. We will do this by using Git to "clone" the QMK repository. Open a Terminal or MSYS2 MinGW window and leave it open for the remainder of this guide. Inside that window run these two commands: git clone https://github.com/qmk/qmk_firmware.git cd qmk_firmware -?> If you already know [how to use GitHub](getting_started_github.md) we recommend you create and clone your own fork instead. If you don't know what that means you can safely ignore this message. - -## Setup QMK +?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create and clone your own fork instead. If you don't know what that means, you can safely ignore this message. -QMK comes with a script to help you setup the rest of what you'll need. You should run it now by typing in this command: +QMK comes with a script to help you set up the rest of what you'll need. You should run it now by typing in this command: - ./util/qmk_install.sh + util/qmk_install.sh ## Test Your Build Environment -Now that your QMK build environment is setup you can build a firmware for your keyboard. Start by trying to build the default layout for your keyboard. You should be able to do that with a command in this format: +Now that your QMK build environment is set up, you can build a firmware for your keyboard. Start by trying to build the keyboard's default keymap. You should be able to do that with a command in this format: make :default -For example, to build a firmware for a Clueboard 66% use: +For example, to build a firmware for a Clueboard 66% you would use: make clueboard/66/rev3:default When it is done you should have a lot of output that ends similar to this: ``` -Linking: .build/clueboard_66_rev2_default.elf [OK] -Creating load file for flashing: .build/clueboard_66_rev2_default.hex [OK] -Copying clueboard_66_rev2_default.hex to qmk_firmware folder [OK] -Checking file size of clueboard_66_rev2_default.hex [OK] - * File size is fine - 25174/28672 +Linking: .build/clueboard_66_rev3_default.elf [OK] +Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK] +Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK] +Checking file size of clueboard_66_rev3_default.hex [OK] + * The firmware size is fine - 26356/28672 (2316 bytes free) ``` -## Creating Your Layout +# Creating Your Keymap -Now you are ready to create your own personal layout. Move on to [Building Your First Firmware](newbs_building_firmware.md) for that. +You are now ready to create your own personal keymap! Move on to [Building Your First Firmware](newbs_building_firmware.md) for that. From f01a80968b327720048c3e95a8e5d57891ccfd5b Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 6 Nov 2018 12:35:08 -0800 Subject: [PATCH 0051/1763] Port over Noxary 268.2 from Rosakiin's Noxary Firmware (#4354) * port over 268.2 from Noxary Firmware * rename files * update readme * put rozakiin's ame in more places * add configurator support * Update keyboards/noxary/268_2/n268_2.c Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com> * Update keyboards/noxary/268_2/keymaps/default/keymap.c Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com> * rename 268_2 keyboard files --- keyboards/noxary/268_2/268_2.c | 54 +++++ keyboards/noxary/268_2/268_2.h | 43 ++++ keyboards/noxary/268_2/config.h | 221 ++++++++++++++++++ keyboards/noxary/268_2/info.json | 12 + .../noxary/268_2/keymaps/default/config.h | 19 ++ .../noxary/268_2/keymaps/default/keymap.c | 83 +++++++ .../noxary/268_2/keymaps/default/readme.md | 1 + keyboards/noxary/268_2/readme.md | 16 ++ keyboards/noxary/268_2/rules.mk | 80 +++++++ keyboards/noxary/README.md | 6 +- 10 files changed, 533 insertions(+), 2 deletions(-) create mode 100644 keyboards/noxary/268_2/268_2.c create mode 100644 keyboards/noxary/268_2/268_2.h create mode 100644 keyboards/noxary/268_2/config.h create mode 100644 keyboards/noxary/268_2/info.json create mode 100644 keyboards/noxary/268_2/keymaps/default/config.h create mode 100644 keyboards/noxary/268_2/keymaps/default/keymap.c create mode 100644 keyboards/noxary/268_2/keymaps/default/readme.md create mode 100644 keyboards/noxary/268_2/readme.md create mode 100644 keyboards/noxary/268_2/rules.mk diff --git a/keyboards/noxary/268_2/268_2.c b/keyboards/noxary/268_2/268_2.c new file mode 100644 index 0000000000..da4e5efb76 --- /dev/null +++ b/keyboards/noxary/268_2/268_2.c @@ -0,0 +1,54 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ +#include "268_2.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 + + led_set_user(usb_led); +} + +__attribute__((weak)) +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 0); PORTB |= (1 << 0); + } + else { + DDRB &= ~(1 << 0); PORTB &= ~(1 << 0); + } +} diff --git a/keyboards/noxary/268_2/268_2.h b/keyboards/noxary/268_2/268_2.h new file mode 100644 index 0000000000..2f5d985a33 --- /dev/null +++ b/keyboards/noxary/268_2/268_2.h @@ -0,0 +1,43 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ +#ifndef N268_2_H +#define N268_2_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \ + K400, K401, K402, K406, K409, K410, K412, K414, K415 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115, }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215, }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315, }, \ + { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, KC_NO, K412, KC_NO, K414, K415, } \ +} + +#endif diff --git a/keyboards/noxary/268_2/config.h b/keyboards/noxary/268_2/config.h new file mode 100644 index 0000000000..f5308d8ecd --- /dev/null +++ b/keyboards/noxary/268_2/config.h @@ -0,0 +1,221 @@ +/* +Copyright 2018 Rozakiin + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x4E58 +#define PRODUCT_ID 0x0044 +#define DEVICE_VER 0x0002 +#define MANUFACTURER Noxary +#define PRODUCT 268.2 +#define DESCRIPTION QMK keyboard firmware for 268.2 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +/* key matrix pins */ +#define MATRIX_ROW_PINS { F7, F6, F5, F0, B5 } +#define MATRIX_COL_PINS { C6, B6, C7, F4, E6, D0, D7, D1, D2, B4, D6, D4, D5, F1, D3, B1 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ +#define BACKLIGHT_PIN B7 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + +/* Bootmagic Lite key configuration */ +// #define BOOTMAGIC_LITE_ROW 0 +// #define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/noxary/268_2/info.json b/keyboards/noxary/268_2/info.json new file mode 100644 index 0000000000..8d227afd86 --- /dev/null +++ b/keyboards/noxary/268_2/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "Noxary 268.2", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} diff --git a/keyboards/noxary/268_2/keymaps/default/config.h b/keyboards/noxary/268_2/keymaps/default/config.h new file mode 100644 index 0000000000..9c4c2b6308 --- /dev/null +++ b/keyboards/noxary/268_2/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 Rozakiin + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/noxary/268_2/keymaps/default/keymap.c b/keyboards/noxary/268_2/keymaps/default/keymap.c new file mode 100644 index 0000000000..994fe36b0c --- /dev/null +++ b/keyboards/noxary/268_2/keymaps/default/keymap.c @@ -0,0 +1,83 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL1 1 +#define _FL2 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* _BL: Base Layer(Default) - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BSpc| Grv| + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Del| + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| Ent|PgUp| + * |----------------------------------------------------------------| + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt|Mo(1)|Ctrl|Lef|Dow|Rght| + * `----------------------------------------------------------------' + */ + [_BL] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL1), KC_LEFT, KC_DOWN, KC_RGHT), + /* _FL1: Function Layer 1 - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * | `|F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |PScr| | + * |----------------------------------------------------------------| + * | | | | |RST| | | | | | | | | | Ins| + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | |Home| + * |----------------------------------------------------------------| + * | | | | | | | | | |Bl-|Bl+| |Mute|Vol+| End| + * |----------------------------------------------------------------| + * | | | | BL_Toggle | | | | |Vol-| | + * `----------------------------------------------------------------' + */ + [_FL1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, _______, + _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, + _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, KC_VOLU, KC_END, + _______, _______, _______, BL_TOGG, _______, _______, _______, KC_VOLD, _______), + /* _FL2: Function Layer 2 - For ISO enter use ANSI enter + * ,----------------------------------------------------------------. + * | | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | + * `----------------------------------------------------------------' + */ + [_FL2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______), + +}; + + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + + diff --git a/keyboards/noxary/268_2/keymaps/default/readme.md b/keyboards/noxary/268_2/keymaps/default/readme.md new file mode 100644 index 0000000000..c4c832cc64 --- /dev/null +++ b/keyboards/noxary/268_2/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for 268_2 diff --git a/keyboards/noxary/268_2/readme.md b/keyboards/noxary/268_2/readme.md new file mode 100644 index 0000000000..85d1a47179 --- /dev/null +++ b/keyboards/noxary/268_2/readme.md @@ -0,0 +1,16 @@ +# Noxary 268.2 + +![268.2](https://www.keebtalk.com/uploads/db8059/original/2X/6/65b93c83cadd98bbf8e3b1d739621d54b682609a.jpg) + +A fully customizable 65% keyboard. + +* Keyboard Maintainer: [Rozakiin](https://github.com/rozakiin) +* Hardware Supported: 268.2 PCB + * rev1 +* Hardware Availability: [Noxary](https://shop.noxary.co/collections/268-2/products/noxary-268-2-polycarbonate) + +Make example for this keyboard (after setting up your build environment): + + make noxary/268_2:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/noxary/268_2/rules.mk b/keyboards/noxary/268_2/rules.mk new file mode 100644 index 0000000000..9b6d7e672d --- /dev/null +++ b/keyboards/noxary/268_2/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) diff --git a/keyboards/noxary/README.md b/keyboards/noxary/README.md index bd4b4b591f..8dbd85f7ef 100644 --- a/keyboards/noxary/README.md +++ b/keyboards/noxary/README.md @@ -4,6 +4,8 @@ All files related to firmware of Noxary Keyboards designed by [Rozakiin](https:/ ### Keyboards -- [268](./268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin +- [268](./268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin -- [x268](./x268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin +- [268.2](./268_2/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin + +- [x268](./x268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin From fc477a1ee7a68cab4ae8fb7d7f0c8d6a4e6c8509 Mon Sep 17 00:00:00 2001 From: Danny Date: Tue, 6 Nov 2018 16:13:58 -0500 Subject: [PATCH 0052/1763] Add Tragicforce 68 layout for split backspace and add configurator layouts (#4378) --- keyboards/tragicforce68/info.json | 236 +++++++++++++++++++++++- keyboards/tragicforce68/tragicforce68.h | 18 ++ 2 files changed, 251 insertions(+), 3 deletions(-) diff --git a/keyboards/tragicforce68/info.json b/keyboards/tragicforce68/info.json index f3e3d6adad..550040a3a1 100644 --- a/keyboards/tragicforce68/info.json +++ b/keyboards/tragicforce68/info.json @@ -5,8 +5,238 @@ "width": 17.25, "height": 5, "layouts": { - "LAYOUT": { - "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] - } + "LAYOUT": { + "layout": [ + {"label":"~", "x":0, "y":0}, + {"label":"!", "x":1, "y":0}, + {"label":"@", "x":2, "y":0}, + {"label":"#", "x":3, "y":0}, + {"label":"$", "x":4, "y":0}, + {"label":"%", "x":5, "y":0}, + {"label":"^", "x":6, "y":0}, + {"label":"&", "x":7, "y":0}, + {"label":"*", "x":8, "y":0}, + {"label":"(", "x":9, "y":0}, + {"label":")", "x":10, "y":0}, + {"label":"_", "x":11, "y":0}, + {"label":"+", "x":12, "y":0}, + {"label":"Backspace", "x":13, "y":0, "w":2}, + {"x":15.25, "y":0}, + {"x":16.25, "y":0}, + + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":6.5, "y":1}, + {"label":"U", "x":7.5, "y":1}, + {"label":"I", "x":8.5, "y":1}, + {"label":"O", "x":9.5, "y":1}, + {"label":"P", "x":10.5, "y":1}, + {"label":" {", "x":11.5, "y":1}, + {"label":"}", "x":12.5, "y":1}, + {"label":"|", "x":13.5, "y":1, "w":1.5}, + {"x":15.25, "y":1}, + {"x":16.25, "y":1}, + + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":6.75, "y":2}, + {"label":"J", "x":7.75, "y":2}, + {"label":"K", "x":8.75, "y":2}, + {"label":"L", "x":9.75, "y":2}, + {"label":":", "x":10.75, "y":2}, + {"label":"\"", "x":11.75, "y":2}, + {"label":"Enter", "x":12.75, "y":2, "w":2.25}, + + {"label":"Shift", "x":0, "y":3, "w":2.25}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + {"label":"N", "x":7.25, "y":3}, + {"label":"M", "x":8.25, "y":3}, + {"label":"<", "x":9.25, "y":3}, + {"label":">", "x":10.25, "y":3}, + {"label":"?", "x":11.25, "y":3}, + {"label":"Shift", "x":12.25, "y":3, "w":2.75}, + {"x":15.25, "y":3}, + + {"label":"Ctrl", "x":0, "y":4, "w":1.25}, + {"label":"Win", "x":1.25, "y":4, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4, "w":1.25}, + {"x":3.75, "y":4, "w":6.25}, + {"label":"Alt", "x":10, "y":4, "w":1.25}, + {"label":"Win", "x":11.25, "y":4, "w":1.25}, + {"label":"Menu", "x":12.5, "y":4, "w":1.25}, + {"x":14.25, "y":4}, + {"x":15.25, "y":4}, + {"x":16.25, "y":4} + ] + }, + "LAYOUT_split_space": { + "layout": [ + {"label":"~", "x":0, "y":0}, + {"label":"!", "x":1, "y":0}, + {"label":"@", "x":2, "y":0}, + {"label":"#", "x":3, "y":0}, + {"label":"$", "x":4, "y":0}, + {"label":"%", "x":5, "y":0}, + {"label":"^", "x":6, "y":0}, + {"label":"&", "x":7, "y":0}, + {"label":"*", "x":8, "y":0}, + {"label":"(", "x":9, "y":0}, + {"label":")", "x":10, "y":0}, + {"label":"_", "x":11, "y":0}, + {"label":"+", "x":12, "y":0}, + {"label":"Backspace", "x":13, "y":0, "w":2}, + {"x":15.25, "y":0}, + {"x":16.25, "y":0}, + + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":6.5, "y":1}, + {"label":"U", "x":7.5, "y":1}, + {"label":"I", "x":8.5, "y":1}, + {"label":"O", "x":9.5, "y":1}, + {"label":"P", "x":10.5, "y":1}, + {"label":" {", "x":11.5, "y":1}, + {"label":"}", "x":12.5, "y":1}, + {"label":"|", "x":13.5, "y":1, "w":1.5}, + {"x":15.25, "y":1}, + {"x":16.25, "y":1}, + + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":6.75, "y":2}, + {"label":"J", "x":7.75, "y":2}, + {"label":"K", "x":8.75, "y":2}, + {"label":"L", "x":9.75, "y":2}, + {"label":":", "x":10.75, "y":2}, + {"label":"\"", "x":11.75, "y":2}, + {"label":"Enter", "x":12.75, "y":2, "w":2.25}, + + {"label":"Shift", "x":0, "y":3, "w":2.25}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + {"label":"N", "x":7.25, "y":3}, + {"label":"M", "x":8.25, "y":3}, + {"label":"<", "x":9.25, "y":3}, + {"label":">", "x":10.25, "y":3}, + {"label":"?", "x":11.25, "y":3}, + {"label":"Shift", "x":12.25, "y":3, "w":2.75}, + {"x":15.25, "y":3}, + + {"label":"Ctrl", "x":0, "y":4, "w":1.25}, + {"label":"Win", "x":1.25, "y":4, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4, "w":1.25}, + {"x":3.75, "y":4, "w":2.25}, + {"x":6, "y":4, "w":1.75}, + {"x":7.75, "y":4, "w":2.25}, + {"label":"Alt", "x":10, "y":4, "w":1.25}, + {"label":"Win", "x":11.25, "y":4, "w":1.25}, + {"label":"Menu", "x":12.5, "y":4, "w":1.25}, + {"x":14.25, "y":4}, + {"x":15.25, "y":4}, + {"x":16.25, "y":4} + ] + }, + "LAYOUT_split_space_and_backspace": { + "layout": [ + {"label":"~", "x":0, "y":0}, + {"label":"!", "x":1, "y":0}, + {"label":"@", "x":2, "y":0}, + {"label":"#", "x":3, "y":0}, + {"label":"$", "x":4, "y":0}, + {"label":"%", "x":5, "y":0}, + {"label":"^", "x":6, "y":0}, + {"label":"&", "x":7, "y":0}, + {"label":"*", "x":8, "y":0}, + {"label":"(", "x":9, "y":0}, + {"label":")", "x":10, "y":0}, + {"label":"_", "x":11, "y":0}, + {"label":"+", "x":12, "y":0}, + {"label":"Del", "x":13, "y":0}, + {"label":"Backspace", "x":14, "y":0}, + {"x":15.25, "y":0}, + {"x":16.25, "y":0}, + + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":6.5, "y":1}, + {"label":"U", "x":7.5, "y":1}, + {"label":"I", "x":8.5, "y":1}, + {"label":"O", "x":9.5, "y":1}, + {"label":"P", "x":10.5, "y":1}, + {"label":" {", "x":11.5, "y":1}, + {"label":"}", "x":12.5, "y":1}, + {"label":"|", "x":13.5, "y":1, "w":1.5}, + {"x":15.25, "y":1}, + {"x":16.25, "y":1}, + + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":6.75, "y":2}, + {"label":"J", "x":7.75, "y":2}, + {"label":"K", "x":8.75, "y":2}, + {"label":"L", "x":9.75, "y":2}, + {"label":":", "x":10.75, "y":2}, + {"label":"\"", "x":11.75, "y":2}, + {"label":"Enter", "x":12.75, "y":2, "w":2.25}, + + {"label":"Shift", "x":0, "y":3, "w":2.25}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + {"label":"N", "x":7.25, "y":3}, + {"label":"M", "x":8.25, "y":3}, + {"label":"<", "x":9.25, "y":3}, + {"label":">", "x":10.25, "y":3}, + {"label":"?", "x":11.25, "y":3}, + {"label":"Shift", "x":12.25, "y":3, "w":2.75}, + {"x":15.25, "y":3}, + + {"label":"Ctrl", "x":0, "y":4, "w":1.25}, + {"label":"Win", "x":1.25, "y":4, "w":1.25}, + {"label":"Alt", "x":2.5, "y":4, "w":1.25}, + {"x":3.75, "y":4, "w":2.25}, + {"x":6, "y":4, "w":1.75}, + {"x":7.75, "y":4, "w":2.25}, + {"label":"Alt", "x":10, "y":4, "w":1.25}, + {"label":"Win", "x":11.25, "y":4, "w":1.25}, + {"label":"Menu", "x":12.5, "y":4, "w":1.25}, + {"x":14.25, "y":4}, + {"x":15.25, "y":4}, + {"x":16.25, "y":4} + ] + } } } diff --git a/keyboards/tragicforce68/tragicforce68.h b/keyboards/tragicforce68/tragicforce68.h index e1b2a038d0..a63ce50a5e 100644 --- a/keyboards/tragicforce68/tragicforce68.h +++ b/keyboards/tragicforce68/tragicforce68.h @@ -38,6 +38,24 @@ { J1, J2, J3, J4, J5, J6, J7, J8 } \ } +#define LAYOUT_split_space_and_backspace( \ + A1, A2, A3, A4, A5, A6, A7, A8, E1, E2, E3, E4, E5, E6, H7, E7, E8, \ + B1, B2, B3, B4, B5, B6, B7, B8, F1, F2, F3, F4, F5, F6, F7, F8, \ + C1, C2, C3, C4, C5, C6, C7, C8, G1, G2, G3, G4, G5, \ + D1, D2, D3, D4, D5, D6, D7, D8, H1, H2, H3, H4, H5, \ + J1, J2, J3, J4, J5, J6, J7, J8, H6, G6, G7, G8 \ +) { \ + { A1, A2, A3, A4, A5, A6, A7, A8 }, \ + { B1, B2, B3, B4, B5, B6, B7, B8 }, \ + { C1, C2, C3, C4, C5, C6, C7, C8 }, \ + { D1, D2, D3, D4, D5, D6, D7, D8 }, \ + { E1, E2, E3, E4, E5, E6, E7, E8 }, \ + { F1, F2, F3, F4, F5, F6, F7, F8 }, \ + { G1, G2, G3, G4, G5, G6, G7, G8 }, \ + { H1, H2, H3, H4, H5, H6, H7, KC_NO }, \ + { J1, J2, J3, J4, J5, J6, J7, J8 } \ +} + #define LAYOUT_kc( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \ K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \ From a30dd2bb1711f5402007adf89af9b3adb758a7fb Mon Sep 17 00:00:00 2001 From: Danilo Vulicevic Date: Wed, 7 Nov 2018 02:04:02 +0100 Subject: [PATCH 0053/1763] Add xd75/billypython keymap (#4381) * Add xd75/billypython keymap * Expand rules.mk (cherry picked from commit 806fee94ae3a21b6ca7a34624101349b57d41b75) * Expand billypython's rules.mk * Remove unused stuff in whitefox/billypython --- .../whitefox/keymaps/billypython/config.h | 3 - .../whitefox/keymaps/billypython/keymap.c | 52 +------- .../whitefox/keymaps/billypython/rules.mk | 5 + .../whitefox/keymaps/konstantin/rules.mk | 5 + keyboards/xd75/keymaps/billypython/config.h | 17 +++ keyboards/xd75/keymaps/billypython/keymap.c | 119 ++++++++++++++++++ keyboards/xd75/keymaps/billypython/rules.mk | 15 +++ 7 files changed, 163 insertions(+), 53 deletions(-) create mode 100644 keyboards/xd75/keymaps/billypython/config.h create mode 100644 keyboards/xd75/keymaps/billypython/keymap.c create mode 100644 keyboards/xd75/keymaps/billypython/rules.mk diff --git a/keyboards/whitefox/keymaps/billypython/config.h b/keyboards/whitefox/keymaps/billypython/config.h index d1c3002d27..275f8effba 100644 --- a/keyboards/whitefox/keymaps/billypython/config.h +++ b/keyboards/whitefox/keymaps/billypython/config.h @@ -2,9 +2,6 @@ #define FORCE_NKRO -#undef IS_COMMAND -#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) - #define MAGIC_KEY_LAYER0_ALT1 BSLS #define MAGIC_KEY_BOOTLOADER ESC diff --git a/keyboards/whitefox/keymaps/billypython/keymap.c b/keyboards/whitefox/keymaps/billypython/keymap.c index 8096885cf8..dfc7d6a967 100644 --- a/keyboards/whitefox/keymaps/billypython/keymap.c +++ b/keyboards/whitefox/keymaps/billypython/keymap.c @@ -2,18 +2,11 @@ #define TOP LCTL(KC_HOME) #define BOTTOM LCTL(KC_END) -#define DSKTP_L LCTL(LGUI(KC_LEFT)) -#define DSKTP_R LCTL(LGUI(KC_RGHT)) #define FN MO(L_FN) #define FN_CAPS LT(L_FN, KC_CAPS) #define FN_FNLK TT(L_FN) -#define DESKTOP TD(TD_DESKTOP) -#define FN_RCTL TD(TD_FN_RCTL) -#define RAL_LAL TD(TD_RAL_LAL) -#define RAL_RGU TD(TD_RAL_RGU) -#define RCT_RSF TD(TD_RCT_RSF) #define RSF_RCT TD(TD_RSF_RCT) #define COMMA UC(0x002C) @@ -62,37 +55,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } -struct { - bool fn_on; // Layer state when tap dance started - bool started; -} td_fn_rctrl_data; - -void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) { - if (!td_fn_rctrl_data.started) { - td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN); - td_fn_rctrl_data.started = true; - } - // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl - if (state->count == 1 || state->count == 3) { - layer_on(L_FN); - } else if (state->count == 2) { - if (!td_fn_rctrl_data.fn_on) { - layer_off(L_FN); - } - register_code(KC_RCTL); - } -} - -void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) { - if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) { - layer_off(L_FN); - } - if (state->count >= 2) { - unregister_code(KC_RCTL); - } - td_fn_rctrl_data.started = false; -} - #define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \ .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \ @@ -122,20 +84,10 @@ void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) { } enum tap_dance { - TD_DESKTOP, - TD_FN_RCTL, - TD_RAL_LAL, - TD_RAL_RGU, - TD_RCT_RSF, TD_RSF_RCT, }; qk_tap_dance_action_t tap_dance_actions[] = { - [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop - [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset), - [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT), - [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI), - [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT), [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RSFT, KC_RCTL), }; @@ -150,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SftCtl│ ↑ │PgD│ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ - * │LCtl│LGui│LAlt│ Space │AlGu│FnLk│ │ ← │ ↓ │ → │ + * │LCtl│LGui│LAlt│ Space │RAlt│FnLk│ │ ← │ ↓ │ → │ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_BASE] = LAYOUT_truefox( \ @@ -158,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \ FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,RSF_RCT, KC_UP, KC_PGDN, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, RAL_RGU,FN_FNLK, KC_LEFT,KC_DOWN,KC_RGHT \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,FN_FNLK, KC_LEFT,KC_DOWN,KC_RGHT \ ), /* Function layer diff --git a/keyboards/whitefox/keymaps/billypython/rules.mk b/keyboards/whitefox/keymaps/billypython/rules.mk index abf92c2c46..c42f6e7059 100644 --- a/keyboards/whitefox/keymaps/billypython/rules.mk +++ b/keyboards/whitefox/keymaps/billypython/rules.mk @@ -1,10 +1,15 @@ +AUDIO_ENABLE = no BACKLIGHT_ENABLE = no +BLUETOOTH_ENABLE = no BOOTMAGIC_ENABLE = no COMMAND_ENABLE = yes CONSOLE_ENABLE = yes EXTRAKEY_ENABLE = yes +MIDI_ENABLE = no MOUSEKEY_ENABLE = yes NKRO_ENABLE = yes +RGBLIGHT_ENABLE = no +SLEEP_LIGHT_ENABLE = no TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes VISUALIZER_ENABLE = no diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk index abf92c2c46..c42f6e7059 100644 --- a/keyboards/whitefox/keymaps/konstantin/rules.mk +++ b/keyboards/whitefox/keymaps/konstantin/rules.mk @@ -1,10 +1,15 @@ +AUDIO_ENABLE = no BACKLIGHT_ENABLE = no +BLUETOOTH_ENABLE = no BOOTMAGIC_ENABLE = no COMMAND_ENABLE = yes CONSOLE_ENABLE = yes EXTRAKEY_ENABLE = yes +MIDI_ENABLE = no MOUSEKEY_ENABLE = yes NKRO_ENABLE = yes +RGBLIGHT_ENABLE = no +SLEEP_LIGHT_ENABLE = no TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes VISUALIZER_ENABLE = no diff --git a/keyboards/xd75/keymaps/billypython/config.h b/keyboards/xd75/keymaps/billypython/config.h new file mode 100644 index 0000000000..275f8effba --- /dev/null +++ b/keyboards/xd75/keymaps/billypython/config.h @@ -0,0 +1,17 @@ +#pragma once + +#define FORCE_NKRO + +#define MAGIC_KEY_LAYER0_ALT1 BSLS +#define MAGIC_KEY_BOOTLOADER ESC + +#define MOUSEKEY_DELAY 50 +#define MOUSEKEY_INTERVAL 15 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 50 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 + +#define PERMISSIVE_HOLD +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 diff --git a/keyboards/xd75/keymaps/billypython/keymap.c b/keyboards/xd75/keymaps/billypython/keymap.c new file mode 100644 index 0000000000..8a06074ca5 --- /dev/null +++ b/keyboards/xd75/keymaps/billypython/keymap.c @@ -0,0 +1,119 @@ +#include QMK_KEYBOARD_H + +#define TOP LCTL(KC_HOME) +#define BOTTOM LCTL(KC_END) + +#define FN MO(L_FN) +#define FN_CAPS LT(L_FN, KC_CAPS) +#define FN_FNLK TT(L_FN) + +#define COMMA UC(0x002C) +#define L_PAREN UC(0x0028) +#define R_PAREN UC(0x0029) +#define EQUALS UC(0x003D) +#define TIMES UC(0x00D7) +#define DIVIDE UC(0x00F7) +#define MINUS UC(0x2212) + +void eeconfig_init_user(void) { + set_unicode_input_mode(UC_LNX); +} + +enum layers { + L_BASE, + L_FN, + L_NUMPAD, +}; + +enum custom_keycodes { + CLEAR = SAFE_RANGE, + NUMPAD, +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CLEAR: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + } + return false; + + case NUMPAD: + if (record->event.pressed) { + layer_invert(L_NUMPAD); + bool num_lock = host_keyboard_leds() & 1< Date: Wed, 7 Nov 2018 09:25:18 -0700 Subject: [PATCH 0054/1763] Configurable Rainbow Swirl range (#4376) * Configurable Rainbow Swirl range This allows tweaking of the rainbow effect to get different effects on keyboards with varied LED layouts. We found the value 1950 works on the RGBKB.net Sol to get a cool striped effect across the keyboard. * Document RGBLIGHT_RAINBOW_SWIRL_RANGE * Better wording for the documentation --- docs/feature_rgblight.md | 1 + quantum/rgblight.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md index a2820347de..0205ebe91a 100644 --- a/docs/feature_rgblight.md +++ b/docs/feature_rgblight.md @@ -122,6 +122,7 @@ The following options can be used to tweak the various animations: |`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel | |`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`1000` |How long to wait between light changes for the "Christmas" animation, in milliseconds| |`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation | +|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`360` |Range adjustment for the rainbow swirl effect to get different swirls | You can also modify the speeds that the different modes animate at: diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 94e9c0a3b2..9ce3b23092 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -679,6 +679,10 @@ void rgblight_effect_rainbow_mood(uint8_t interval) { #endif #ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL +#ifndef RGBLIGHT_RAINBOW_SWIRL_RANGE + #define RGBLIGHT_RAINBOW_SWIRL_RANGE 360 +#endif + __attribute__ ((weak)) const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20}; @@ -692,7 +696,7 @@ void rgblight_effect_rainbow_swirl(uint8_t interval) { } last_timer = timer_read(); for (i = 0; i < RGBLED_NUM; i++) { - hue = (360 / RGBLED_NUM * i + current_hue) % 360; + hue = (RGBLIGHT_RAINBOW_SWIRL_RANGE / RGBLED_NUM * i + current_hue) % 360; sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]); } rgblight_set(); From 945dd946ab2679882b7cd923013ce5424f8f33b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Wed, 7 Nov 2018 18:29:57 +0100 Subject: [PATCH 0055/1763] Fix misspelled make option, format rules.mk files (#4382) --- .../whitefox/keymaps/billypython/rules.mk | 28 +++++++++---------- .../whitefox/keymaps/konstantin/rules.mk | 28 +++++++++---------- keyboards/xd75/keymaps/billypython/rules.mk | 28 +++++++++---------- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/keyboards/whitefox/keymaps/billypython/rules.mk b/keyboards/whitefox/keymaps/billypython/rules.mk index c42f6e7059..8fbc1f3af4 100644 --- a/keyboards/whitefox/keymaps/billypython/rules.mk +++ b/keyboards/whitefox/keymaps/billypython/rules.mk @@ -1,15 +1,15 @@ -AUDIO_ENABLE = no -BACKLIGHT_ENABLE = no -BLUETOOTH_ENABLE = no -BOOTMAGIC_ENABLE = no -COMMAND_ENABLE = yes -CONSOLE_ENABLE = yes -EXTRAKEY_ENABLE = yes -MIDI_ENABLE = no -MOUSEKEY_ENABLE = yes -NKRO_ENABLE = yes -RGBLIGHT_ENABLE = no -SLEEP_LIGHT_ENABLE = no -TAP_DANCE_ENABLE = yes -UNICODE_ENABLE = yes +AUDIO_ENABLE = no +BACKLIGHT_ENABLE = no +BLUETOOTH_ENABLE = no +BOOTMAGIC_ENABLE = no +COMMAND_ENABLE = yes +CONSOLE_ENABLE = yes +EXTRAKEY_ENABLE = yes +MIDI_ENABLE = no +MOUSEKEY_ENABLE = yes +NKRO_ENABLE = yes +RGBLIGHT_ENABLE = no +SLEEP_LED_ENABLE = no +TAP_DANCE_ENABLE = yes +UNICODE_ENABLE = yes VISUALIZER_ENABLE = no diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk index c42f6e7059..8fbc1f3af4 100644 --- a/keyboards/whitefox/keymaps/konstantin/rules.mk +++ b/keyboards/whitefox/keymaps/konstantin/rules.mk @@ -1,15 +1,15 @@ -AUDIO_ENABLE = no -BACKLIGHT_ENABLE = no -BLUETOOTH_ENABLE = no -BOOTMAGIC_ENABLE = no -COMMAND_ENABLE = yes -CONSOLE_ENABLE = yes -EXTRAKEY_ENABLE = yes -MIDI_ENABLE = no -MOUSEKEY_ENABLE = yes -NKRO_ENABLE = yes -RGBLIGHT_ENABLE = no -SLEEP_LIGHT_ENABLE = no -TAP_DANCE_ENABLE = yes -UNICODE_ENABLE = yes +AUDIO_ENABLE = no +BACKLIGHT_ENABLE = no +BLUETOOTH_ENABLE = no +BOOTMAGIC_ENABLE = no +COMMAND_ENABLE = yes +CONSOLE_ENABLE = yes +EXTRAKEY_ENABLE = yes +MIDI_ENABLE = no +MOUSEKEY_ENABLE = yes +NKRO_ENABLE = yes +RGBLIGHT_ENABLE = no +SLEEP_LED_ENABLE = no +TAP_DANCE_ENABLE = yes +UNICODE_ENABLE = yes VISUALIZER_ENABLE = no diff --git a/keyboards/xd75/keymaps/billypython/rules.mk b/keyboards/xd75/keymaps/billypython/rules.mk index 5a502b1526..c935bbac11 100644 --- a/keyboards/xd75/keymaps/billypython/rules.mk +++ b/keyboards/xd75/keymaps/billypython/rules.mk @@ -1,15 +1,15 @@ -AUDIO_ENABLE = no -BACKLIGHT_ENABLE = no -BLUETOOTH_ENABLE = no -BOOTMAGIC_ENABLE = no -COMMAND_ENABLE = yes -CONSOLE_ENABLE = yes -EXTRAKEY_ENABLE = yes -MIDI_ENABLE = no -MOUSEKEY_ENABLE = yes -NKRO_ENABLE = yes -RGBLIGHT_ENABLE = no -SLEEP_LIGHT_ENABLE = no -TAP_DANCE_ENABLE = no -UNICODE_ENABLE = yes +AUDIO_ENABLE = no +BACKLIGHT_ENABLE = no +BLUETOOTH_ENABLE = no +BOOTMAGIC_ENABLE = no +COMMAND_ENABLE = yes +CONSOLE_ENABLE = yes +EXTRAKEY_ENABLE = yes +MIDI_ENABLE = no +MOUSEKEY_ENABLE = yes +NKRO_ENABLE = yes +RGBLIGHT_ENABLE = no +SLEEP_LED_ENABLE = no +TAP_DANCE_ENABLE = no +UNICODE_ENABLE = yes VISUALIZER_ENABLE = no From ba76fcfb8bbc531213619f2893415c8744b65a47 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 7 Nov 2018 21:39:29 -0800 Subject: [PATCH 0056/1763] Add Layout-b for GH60 satan (#4123) * Add Layout-b for GH60 satan * Update layout, toggle for colemak layout * Rename layout, replace function with KC_GESC * Update Layer order, Readme * Remove unnecessary code * Add backspace in extend layer --- keyboards/satan/keymaps/abhixec/keymap.c | 76 +++++++++++++++++++++++ keyboards/satan/keymaps/abhixec/readme.md | 19 ++++++ keyboards/satan/keymaps/abhixec/rules.mk | 18 ++++++ keyboards/satan/satan.h | 29 +++++++++ 4 files changed, 142 insertions(+) create mode 100644 keyboards/satan/keymaps/abhixec/keymap.c create mode 100644 keyboards/satan/keymaps/abhixec/readme.md create mode 100644 keyboards/satan/keymaps/abhixec/rules.mk diff --git a/keyboards/satan/keymaps/abhixec/keymap.c b/keyboards/satan/keymaps/abhixec/keymap.c new file mode 100644 index 0000000000..59a8c43120 --- /dev/null +++ b/keyboards/satan/keymaps/abhixec/keymap.c @@ -0,0 +1,76 @@ +#include QMK_KEYBOARD_H + + +// Each layer gets a name for readability, which is then used in the keymap matix 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 _FL 2 +#define _CL 1 +#define _EL 3 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift| Del| + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = LAYOUT_60_ansi_split_rshift( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ + LT(_EL, KC_BSPC), 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_DEL, \ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL), + +/* Keymap _CL: (Colemak Layer) + */ +[_CL] = LAYOUT_60_ansi_split_rshift( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, \ + LT(_EL, KC_BSPC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, \ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL), + +[_EL] = LAYOUT_60_ansi_split_rshift( + + 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_LCTL,KC_WH_U,_______,_______,KC_MS_U,KC_PGUP,KC_HOME,KC_UP,KC_END,KC_DEL, KC_GESC, _______,_______, \ + _______,KC_LALT,KC_WH_D, KC_LSFT,_______,KC_MS_D,KC_PGDOWN,KC_LEFT,KC_DOWN,KC_RIGHT, KC_BSPC,_______,_______, \ +_______,KC_UNDO,KC_CUT,KC_COPY,KC_PASTE, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2,KC_MS_LEFT,KC_MS_RIGHT,_______,_______, _______, \ + _______,_______,_______, _______, _______,_______,_______,_______), + + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------. + * | KC_GRV|F1|F2|F3|F4|F5|F6|F7| F8 | F9 |10|F11|F12| | + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |-----------------------------------------------------------| + * | | | | | | | | | |HOME| | | + * |-----------------------------------------------------------| + * | | | | | | |V_DWN|V_UP|MUTE | END || |_CL | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ + +[_FL] = LAYOUT_60_ansi_split_rshift( + + 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_PSCREEN, BL_DEC, BL_INC,BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,_______,_______, \ + _______,_______,_______,_______,_______,_______,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_AUDIO_MUTE,KC_END,_______,_______, TG(_CL), \ + _______,_______,_______, _______, _______,_______,_______,_______) + +}; + diff --git a/keyboards/satan/keymaps/abhixec/readme.md b/keyboards/satan/keymaps/abhixec/readme.md new file mode 100644 index 0000000000..59a95b7fcf --- /dev/null +++ b/keyboards/satan/keymaps/abhixec/readme.md @@ -0,0 +1,19 @@ +# default Satan GH60 layout + +The layout for this keyboard is: +![Layout-2](https://i.imgur.com/Eqp8hov.jpg) + +Currently there are 3 layers: + +1. Base Layer is qwerty +2. 1st layer is colemak +3. 2nd layer is function layer +4. 3rd layer is extend layer + +How to use the layers: +1. Base is default. If you want Colemak then press function key and del next to the right shift (this combination will be used to toggle the layer on and off) +2. Function layer is accessible by holding down the function key. +3. Extend layer is accsessible by holding down the capslock. + Which when tapped acts like backspace when held triggers the Extend layer capability. + + diff --git a/keyboards/satan/keymaps/abhixec/rules.mk b/keyboards/satan/keymaps/abhixec/rules.mk new file mode 100644 index 0000000000..fdbd25ea80 --- /dev/null +++ b/keyboards/satan/keymaps/abhixec/rules.mk @@ -0,0 +1,18 @@ +# 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 = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index 0d9dd96a11..a2a5984601 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -36,6 +36,35 @@ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ } + +/* Satan GH60 ANSI layout-B + * ,-----------------------------------------------------------. + * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | + * |-----------------------------------------------------------| + * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | + * |-----------------------------------------------------------| + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | + * |-----------------------------------------------------------| + * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c | + * |-----------------------------------------------------------| + * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | + * `-----------------------------------------------------------' + */ +#define LAYOUT_60_ansi_split_rshift( \ + 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, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {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, XXX, k2d}, \ + {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ +} + /* Satan GH60 ANSI layout * ,-----------------------------------------------------------. * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | From 5eb69ca224f3d4233860a658e6a27516d86c4de7 Mon Sep 17 00:00:00 2001 From: Ryoichi KATO Date: Wed, 7 Nov 2018 23:04:02 -0800 Subject: [PATCH 0057/1763] Keyboard: fix ifdef for crkbd's default/keymap.c undef SSD1306OLED should not kill entire process_record_user() function. --- keyboards/crkbd/keymaps/default/keymap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/keyboards/crkbd/keymaps/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c index e92fbdebfa..c7c9582e83 100644 --- a/keyboards/crkbd/keymaps/default/keymap.c +++ b/keyboards/crkbd/keymaps/default/keymap.c @@ -179,10 +179,13 @@ void iota_gfx_task_user(void) { matrix_render_user(&matrix); matrix_update(&display, &matrix); } +#endif//SSD1306OLED bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { +#ifdef SSD1306OLED set_keylog(keycode, record); +#endif // set_timelog(); } @@ -244,4 +247,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } -#endif From ef84bd979979f092980dc68d513a906e084c8c57 Mon Sep 17 00:00:00 2001 From: Filip Sund Date: Fri, 9 Nov 2018 00:12:42 +0100 Subject: [PATCH 0058/1763] Keyboard: Add 30wer config and keymap (#4386) * Preliminary 30wer firmware. Not tested on real board yet. * Added a layer to default 30wer keymap. * Wrote readme for 30wer. * Added 30wer info.json. --- keyboards/30wer/30wer.c | 1 + keyboards/30wer/30wer.h | 14 ++++++ keyboards/30wer/config.h | 31 ++++++++++++ keyboards/30wer/info.json | 51 ++++++++++++++++++++ keyboards/30wer/keymaps/default/keymap.c | 17 +++++++ keyboards/30wer/readme.md | 16 +++++++ keyboards/30wer/rules.mk | 60 ++++++++++++++++++++++++ 7 files changed, 190 insertions(+) create mode 100644 keyboards/30wer/30wer.c create mode 100644 keyboards/30wer/30wer.h create mode 100644 keyboards/30wer/config.h create mode 100644 keyboards/30wer/info.json create mode 100644 keyboards/30wer/keymaps/default/keymap.c create mode 100644 keyboards/30wer/readme.md create mode 100644 keyboards/30wer/rules.mk diff --git a/keyboards/30wer/30wer.c b/keyboards/30wer/30wer.c new file mode 100644 index 0000000000..a46c543196 --- /dev/null +++ b/keyboards/30wer/30wer.c @@ -0,0 +1 @@ +#include "30wer.h" diff --git a/keyboards/30wer/30wer.h b/keyboards/30wer/30wer.h new file mode 100644 index 0000000000..e7bce82776 --- /dev/null +++ b/keyboards/30wer/30wer.h @@ -0,0 +1,14 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b } \ +} diff --git a/keyboards/30wer/config.h b/keyboards/30wer/config.h new file mode 100644 index 0000000000..d497585246 --- /dev/null +++ b/keyboards/30wer/config.h @@ -0,0 +1,31 @@ +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x1234 +#define PRODUCT_ID 0x5678 +#define DEVICE_VER 0x0000 +#define MANUFACTURER 8o7wer +#define PRODUCT 30wer +#define DESCRIPTION Gherkin style construction 30% staggered pcb kit + +/* key matrix size */ +#define MATRIX_ROWS 3 +#define MATRIX_COLS 13 + +/* pcb default pin-out */ +#define MATRIX_ROW_PINS { E6, B4, B5 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D1, D0, D4, C6, D7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS diff --git a/keyboards/30wer/info.json b/keyboards/30wer/info.json new file mode 100644 index 0000000000..0fbbeb47dd --- /dev/null +++ b/keyboards/30wer/info.json @@ -0,0 +1,51 @@ +{ + "keyboard_name": "30wer", + "url": "", + "maintainer": "qmk", + "width": 13.25, + "height": 3, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Tab", "x":0, "y":0}, + {"label":"Q", "x":1, "y":0}, + {"label":"W", "x":2, "y":0}, + {"label":"E", "x":3, "y":0}, + {"label":"R", "x":4, "y":0}, + {"label":"T", "x":5, "y":0}, + {"label":"Y", "x":6, "y":0}, + {"label":"U", "x":7, "y":0}, + {"label":"I", "x":8, "y":0}, + {"label":"O", "x":9, "y":0}, + {"label":"P", "x":10, "y":0}, + {"label":"Bksp", "x":11, "y":0}, + {"label":"Delete", "x":12, "y":0, "w":1.25}, + {"label":"Ctrl", "x":0, "y":1, "w":1.25}, + {"label":"A", "x":1.25, "y":1}, + {"label":"S", "x":2.25, "y":1}, + {"label":"D", "x":3.25, "y":1}, + {"label":"F", "x":4.25, "y":1}, + {"label":"G", "x":5.25, "y":1}, + {"label":"H", "x":6.25, "y":1}, + {"label":"J", "x":7.25, "y":1}, + {"label":"K", "x":8.25, "y":1}, + {"label":"L", "x":9.25, "y":1}, + {"label":":", "x":10.25, "y":1}, + {"label":"\"", "x":11.25, "y":1}, + {"label":"Enter", "x":12.25, "y":1}, + {"label":"Shift", "x":0, "y":2, "w":1.75}, + {"label":"Z", "x":1.75, "y":2}, + {"label":"X", "x":2.75, "y":2}, + {"label":"C", "x":3.75, "y":2}, + {"label":"V", "x":4.75, "y":2}, + {"label":"B", "x":5.75, "y":2}, + {"label":"N", "x":6.75, "y":2}, + {"label":"M", "x":7.75, "y":2}, + {"label":"<", "x":8.75, "y":2}, + {"label":">", "x":9.75, "y":2}, + {"label":"?", "x":10.75, "y":2}, + {"label":"Space", "x":11.75, "y":2, "w":1.5} + ] + } + } +} diff --git a/keyboards/30wer/keymaps/default/keymap.c b/keyboards/30wer/keymaps/default/keymap.c new file mode 100644 index 0000000000..9e39a500a3 --- /dev/null +++ b/keyboards/30wer/keymaps/default/keymap.c @@ -0,0 +1,17 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = LAYOUT( \ + 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_BSPC, \ + 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, LT(1, KC_SPC) \ +), + +[1] = LAYOUT( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UP, KC_DEL, \ + _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, \ + KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______ \ +), + +}; diff --git a/keyboards/30wer/readme.md b/keyboards/30wer/readme.md new file mode 100644 index 0000000000..c9184f726b --- /dev/null +++ b/keyboards/30wer/readme.md @@ -0,0 +1,16 @@ +30wer by 8o7wer +=== + +![30wer](https://i.imgur.com/ZYbRvY7.png) + +Keyboard Maintainer: [Filip Sund](https://github.com/FSund) +Hardware Supported: Pro Micro +Hardware Availability: Group buy + +More info in the [group by thread at Keebtalk](https://www.keebtalk.com/t/gb-30wer-by-8o7wer/3618/). + +Make example for this keyboard (after setting up your build environment): + + make 30wer:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/30wer/rules.mk b/keyboards/30wer/rules.mk new file mode 100644 index 0000000000..9d77ec5461 --- /dev/null +++ b/keyboards/30wer/rules.mk @@ -0,0 +1,60 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# 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 = 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 = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. From 73883425a55f23a319eb1522c2e3ce52b8e2f042 Mon Sep 17 00:00:00 2001 From: zvecr Date: Thu, 8 Nov 2018 23:17:41 +0000 Subject: [PATCH 0059/1763] relocate 40percent.club boards to new parent folder (#4380) * Initial move of 40percent.club boards to common parent folder. * Refactor readme files to be consistent * Refactor readme files to be consistent - fix make command examples. * Refactor readme files to be consistent - align readme filenames. * Refactor readme files to be consistent - fix repo url. * Disable Community keymap builds as they are currently failing due to missing functionality * Move more of 40percent.club boards to common parent folder. * Refactor readme files to be consistent - align readme filenames. * Refactor readme files to be consistent - fix make command examples. --- keyboards/{ => 40percentclub}/4x4/4x4.c | 0 keyboards/{ => 40percentclub}/4x4/4x4.h | 0 keyboards/{ => 40percentclub}/4x4/config.h | 0 .../4x4/keymaps/default/config.h | 0 .../4x4/keymaps/default/keymap.c | 0 keyboards/{ => 40percentclub}/4x4/readme.md | 5 +++-- keyboards/{ => 40percentclub}/4x4/rules.mk | 8 ++++---- keyboards/{ => 40percentclub}/5x5/5x5.c | 0 keyboards/{ => 40percentclub}/5x5/5x5.h | 0 keyboards/{ => 40percentclub}/5x5/config.h | 0 .../5x5/keymaps/default/config.h | 0 .../5x5/keymaps/default/keymap.c | 0 keyboards/{ => 40percentclub}/5x5/readme.md | 5 +++-- keyboards/{ => 40percentclub}/5x5/rules.mk | 6 +++--- keyboards/{ => 40percentclub}/6lit/6lit.c | 0 keyboards/{ => 40percentclub}/6lit/6lit.h | 0 keyboards/{ => 40percentclub}/6lit/config.h | 0 keyboards/{ => 40percentclub}/6lit/info.json | 0 .../6lit/keymaps/default/config.h | 0 .../6lit/keymaps/default/keymap.c | 0 .../6lit/keymaps/default/readme.md | 0 .../6lit/keymaps/macro/config.h | 0 .../6lit/keymaps/macro/keymap.c | 0 .../6lit/keymaps/macro/readme.md | 0 keyboards/{ => 40percentclub}/6lit/readme.md | 3 ++- keyboards/{ => 40percentclub}/6lit/rules.mk | 0 keyboards/{ => 40percentclub}/foobar/config.h | 0 keyboards/{ => 40percentclub}/foobar/foobar.c | 0 keyboards/{ => 40percentclub}/foobar/foobar.h | 0 keyboards/{ => 40percentclub}/foobar/info.json | 0 .../foobar/keymaps/default/config.h | 0 .../foobar/keymaps/default/keymap.c | 0 .../foobar/keymaps/default/readme.md | 0 .../foobar/keymaps/macro/config.h | 0 .../foobar/keymaps/macro/keymap.c | 0 .../foobar/keymaps/macro/readme.md | 0 keyboards/{ => 40percentclub}/foobar/readme.md | 3 ++- keyboards/{ => 40percentclub}/foobar/rules.mk | 0 keyboards/{ => 40percentclub}/gherkin/config.h | 0 .../{ => 40percentclub}/gherkin/gherkin.c | 0 .../{ => 40percentclub}/gherkin/gherkin.h | 0 .../{ => 40percentclub}/gherkin/info.json | 0 .../gherkin/keymaps/bbaserdem/README.md | 0 .../gherkin/keymaps/bbaserdem/config.h | 0 .../gherkin/keymaps/bbaserdem/keymap.c | 0 .../gherkin/keymaps/bbaserdem/rules.mk | 0 .../gherkin/keymaps/default/keymap.c | 0 .../gherkin/keymaps/itsaferbie/config.h | 0 .../gherkin/keymaps/itsaferbie/keymap.c | 0 .../gherkin/keymaps/itsaferbie/rules.mk | 0 .../gherkin/keymaps/mjt/config.h | 0 .../gherkin/keymaps/mjt/keymap.c | 0 .../gherkin/keymaps/mjt/rules.mk | 0 .../gherkin/keymaps/steno/config.h | 0 .../gherkin/keymaps/steno/keymap.c | 0 .../gherkin/keymaps/steno/readme.md | 0 .../gherkin/keymaps/steno/rules.mk | 0 .../gherkin/keymaps/talljoe-gherkin/config.h | 0 .../gherkin/keymaps/talljoe-gherkin/keymap.c | 0 .../gherkin/keymaps/talljoe-gherkin/rules.mk | 0 .../gherkin/readme.md} | 9 ++++++--- keyboards/{ => 40percentclub}/gherkin/rules.mk | 0 keyboards/{ => 40percentclub}/luddite/config.h | 0 .../luddite/keymaps/default/keymap.c | 0 .../{ => 40percentclub}/luddite/luddite.c | 0 .../{ => 40percentclub}/luddite/luddite.h | 0 .../luddite/readme.md} | 5 ++++- keyboards/{ => 40percentclub}/luddite/rules.mk | 0 keyboards/{ => 40percentclub}/mf68/config.h | 0 keyboards/{ => 40percentclub}/mf68/info.json | 0 .../mf68/keymaps/default/keymap.c | 0 .../mf68/keymaps/factory/keymap.c | 0 keyboards/{ => 40percentclub}/mf68/mf68.c | 0 keyboards/{ => 40percentclub}/mf68/mf68.h | 0 keyboards/40percentclub/mf68/readme.md | 18 ++++++++++++++++++ keyboards/{ => 40percentclub}/mf68/rules.mk | 0 .../{ => 40percentclub}/mf68_ble/config.h | 0 .../{ => 40percentclub}/mf68_ble/info.json | 0 .../mf68_ble/keymaps/default/keymap.c | 0 .../{ => 40percentclub}/mf68_ble/mf68_ble.c | 0 .../{ => 40percentclub}/mf68_ble/mf68_ble.h | 0 .../mf68_ble/readme.md} | 16 +++++++++------- .../{ => 40percentclub}/mf68_ble/rules.mk | 0 keyboards/{ => 40percentclub}/nano/config.h | 0 keyboards/{ => 40percentclub}/nano/info.json | 0 .../nano/keymaps/default/keymap.c | 0 .../nano/keymaps/default/rules.mk | 0 .../nano/keymaps/spooka/config.h | 0 .../nano/keymaps/spooka/keymap.c | 0 .../nano/keymaps/spooka/rules.mk | 0 keyboards/{ => 40percentclub}/nano/matrix.c | 0 keyboards/{ => 40percentclub}/nano/nano.c | 0 keyboards/{ => 40percentclub}/nano/nano.h | 0 keyboards/40percentclub/nano/readme.md | 16 ++++++++++++++++ keyboards/{ => 40percentclub}/nano/rules.mk | 0 keyboards/40percentclub/readme.md | 4 ++++ keyboards/{ => 40percentclub}/tomato/config.h | 0 keyboards/{ => 40percentclub}/tomato/info.json | 0 .../tomato/keymaps/default/keymap.c | 0 keyboards/{ => 40percentclub}/tomato/readme.md | 8 +++++--- keyboards/{ => 40percentclub}/tomato/rules.mk | 0 keyboards/{ => 40percentclub}/tomato/tomato.c | 0 keyboards/{ => 40percentclub}/tomato/tomato.h | 0 .../{ => 40percentclub}/ut47/LED_controls.ino | 0 keyboards/{ => 40percentclub}/ut47/config.h | 0 keyboards/{ => 40percentclub}/ut47/info.json | 0 .../ut47/keymaps/default/config.h | 0 .../ut47/keymaps/default/keymap.c | 0 .../ut47/keymaps/default/readme.md | 0 .../ut47/keymaps/non-us/config.h | 0 .../ut47/keymaps/non-us/keymap.c | 0 .../ut47/keymaps/non-us/readme.md | 0 .../ut47/keymaps/nordic/config.h | 0 .../ut47/keymaps/nordic/keymap.c | 0 .../ut47/keymaps/nordic/readme.md | 0 .../ut47/keymaps/rgb/config.h | 0 .../ut47/keymaps/rgb/keymap.c | 0 .../ut47/keymaps/rgb/readme.md | 0 .../ut47/keymaps/rgb/rules.mk | 0 keyboards/{ => 40percentclub}/ut47/led.c | 0 keyboards/{ => 40percentclub}/ut47/matrix.c | 0 keyboards/{ => 40percentclub}/ut47/readme.md | 7 ++++--- keyboards/{ => 40percentclub}/ut47/rules.mk | 0 keyboards/{ => 40percentclub}/ut47/ut47.c | 0 keyboards/{ => 40percentclub}/ut47/ut47.h | 0 keyboards/mf68/README.md | 18 ------------------ keyboards/nano/readme.md | 14 -------------- 127 files changed, 83 insertions(+), 62 deletions(-) rename keyboards/{ => 40percentclub}/4x4/4x4.c (100%) rename keyboards/{ => 40percentclub}/4x4/4x4.h (100%) rename keyboards/{ => 40percentclub}/4x4/config.h (100%) rename keyboards/{ => 40percentclub}/4x4/keymaps/default/config.h (100%) rename keyboards/{ => 40percentclub}/4x4/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/4x4/readme.md (77%) rename keyboards/{ => 40percentclub}/4x4/rules.mk (94%) rename keyboards/{ => 40percentclub}/5x5/5x5.c (100%) rename keyboards/{ => 40percentclub}/5x5/5x5.h (100%) rename keyboards/{ => 40percentclub}/5x5/config.h (100%) rename keyboards/{ => 40percentclub}/5x5/keymaps/default/config.h (100%) rename keyboards/{ => 40percentclub}/5x5/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/5x5/readme.md (77%) rename keyboards/{ => 40percentclub}/5x5/rules.mk (95%) rename keyboards/{ => 40percentclub}/6lit/6lit.c (100%) rename keyboards/{ => 40percentclub}/6lit/6lit.h (100%) rename keyboards/{ => 40percentclub}/6lit/config.h (100%) rename keyboards/{ => 40percentclub}/6lit/info.json (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/default/config.h (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/default/readme.md (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/macro/config.h (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/macro/keymap.c (100%) rename keyboards/{ => 40percentclub}/6lit/keymaps/macro/readme.md (100%) rename keyboards/{ => 40percentclub}/6lit/readme.md (95%) rename keyboards/{ => 40percentclub}/6lit/rules.mk (100%) rename keyboards/{ => 40percentclub}/foobar/config.h (100%) rename keyboards/{ => 40percentclub}/foobar/foobar.c (100%) rename keyboards/{ => 40percentclub}/foobar/foobar.h (100%) rename keyboards/{ => 40percentclub}/foobar/info.json (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/default/config.h (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/default/readme.md (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/macro/config.h (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/macro/keymap.c (100%) rename keyboards/{ => 40percentclub}/foobar/keymaps/macro/readme.md (100%) rename keyboards/{ => 40percentclub}/foobar/readme.md (95%) rename keyboards/{ => 40percentclub}/foobar/rules.mk (100%) rename keyboards/{ => 40percentclub}/gherkin/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/gherkin.c (100%) rename keyboards/{ => 40percentclub}/gherkin/gherkin.h (100%) rename keyboards/{ => 40percentclub}/gherkin/info.json (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/bbaserdem/README.md (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/bbaserdem/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/bbaserdem/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/bbaserdem/rules.mk (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/itsaferbie/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/itsaferbie/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/itsaferbie/rules.mk (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/mjt/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/mjt/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/mjt/rules.mk (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/steno/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/steno/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/steno/readme.md (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/steno/rules.mk (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/talljoe-gherkin/config.h (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/talljoe-gherkin/keymap.c (100%) rename keyboards/{ => 40percentclub}/gherkin/keymaps/talljoe-gherkin/rules.mk (100%) rename keyboards/{gherkin/README.md => 40percentclub/gherkin/readme.md} (52%) rename keyboards/{ => 40percentclub}/gherkin/rules.mk (100%) rename keyboards/{ => 40percentclub}/luddite/config.h (100%) rename keyboards/{ => 40percentclub}/luddite/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/luddite/luddite.c (100%) rename keyboards/{ => 40percentclub}/luddite/luddite.h (100%) rename keyboards/{luddite/README.md => 40percentclub/luddite/readme.md} (82%) rename keyboards/{ => 40percentclub}/luddite/rules.mk (100%) rename keyboards/{ => 40percentclub}/mf68/config.h (100%) rename keyboards/{ => 40percentclub}/mf68/info.json (100%) rename keyboards/{ => 40percentclub}/mf68/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/mf68/keymaps/factory/keymap.c (100%) rename keyboards/{ => 40percentclub}/mf68/mf68.c (100%) rename keyboards/{ => 40percentclub}/mf68/mf68.h (100%) create mode 100644 keyboards/40percentclub/mf68/readme.md rename keyboards/{ => 40percentclub}/mf68/rules.mk (100%) rename keyboards/{ => 40percentclub}/mf68_ble/config.h (100%) rename keyboards/{ => 40percentclub}/mf68_ble/info.json (100%) rename keyboards/{ => 40percentclub}/mf68_ble/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/mf68_ble/mf68_ble.c (100%) rename keyboards/{ => 40percentclub}/mf68_ble/mf68_ble.h (100%) rename keyboards/{mf68_ble/README.md => 40percentclub/mf68_ble/readme.md} (58%) rename keyboards/{ => 40percentclub}/mf68_ble/rules.mk (100%) rename keyboards/{ => 40percentclub}/nano/config.h (100%) rename keyboards/{ => 40percentclub}/nano/info.json (100%) rename keyboards/{ => 40percentclub}/nano/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/nano/keymaps/default/rules.mk (100%) rename keyboards/{ => 40percentclub}/nano/keymaps/spooka/config.h (100%) rename keyboards/{ => 40percentclub}/nano/keymaps/spooka/keymap.c (100%) rename keyboards/{ => 40percentclub}/nano/keymaps/spooka/rules.mk (100%) rename keyboards/{ => 40percentclub}/nano/matrix.c (100%) rename keyboards/{ => 40percentclub}/nano/nano.c (100%) rename keyboards/{ => 40percentclub}/nano/nano.h (100%) create mode 100644 keyboards/40percentclub/nano/readme.md rename keyboards/{ => 40percentclub}/nano/rules.mk (100%) create mode 100644 keyboards/40percentclub/readme.md rename keyboards/{ => 40percentclub}/tomato/config.h (100%) rename keyboards/{ => 40percentclub}/tomato/info.json (100%) rename keyboards/{ => 40percentclub}/tomato/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/tomato/readme.md (56%) rename keyboards/{ => 40percentclub}/tomato/rules.mk (100%) rename keyboards/{ => 40percentclub}/tomato/tomato.c (100%) rename keyboards/{ => 40percentclub}/tomato/tomato.h (100%) rename keyboards/{ => 40percentclub}/ut47/LED_controls.ino (100%) rename keyboards/{ => 40percentclub}/ut47/config.h (100%) rename keyboards/{ => 40percentclub}/ut47/info.json (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/default/config.h (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/default/keymap.c (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/default/readme.md (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/non-us/config.h (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/non-us/keymap.c (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/non-us/readme.md (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/nordic/config.h (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/nordic/keymap.c (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/nordic/readme.md (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/rgb/config.h (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/rgb/keymap.c (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/rgb/readme.md (100%) rename keyboards/{ => 40percentclub}/ut47/keymaps/rgb/rules.mk (100%) rename keyboards/{ => 40percentclub}/ut47/led.c (100%) rename keyboards/{ => 40percentclub}/ut47/matrix.c (100%) rename keyboards/{ => 40percentclub}/ut47/readme.md (92%) rename keyboards/{ => 40percentclub}/ut47/rules.mk (100%) rename keyboards/{ => 40percentclub}/ut47/ut47.c (100%) rename keyboards/{ => 40percentclub}/ut47/ut47.h (100%) delete mode 100644 keyboards/mf68/README.md delete mode 100644 keyboards/nano/readme.md diff --git a/keyboards/4x4/4x4.c b/keyboards/40percentclub/4x4/4x4.c similarity index 100% rename from keyboards/4x4/4x4.c rename to keyboards/40percentclub/4x4/4x4.c diff --git a/keyboards/4x4/4x4.h b/keyboards/40percentclub/4x4/4x4.h similarity index 100% rename from keyboards/4x4/4x4.h rename to keyboards/40percentclub/4x4/4x4.h diff --git a/keyboards/4x4/config.h b/keyboards/40percentclub/4x4/config.h similarity index 100% rename from keyboards/4x4/config.h rename to keyboards/40percentclub/4x4/config.h diff --git a/keyboards/4x4/keymaps/default/config.h b/keyboards/40percentclub/4x4/keymaps/default/config.h similarity index 100% rename from keyboards/4x4/keymaps/default/config.h rename to keyboards/40percentclub/4x4/keymaps/default/config.h diff --git a/keyboards/4x4/keymaps/default/keymap.c b/keyboards/40percentclub/4x4/keymaps/default/keymap.c similarity index 100% rename from keyboards/4x4/keymaps/default/keymap.c rename to keyboards/40percentclub/4x4/keymaps/default/keymap.c diff --git a/keyboards/4x4/readme.md b/keyboards/40percentclub/4x4/readme.md similarity index 77% rename from keyboards/4x4/readme.md rename to keyboards/40percentclub/4x4/readme.md index 3ca074fddd..077a2049be 100644 --- a/keyboards/4x4/readme.md +++ b/keyboards/40percentclub/4x4/readme.md @@ -17,7 +17,8 @@ Hardware Availability: [4x4x4x4x4 project on 40% Keyboards](http://www.40percent Make example for this keyboard (after setting up your build environment): - make 4x4:default + make 40percentclub/4x4:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -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. First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development. diff --git a/keyboards/4x4/rules.mk b/keyboards/40percentclub/4x4/rules.mk similarity index 94% rename from keyboards/4x4/rules.mk rename to keyboards/40percentclub/4x4/rules.mk index b8b4bccc42..d572e72444 100644 --- a/keyboards/4x4/rules.mk +++ b/keyboards/40percentclub/4x4/rules.mk @@ -1,5 +1,4 @@ # MCU name -#MCU = at90usb1286 MCU = atmega32u4 # Processor frequency. @@ -43,11 +42,11 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded +# different sizes, comment this out, and the correct address will be loaded # automatically (+60). See bootloader.mk for all options. BOOTLOADER = caterina @@ -71,4 +70,5 @@ AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) -LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16 +#FIXME: Community keymap build are currently failing due to missing functionality +#LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16 diff --git a/keyboards/5x5/5x5.c b/keyboards/40percentclub/5x5/5x5.c similarity index 100% rename from keyboards/5x5/5x5.c rename to keyboards/40percentclub/5x5/5x5.c diff --git a/keyboards/5x5/5x5.h b/keyboards/40percentclub/5x5/5x5.h similarity index 100% rename from keyboards/5x5/5x5.h rename to keyboards/40percentclub/5x5/5x5.h diff --git a/keyboards/5x5/config.h b/keyboards/40percentclub/5x5/config.h similarity index 100% rename from keyboards/5x5/config.h rename to keyboards/40percentclub/5x5/config.h diff --git a/keyboards/5x5/keymaps/default/config.h b/keyboards/40percentclub/5x5/keymaps/default/config.h similarity index 100% rename from keyboards/5x5/keymaps/default/config.h rename to keyboards/40percentclub/5x5/keymaps/default/config.h diff --git a/keyboards/5x5/keymaps/default/keymap.c b/keyboards/40percentclub/5x5/keymaps/default/keymap.c similarity index 100% rename from keyboards/5x5/keymaps/default/keymap.c rename to keyboards/40percentclub/5x5/keymaps/default/keymap.c diff --git a/keyboards/5x5/readme.md b/keyboards/40percentclub/5x5/readme.md similarity index 77% rename from keyboards/5x5/readme.md rename to keyboards/40percentclub/5x5/readme.md index e25535968d..8f0d8e1667 100644 --- a/keyboards/5x5/readme.md +++ b/keyboards/40percentclub/5x5/readme.md @@ -17,7 +17,8 @@ Hardware Availability: [5x5 project on 40% Keyboards](http://www.40percent.club/ Make example for this keyboard (after setting up your build environment): - make 5x5:default + make 40percentclub/5x5:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -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. First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development. diff --git a/keyboards/5x5/rules.mk b/keyboards/40percentclub/5x5/rules.mk similarity index 95% rename from keyboards/5x5/rules.mk rename to keyboards/40percentclub/5x5/rules.mk index 24e0e020fd..abc961a86f 100644 --- a/keyboards/5x5/rules.mk +++ b/keyboards/40percentclub/5x5/rules.mk @@ -1,5 +1,4 @@ # MCU name -#MCU = at90usb1286 MCU = atmega32u4 # Processor frequency. @@ -43,7 +42,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Bootloader # This definition is optional, and if your keyboard supports multiple bootloaders of @@ -71,4 +70,5 @@ AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) -LAYOUTS = ortho_5x5 ortho_5x10 ortho_5x15 +#FIXME: Community keymap build are currently failing due to missing functionality +#LAYOUTS = ortho_5x5 ortho_5x10 ortho_5x15 diff --git a/keyboards/6lit/6lit.c b/keyboards/40percentclub/6lit/6lit.c similarity index 100% rename from keyboards/6lit/6lit.c rename to keyboards/40percentclub/6lit/6lit.c diff --git a/keyboards/6lit/6lit.h b/keyboards/40percentclub/6lit/6lit.h similarity index 100% rename from keyboards/6lit/6lit.h rename to keyboards/40percentclub/6lit/6lit.h diff --git a/keyboards/6lit/config.h b/keyboards/40percentclub/6lit/config.h similarity index 100% rename from keyboards/6lit/config.h rename to keyboards/40percentclub/6lit/config.h diff --git a/keyboards/6lit/info.json b/keyboards/40percentclub/6lit/info.json similarity index 100% rename from keyboards/6lit/info.json rename to keyboards/40percentclub/6lit/info.json diff --git a/keyboards/6lit/keymaps/default/config.h b/keyboards/40percentclub/6lit/keymaps/default/config.h similarity index 100% rename from keyboards/6lit/keymaps/default/config.h rename to keyboards/40percentclub/6lit/keymaps/default/config.h diff --git a/keyboards/6lit/keymaps/default/keymap.c b/keyboards/40percentclub/6lit/keymaps/default/keymap.c similarity index 100% rename from keyboards/6lit/keymaps/default/keymap.c rename to keyboards/40percentclub/6lit/keymaps/default/keymap.c diff --git a/keyboards/6lit/keymaps/default/readme.md b/keyboards/40percentclub/6lit/keymaps/default/readme.md similarity index 100% rename from keyboards/6lit/keymaps/default/readme.md rename to keyboards/40percentclub/6lit/keymaps/default/readme.md diff --git a/keyboards/6lit/keymaps/macro/config.h b/keyboards/40percentclub/6lit/keymaps/macro/config.h similarity index 100% rename from keyboards/6lit/keymaps/macro/config.h rename to keyboards/40percentclub/6lit/keymaps/macro/config.h diff --git a/keyboards/6lit/keymaps/macro/keymap.c b/keyboards/40percentclub/6lit/keymaps/macro/keymap.c similarity index 100% rename from keyboards/6lit/keymaps/macro/keymap.c rename to keyboards/40percentclub/6lit/keymaps/macro/keymap.c diff --git a/keyboards/6lit/keymaps/macro/readme.md b/keyboards/40percentclub/6lit/keymaps/macro/readme.md similarity index 100% rename from keyboards/6lit/keymaps/macro/readme.md rename to keyboards/40percentclub/6lit/keymaps/macro/readme.md diff --git a/keyboards/6lit/readme.md b/keyboards/40percentclub/6lit/readme.md similarity index 95% rename from keyboards/6lit/readme.md rename to keyboards/40percentclub/6lit/readme.md index d5b2100285..3d28df2d75 100644 --- a/keyboards/6lit/readme.md +++ b/keyboards/40percentclub/6lit/readme.md @@ -1,6 +1,7 @@ # 6lit ![6lit](https://1.bp.blogspot.com/-Pa8RgYZ0hy8/Wbmr4bjuV0I/AAAAAAACDbI/WLKQMDlcDVAVf1lAIRMN51usR1XcCCVNgCLcBGAs/s1600/a.JPG) +=== 6 key macropad that fits within the 100mm x 100mm PCB size. Can be used singly as a regular 6 key macropad as well. @@ -12,6 +13,6 @@ Hardware Availability: [6lit project on 40% Keyboards](http://www.40percent.club Make example for this keyboard (after setting up your build environment): - make 6lit:default + make 40percentclub/6lit:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/6lit/rules.mk b/keyboards/40percentclub/6lit/rules.mk similarity index 100% rename from keyboards/6lit/rules.mk rename to keyboards/40percentclub/6lit/rules.mk diff --git a/keyboards/foobar/config.h b/keyboards/40percentclub/foobar/config.h similarity index 100% rename from keyboards/foobar/config.h rename to keyboards/40percentclub/foobar/config.h diff --git a/keyboards/foobar/foobar.c b/keyboards/40percentclub/foobar/foobar.c similarity index 100% rename from keyboards/foobar/foobar.c rename to keyboards/40percentclub/foobar/foobar.c diff --git a/keyboards/foobar/foobar.h b/keyboards/40percentclub/foobar/foobar.h similarity index 100% rename from keyboards/foobar/foobar.h rename to keyboards/40percentclub/foobar/foobar.h diff --git a/keyboards/foobar/info.json b/keyboards/40percentclub/foobar/info.json similarity index 100% rename from keyboards/foobar/info.json rename to keyboards/40percentclub/foobar/info.json diff --git a/keyboards/foobar/keymaps/default/config.h b/keyboards/40percentclub/foobar/keymaps/default/config.h similarity index 100% rename from keyboards/foobar/keymaps/default/config.h rename to keyboards/40percentclub/foobar/keymaps/default/config.h diff --git a/keyboards/foobar/keymaps/default/keymap.c b/keyboards/40percentclub/foobar/keymaps/default/keymap.c similarity index 100% rename from keyboards/foobar/keymaps/default/keymap.c rename to keyboards/40percentclub/foobar/keymaps/default/keymap.c diff --git a/keyboards/foobar/keymaps/default/readme.md b/keyboards/40percentclub/foobar/keymaps/default/readme.md similarity index 100% rename from keyboards/foobar/keymaps/default/readme.md rename to keyboards/40percentclub/foobar/keymaps/default/readme.md diff --git a/keyboards/foobar/keymaps/macro/config.h b/keyboards/40percentclub/foobar/keymaps/macro/config.h similarity index 100% rename from keyboards/foobar/keymaps/macro/config.h rename to keyboards/40percentclub/foobar/keymaps/macro/config.h diff --git a/keyboards/foobar/keymaps/macro/keymap.c b/keyboards/40percentclub/foobar/keymaps/macro/keymap.c similarity index 100% rename from keyboards/foobar/keymaps/macro/keymap.c rename to keyboards/40percentclub/foobar/keymaps/macro/keymap.c diff --git a/keyboards/foobar/keymaps/macro/readme.md b/keyboards/40percentclub/foobar/keymaps/macro/readme.md similarity index 100% rename from keyboards/foobar/keymaps/macro/readme.md rename to keyboards/40percentclub/foobar/keymaps/macro/readme.md diff --git a/keyboards/foobar/readme.md b/keyboards/40percentclub/foobar/readme.md similarity index 95% rename from keyboards/foobar/readme.md rename to keyboards/40percentclub/foobar/readme.md index 3898d4bb1a..0acdf7252d 100644 --- a/keyboards/foobar/readme.md +++ b/keyboards/40percentclub/foobar/readme.md @@ -1,6 +1,7 @@ # foobar ![foobar](https://2.bp.blogspot.com/-rr8TK6xg2N0/WbwVL2O7EfI/AAAAAAACDc8/209wN69ju0wAFICYYPNLIEGQhat5-5MbwCLcBGAs/s640/a.JPG) +=== Split 30% keyboard that fits within the 100mm x 100mm PCB size. Can be used together as a split keyboard or as a single 15 key macropad. @@ -12,6 +13,6 @@ Hardware Availability: [foobar project on 40% Keyboards](http://www.40percent.cl Make example for this keyboard (after setting up your build environment): - make foobar:default + make 40percentclub/foobar:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/foobar/rules.mk b/keyboards/40percentclub/foobar/rules.mk similarity index 100% rename from keyboards/foobar/rules.mk rename to keyboards/40percentclub/foobar/rules.mk diff --git a/keyboards/gherkin/config.h b/keyboards/40percentclub/gherkin/config.h similarity index 100% rename from keyboards/gherkin/config.h rename to keyboards/40percentclub/gherkin/config.h diff --git a/keyboards/gherkin/gherkin.c b/keyboards/40percentclub/gherkin/gherkin.c similarity index 100% rename from keyboards/gherkin/gherkin.c rename to keyboards/40percentclub/gherkin/gherkin.c diff --git a/keyboards/gherkin/gherkin.h b/keyboards/40percentclub/gherkin/gherkin.h similarity index 100% rename from keyboards/gherkin/gherkin.h rename to keyboards/40percentclub/gherkin/gherkin.h diff --git a/keyboards/gherkin/info.json b/keyboards/40percentclub/gherkin/info.json similarity index 100% rename from keyboards/gherkin/info.json rename to keyboards/40percentclub/gherkin/info.json diff --git a/keyboards/gherkin/keymaps/bbaserdem/README.md b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md similarity index 100% rename from keyboards/gherkin/keymaps/bbaserdem/README.md rename to keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md diff --git a/keyboards/gherkin/keymaps/bbaserdem/config.h b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h similarity index 100% rename from keyboards/gherkin/keymaps/bbaserdem/config.h rename to keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h diff --git a/keyboards/gherkin/keymaps/bbaserdem/keymap.c b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/bbaserdem/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c diff --git a/keyboards/gherkin/keymaps/bbaserdem/rules.mk b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/bbaserdem/rules.mk rename to keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk diff --git a/keyboards/gherkin/keymaps/default/keymap.c b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/default/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/default/keymap.c diff --git a/keyboards/gherkin/keymaps/itsaferbie/config.h b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h similarity index 100% rename from keyboards/gherkin/keymaps/itsaferbie/config.h rename to keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h diff --git a/keyboards/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/itsaferbie/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c diff --git a/keyboards/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/itsaferbie/rules.mk rename to keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk diff --git a/keyboards/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h similarity index 100% rename from keyboards/gherkin/keymaps/mjt/config.h rename to keyboards/40percentclub/gherkin/keymaps/mjt/config.h diff --git a/keyboards/gherkin/keymaps/mjt/keymap.c b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/mjt/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c diff --git a/keyboards/gherkin/keymaps/mjt/rules.mk b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/mjt/rules.mk rename to keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk diff --git a/keyboards/gherkin/keymaps/steno/config.h b/keyboards/40percentclub/gherkin/keymaps/steno/config.h similarity index 100% rename from keyboards/gherkin/keymaps/steno/config.h rename to keyboards/40percentclub/gherkin/keymaps/steno/config.h diff --git a/keyboards/gherkin/keymaps/steno/keymap.c b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/steno/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/steno/keymap.c diff --git a/keyboards/gherkin/keymaps/steno/readme.md b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md similarity index 100% rename from keyboards/gherkin/keymaps/steno/readme.md rename to keyboards/40percentclub/gherkin/keymaps/steno/readme.md diff --git a/keyboards/gherkin/keymaps/steno/rules.mk b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/steno/rules.mk rename to keyboards/40percentclub/gherkin/keymaps/steno/rules.mk diff --git a/keyboards/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h similarity index 100% rename from keyboards/gherkin/keymaps/talljoe-gherkin/config.h rename to keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h diff --git a/keyboards/gherkin/keymaps/talljoe-gherkin/keymap.c b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c similarity index 100% rename from keyboards/gherkin/keymaps/talljoe-gherkin/keymap.c rename to keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c diff --git a/keyboards/gherkin/keymaps/talljoe-gherkin/rules.mk b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk similarity index 100% rename from keyboards/gherkin/keymaps/talljoe-gherkin/rules.mk rename to keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk diff --git a/keyboards/gherkin/README.md b/keyboards/40percentclub/gherkin/readme.md similarity index 52% rename from keyboards/gherkin/README.md rename to keyboards/40percentclub/gherkin/readme.md index 5e0daeabf9..a6680d7205 100644 --- a/keyboards/gherkin/README.md +++ b/keyboards/40percentclub/gherkin/readme.md @@ -1,4 +1,6 @@ -Gherkin +# Gherkin + +![Gherkin](https://4.bp.blogspot.com/-sQ18-lNZXOc/WCzlTde-4PI/AAAAAAAB_JQ/qQrehAMG6DMKf3i4oj4mkmLGOfTUvb3KgCLcB/s640/IMG_20161116_122926.jpg) === A 30 key keyboard. @@ -11,8 +13,9 @@ Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.c Make example for this keyboard (after setting up your build environment): - make gherkin:default + make 40percentclub/gherkin:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -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. First pass at adding support for the gherkin keyboard. Compiles but completely untested. Intended to kick-start development. diff --git a/keyboards/gherkin/rules.mk b/keyboards/40percentclub/gherkin/rules.mk similarity index 100% rename from keyboards/gherkin/rules.mk rename to keyboards/40percentclub/gherkin/rules.mk diff --git a/keyboards/luddite/config.h b/keyboards/40percentclub/luddite/config.h similarity index 100% rename from keyboards/luddite/config.h rename to keyboards/40percentclub/luddite/config.h diff --git a/keyboards/luddite/keymaps/default/keymap.c b/keyboards/40percentclub/luddite/keymaps/default/keymap.c similarity index 100% rename from keyboards/luddite/keymaps/default/keymap.c rename to keyboards/40percentclub/luddite/keymaps/default/keymap.c diff --git a/keyboards/luddite/luddite.c b/keyboards/40percentclub/luddite/luddite.c similarity index 100% rename from keyboards/luddite/luddite.c rename to keyboards/40percentclub/luddite/luddite.c diff --git a/keyboards/luddite/luddite.h b/keyboards/40percentclub/luddite/luddite.h similarity index 100% rename from keyboards/luddite/luddite.h rename to keyboards/40percentclub/luddite/luddite.h diff --git a/keyboards/luddite/README.md b/keyboards/40percentclub/luddite/readme.md similarity index 82% rename from keyboards/luddite/README.md rename to keyboards/40percentclub/luddite/readme.md index 72666dda5f..928b6de8f3 100644 --- a/keyboards/luddite/README.md +++ b/keyboards/40percentclub/luddite/readme.md @@ -1,5 +1,8 @@ # Luddite +![Luddite](https://1.bp.blogspot.com/-GAAa-sMU_WU/W7uYLJJ8x1I/AAAAAAACS44/31n2z69BSboM4KT48YkNMJRYciC8LUMWgCLcBGAs/s640/a.jpg) +=== + Luddite 60% keyboard with backlight and RGB underglow. * [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/luddite) @@ -10,7 +13,7 @@ Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.c Make example for this keyboard (after setting up your build environment): - make luddite:default + make 40percentclub/luddite:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/luddite/rules.mk b/keyboards/40percentclub/luddite/rules.mk similarity index 100% rename from keyboards/luddite/rules.mk rename to keyboards/40percentclub/luddite/rules.mk diff --git a/keyboards/mf68/config.h b/keyboards/40percentclub/mf68/config.h similarity index 100% rename from keyboards/mf68/config.h rename to keyboards/40percentclub/mf68/config.h diff --git a/keyboards/mf68/info.json b/keyboards/40percentclub/mf68/info.json similarity index 100% rename from keyboards/mf68/info.json rename to keyboards/40percentclub/mf68/info.json diff --git a/keyboards/mf68/keymaps/default/keymap.c b/keyboards/40percentclub/mf68/keymaps/default/keymap.c similarity index 100% rename from keyboards/mf68/keymaps/default/keymap.c rename to keyboards/40percentclub/mf68/keymaps/default/keymap.c diff --git a/keyboards/mf68/keymaps/factory/keymap.c b/keyboards/40percentclub/mf68/keymaps/factory/keymap.c similarity index 100% rename from keyboards/mf68/keymaps/factory/keymap.c rename to keyboards/40percentclub/mf68/keymaps/factory/keymap.c diff --git a/keyboards/mf68/mf68.c b/keyboards/40percentclub/mf68/mf68.c similarity index 100% rename from keyboards/mf68/mf68.c rename to keyboards/40percentclub/mf68/mf68.c diff --git a/keyboards/mf68/mf68.h b/keyboards/40percentclub/mf68/mf68.h similarity index 100% rename from keyboards/mf68/mf68.h rename to keyboards/40percentclub/mf68/mf68.h diff --git a/keyboards/40percentclub/mf68/readme.md b/keyboards/40percentclub/mf68/readme.md new file mode 100644 index 0000000000..825c265f16 --- /dev/null +++ b/keyboards/40percentclub/mf68/readme.md @@ -0,0 +1,18 @@ +# mf68 + +![mf68](https://3.bp.blogspot.com/-0YCA3Hx2Rq0/WD3U3GWhyvI/AAAAAAAB_Uo/RWTeyCPblGcxDrDwT9WL9ck2ZRuR26DgACLcB/s640/IMG_20161129_063741.jpg) +=== + +Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib). + +* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) + +Keyboard Maintainer: QMK Community +Hardware Supported: Pro Micro +Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb) + +Make example for this keyboard (after setting up your build environment): + + make 40percentclub/mf68:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/mf68/rules.mk b/keyboards/40percentclub/mf68/rules.mk similarity index 100% rename from keyboards/mf68/rules.mk rename to keyboards/40percentclub/mf68/rules.mk diff --git a/keyboards/mf68_ble/config.h b/keyboards/40percentclub/mf68_ble/config.h similarity index 100% rename from keyboards/mf68_ble/config.h rename to keyboards/40percentclub/mf68_ble/config.h diff --git a/keyboards/mf68_ble/info.json b/keyboards/40percentclub/mf68_ble/info.json similarity index 100% rename from keyboards/mf68_ble/info.json rename to keyboards/40percentclub/mf68_ble/info.json diff --git a/keyboards/mf68_ble/keymaps/default/keymap.c b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c similarity index 100% rename from keyboards/mf68_ble/keymaps/default/keymap.c rename to keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c diff --git a/keyboards/mf68_ble/mf68_ble.c b/keyboards/40percentclub/mf68_ble/mf68_ble.c similarity index 100% rename from keyboards/mf68_ble/mf68_ble.c rename to keyboards/40percentclub/mf68_ble/mf68_ble.c diff --git a/keyboards/mf68_ble/mf68_ble.h b/keyboards/40percentclub/mf68_ble/mf68_ble.h similarity index 100% rename from keyboards/mf68_ble/mf68_ble.h rename to keyboards/40percentclub/mf68_ble/mf68_ble.h diff --git a/keyboards/mf68_ble/README.md b/keyboards/40percentclub/mf68_ble/readme.md similarity index 58% rename from keyboards/mf68_ble/README.md rename to keyboards/40percentclub/mf68_ble/readme.md index 3829c8fd7d..0e0f4b90d8 100644 --- a/keyboards/mf68_ble/README.md +++ b/keyboards/40percentclub/mf68_ble/readme.md @@ -1,10 +1,12 @@ -MF68 -==== +# mf68_ble + +![mf68_ble](https://3.bp.blogspot.com/-0YCA3Hx2Rq0/WD3U3GWhyvI/AAAAAAAB_Uo/RWTeyCPblGcxDrDwT9WL9ck2ZRuR26DgACLcB/s640/IMG_20161129_063741.jpg) +=== Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib). -Keyboard Maintainer: [di0ib](http://www.40percent.club) -Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/) +Keyboard Maintainer: QMK Community +Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/) Please note: This is 32u4 and not M0 Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb) [MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc) @@ -20,8 +22,8 @@ Below is how you wire the Feather to PCB ![wire map](https://i.imgur.com/zYOjlTA.png) -Make example for this keyboard (after setting up your build environment): +Make example for this keyboard (after setting up your build environment): - make mf68_ble:default + make 40percentclub/mf68_ble:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/mf68_ble/rules.mk b/keyboards/40percentclub/mf68_ble/rules.mk similarity index 100% rename from keyboards/mf68_ble/rules.mk rename to keyboards/40percentclub/mf68_ble/rules.mk diff --git a/keyboards/nano/config.h b/keyboards/40percentclub/nano/config.h similarity index 100% rename from keyboards/nano/config.h rename to keyboards/40percentclub/nano/config.h diff --git a/keyboards/nano/info.json b/keyboards/40percentclub/nano/info.json similarity index 100% rename from keyboards/nano/info.json rename to keyboards/40percentclub/nano/info.json diff --git a/keyboards/nano/keymaps/default/keymap.c b/keyboards/40percentclub/nano/keymaps/default/keymap.c similarity index 100% rename from keyboards/nano/keymaps/default/keymap.c rename to keyboards/40percentclub/nano/keymaps/default/keymap.c diff --git a/keyboards/nano/keymaps/default/rules.mk b/keyboards/40percentclub/nano/keymaps/default/rules.mk similarity index 100% rename from keyboards/nano/keymaps/default/rules.mk rename to keyboards/40percentclub/nano/keymaps/default/rules.mk diff --git a/keyboards/nano/keymaps/spooka/config.h b/keyboards/40percentclub/nano/keymaps/spooka/config.h similarity index 100% rename from keyboards/nano/keymaps/spooka/config.h rename to keyboards/40percentclub/nano/keymaps/spooka/config.h diff --git a/keyboards/nano/keymaps/spooka/keymap.c b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c similarity index 100% rename from keyboards/nano/keymaps/spooka/keymap.c rename to keyboards/40percentclub/nano/keymaps/spooka/keymap.c diff --git a/keyboards/nano/keymaps/spooka/rules.mk b/keyboards/40percentclub/nano/keymaps/spooka/rules.mk similarity index 100% rename from keyboards/nano/keymaps/spooka/rules.mk rename to keyboards/40percentclub/nano/keymaps/spooka/rules.mk diff --git a/keyboards/nano/matrix.c b/keyboards/40percentclub/nano/matrix.c similarity index 100% rename from keyboards/nano/matrix.c rename to keyboards/40percentclub/nano/matrix.c diff --git a/keyboards/nano/nano.c b/keyboards/40percentclub/nano/nano.c similarity index 100% rename from keyboards/nano/nano.c rename to keyboards/40percentclub/nano/nano.c diff --git a/keyboards/nano/nano.h b/keyboards/40percentclub/nano/nano.h similarity index 100% rename from keyboards/nano/nano.h rename to keyboards/40percentclub/nano/nano.h diff --git a/keyboards/40percentclub/nano/readme.md b/keyboards/40percentclub/nano/readme.md new file mode 100644 index 0000000000..2677e5b7b7 --- /dev/null +++ b/keyboards/40percentclub/nano/readme.md @@ -0,0 +1,16 @@ +# nano + +![nano](https://1.bp.blogspot.com/-goa_eXx1McA/WEhvoSdfDSI/AAAAAAAB_bM/XdstcXe_eKkQxuYcNI5cTySTVo3xZxaeQCEw/s640/IMG_20161207_101051.jpg) +=== + +A 2x4 mini switch pad built using 6mm x 6mm tactile switches and a Pro Micro. [More info here.](http://www.40percent.club/2016/12/nano-tmk.html) + +Keyboard Maintainer: QMK Community +Hardware Supported: Pro Micro ATmega32U4 +Hardware Availability: [PCB Files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/nano/pcb) + +Make example for this keyboard (after setting up your build environment): + + make 40percentclub/nano:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/nano/rules.mk b/keyboards/40percentclub/nano/rules.mk similarity index 100% rename from keyboards/nano/rules.mk rename to keyboards/40percentclub/nano/rules.mk diff --git a/keyboards/40percentclub/readme.md b/keyboards/40percentclub/readme.md new file mode 100644 index 0000000000..a8dd0e84f5 --- /dev/null +++ b/keyboards/40percentclub/readme.md @@ -0,0 +1,4 @@ +# 40% Keyboards + +Website: [40percent.club](http://www.40percent.club/) +The original TMK firmware: [repo](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/) diff --git a/keyboards/tomato/config.h b/keyboards/40percentclub/tomato/config.h similarity index 100% rename from keyboards/tomato/config.h rename to keyboards/40percentclub/tomato/config.h diff --git a/keyboards/tomato/info.json b/keyboards/40percentclub/tomato/info.json similarity index 100% rename from keyboards/tomato/info.json rename to keyboards/40percentclub/tomato/info.json diff --git a/keyboards/tomato/keymaps/default/keymap.c b/keyboards/40percentclub/tomato/keymaps/default/keymap.c similarity index 100% rename from keyboards/tomato/keymaps/default/keymap.c rename to keyboards/40percentclub/tomato/keymaps/default/keymap.c diff --git a/keyboards/tomato/readme.md b/keyboards/40percentclub/tomato/readme.md similarity index 56% rename from keyboards/tomato/readme.md rename to keyboards/40percentclub/tomato/readme.md index e3851f18ca..f93105ffdd 100644 --- a/keyboards/tomato/readme.md +++ b/keyboards/40percentclub/tomato/readme.md @@ -1,4 +1,6 @@ -Tomato +# Tomato + +![Tomato](https://2.bp.blogspot.com/-k6lyvfZz2WA/WXYyr508D7I/AAAAAAACB8A/UCNP2WCfvWAT8UWsCDICMRXwip5tAZsOwCLcBGAs/s640/a.JPG) === A 30 key keyboard with programmable rgb backlighting. @@ -12,9 +14,9 @@ Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.c Make example for this keyboard (after setting up your build environment): - make tomato:default + make 40percentclub/tomato:default -See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). First pass at adding support for the tomato keyboard. Completely untested. Intended to kick-start development. diff --git a/keyboards/tomato/rules.mk b/keyboards/40percentclub/tomato/rules.mk similarity index 100% rename from keyboards/tomato/rules.mk rename to keyboards/40percentclub/tomato/rules.mk diff --git a/keyboards/tomato/tomato.c b/keyboards/40percentclub/tomato/tomato.c similarity index 100% rename from keyboards/tomato/tomato.c rename to keyboards/40percentclub/tomato/tomato.c diff --git a/keyboards/tomato/tomato.h b/keyboards/40percentclub/tomato/tomato.h similarity index 100% rename from keyboards/tomato/tomato.h rename to keyboards/40percentclub/tomato/tomato.h diff --git a/keyboards/ut47/LED_controls.ino b/keyboards/40percentclub/ut47/LED_controls.ino similarity index 100% rename from keyboards/ut47/LED_controls.ino rename to keyboards/40percentclub/ut47/LED_controls.ino diff --git a/keyboards/ut47/config.h b/keyboards/40percentclub/ut47/config.h similarity index 100% rename from keyboards/ut47/config.h rename to keyboards/40percentclub/ut47/config.h diff --git a/keyboards/ut47/info.json b/keyboards/40percentclub/ut47/info.json similarity index 100% rename from keyboards/ut47/info.json rename to keyboards/40percentclub/ut47/info.json diff --git a/keyboards/ut47/keymaps/default/config.h b/keyboards/40percentclub/ut47/keymaps/default/config.h similarity index 100% rename from keyboards/ut47/keymaps/default/config.h rename to keyboards/40percentclub/ut47/keymaps/default/config.h diff --git a/keyboards/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c similarity index 100% rename from keyboards/ut47/keymaps/default/keymap.c rename to keyboards/40percentclub/ut47/keymaps/default/keymap.c diff --git a/keyboards/ut47/keymaps/default/readme.md b/keyboards/40percentclub/ut47/keymaps/default/readme.md similarity index 100% rename from keyboards/ut47/keymaps/default/readme.md rename to keyboards/40percentclub/ut47/keymaps/default/readme.md diff --git a/keyboards/ut47/keymaps/non-us/config.h b/keyboards/40percentclub/ut47/keymaps/non-us/config.h similarity index 100% rename from keyboards/ut47/keymaps/non-us/config.h rename to keyboards/40percentclub/ut47/keymaps/non-us/config.h diff --git a/keyboards/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c similarity index 100% rename from keyboards/ut47/keymaps/non-us/keymap.c rename to keyboards/40percentclub/ut47/keymaps/non-us/keymap.c diff --git a/keyboards/ut47/keymaps/non-us/readme.md b/keyboards/40percentclub/ut47/keymaps/non-us/readme.md similarity index 100% rename from keyboards/ut47/keymaps/non-us/readme.md rename to keyboards/40percentclub/ut47/keymaps/non-us/readme.md diff --git a/keyboards/ut47/keymaps/nordic/config.h b/keyboards/40percentclub/ut47/keymaps/nordic/config.h similarity index 100% rename from keyboards/ut47/keymaps/nordic/config.h rename to keyboards/40percentclub/ut47/keymaps/nordic/config.h diff --git a/keyboards/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c similarity index 100% rename from keyboards/ut47/keymaps/nordic/keymap.c rename to keyboards/40percentclub/ut47/keymaps/nordic/keymap.c diff --git a/keyboards/ut47/keymaps/nordic/readme.md b/keyboards/40percentclub/ut47/keymaps/nordic/readme.md similarity index 100% rename from keyboards/ut47/keymaps/nordic/readme.md rename to keyboards/40percentclub/ut47/keymaps/nordic/readme.md diff --git a/keyboards/ut47/keymaps/rgb/config.h b/keyboards/40percentclub/ut47/keymaps/rgb/config.h similarity index 100% rename from keyboards/ut47/keymaps/rgb/config.h rename to keyboards/40percentclub/ut47/keymaps/rgb/config.h diff --git a/keyboards/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c similarity index 100% rename from keyboards/ut47/keymaps/rgb/keymap.c rename to keyboards/40percentclub/ut47/keymaps/rgb/keymap.c diff --git a/keyboards/ut47/keymaps/rgb/readme.md b/keyboards/40percentclub/ut47/keymaps/rgb/readme.md similarity index 100% rename from keyboards/ut47/keymaps/rgb/readme.md rename to keyboards/40percentclub/ut47/keymaps/rgb/readme.md diff --git a/keyboards/ut47/keymaps/rgb/rules.mk b/keyboards/40percentclub/ut47/keymaps/rgb/rules.mk similarity index 100% rename from keyboards/ut47/keymaps/rgb/rules.mk rename to keyboards/40percentclub/ut47/keymaps/rgb/rules.mk diff --git a/keyboards/ut47/led.c b/keyboards/40percentclub/ut47/led.c similarity index 100% rename from keyboards/ut47/led.c rename to keyboards/40percentclub/ut47/led.c diff --git a/keyboards/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c similarity index 100% rename from keyboards/ut47/matrix.c rename to keyboards/40percentclub/ut47/matrix.c diff --git a/keyboards/ut47/readme.md b/keyboards/40percentclub/ut47/readme.md similarity index 92% rename from keyboards/ut47/readme.md rename to keyboards/40percentclub/ut47/readme.md index 244bbd1de8..bbae1384a9 100644 --- a/keyboards/ut47/readme.md +++ b/keyboards/40percentclub/ut47/readme.md @@ -1,6 +1,7 @@ # ut47 ![ut47](https://i.imgur.com/ZDKZQaj.jpg) +=== Somewhere between ortholinear and standard offset. Created to have all the same functions on a Planck in a keyboard but with a more conventional keyboard row stagger. @@ -12,15 +13,15 @@ Hardware Availability: [How to order](http://www.40percent.club/2017/03/ordering To flash the UT47 without LEDs (single controller), run: - make ut47:default + make 40percentclub/ut47:default To enable the UT47 LEDs (dual controller), run this for the main controller: - make ut47:default LED_ENABLE=yes + make 40percentclub/ut47:default LED_ENABLE=yes Or you can add `LED_ENABLE = yes` to *rules.mk* -And then flash [LED_controls.ino](LED_controls.ino) to the second controller using [Arduino IDE](https://www.arduino.cc/en/Main/Software) or similar. NOTE: Arduino IDE will require importing additional libraries to compile. +And then flash [LED_controls.ino](LED_controls.ino) to the second controller using [Arduino IDE](https://www.arduino.cc/en/Main/Software) or similar. NOTE: Arduino IDE will require importing additional libraries to compile. The reason this is an "opt-in" feature is to prevent sending serial communication over the pin, in case it ends up being used for something else (like RGB underglow). diff --git a/keyboards/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk similarity index 100% rename from keyboards/ut47/rules.mk rename to keyboards/40percentclub/ut47/rules.mk diff --git a/keyboards/ut47/ut47.c b/keyboards/40percentclub/ut47/ut47.c similarity index 100% rename from keyboards/ut47/ut47.c rename to keyboards/40percentclub/ut47/ut47.c diff --git a/keyboards/ut47/ut47.h b/keyboards/40percentclub/ut47/ut47.h similarity index 100% rename from keyboards/ut47/ut47.h rename to keyboards/40percentclub/ut47/ut47.h diff --git a/keyboards/mf68/README.md b/keyboards/mf68/README.md deleted file mode 100644 index 7dd3a900a5..0000000000 --- a/keyboards/mf68/README.md +++ /dev/null @@ -1,18 +0,0 @@ -MF68 -==== - -Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib). - -Keyboard Maintainer: [di0ib](http://www.40percent.club) -Hardware Supported: Pro Micro -Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb) - -Make example for this keyboard (after setting up your build environment): - - make mf68:default - -Example of flashing this keyboard: - - make mf68:default:avrdude - -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. diff --git a/keyboards/nano/readme.md b/keyboards/nano/readme.md deleted file mode 100644 index e8278e340c..0000000000 --- a/keyboards/nano/readme.md +++ /dev/null @@ -1,14 +0,0 @@ -Nano -==== - -A 2x4 mini switch pad built using 6mm x 6mm tactile switches and a Pro Micro. [More info here.](http://www.40percent.club/2016/12/nano-tmk.html) - -Keyboard Maintainer: [di0ib](https://github.com/di0ib) -Hardware Supported: Pro Micro ATmega32U4 -Hardware Availability: [PCB Files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/nano/pcb) - -Make example for this keyboard (after setting up your build environment): - - make nano: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. From fa2183a64a1f8619f0b0ce9b8087732eaaa154bf Mon Sep 17 00:00:00 2001 From: dlgoodr Date: Thu, 8 Nov 2018 19:01:16 -0600 Subject: [PATCH 0060/1763] Keymap: dlg's tada68 keymap (#4289) * dlg's keymap * fix list order * remove cruft * pragma Co-Authored-By: dlgoodr * turn on bootmagic, enable swapping ` and Esc while I figure out which compromise is least bad --- keyboards/tada68/keymaps/dlg/config.h | 3 + keyboards/tada68/keymaps/dlg/keymap.c | 76 ++++++++++++++++++++++++++ keyboards/tada68/keymaps/dlg/readme.md | 54 ++++++++++++++++++ keyboards/tada68/keymaps/dlg/rules.mk | 17 ++++++ 4 files changed, 150 insertions(+) create mode 100644 keyboards/tada68/keymaps/dlg/config.h create mode 100755 keyboards/tada68/keymaps/dlg/keymap.c create mode 100755 keyboards/tada68/keymaps/dlg/readme.md create mode 100644 keyboards/tada68/keymaps/dlg/rules.mk diff --git a/keyboards/tada68/keymaps/dlg/config.h b/keyboards/tada68/keymaps/dlg/config.h new file mode 100644 index 0000000000..e1a6eb1a2b --- /dev/null +++ b/keyboards/tada68/keymaps/dlg/config.h @@ -0,0 +1,3 @@ +#pragma once + +#define GRAVE_ESC_ALT_OVERRIDE diff --git a/keyboards/tada68/keymaps/dlg/keymap.c b/keyboards/tada68/keymaps/dlg/keymap.c new file mode 100755 index 0000000000..9cd6cb2f12 --- /dev/null +++ b/keyboards/tada68/keymaps/dlg/keymap.c @@ -0,0 +1,76 @@ +#include QMK_KEYBOARD_H + +#define _BL 0 +#define _FL 1 +#define _MAC 2 + +// investigate later - use lctl / lsft as up/down. +// https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/fakb +#define LCTL_MA LCTL_T(KC_UP) +#define LSFT_MA LSFT_T(KC_DOWN) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt|Fn |Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + * + * Note: Shift + Esc = ~ + * Win + Esc = ` + */ +[_BL] = LAYOUT_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_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , \ + KC_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_PGUP, \ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,----------------------------------------------------------------. + * |`swp|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del |`swp| + * |----------------------------------------------------------------| + * | |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins | + * |----------------------------------------------------------------| + * | | | | | | |<- |Dn |Up | ->| | | |Hme | + * |----------------------------------------------------------------| + * | | | | | | | |MUT|V- |V+ | | |PUp|End | + * |----------------------------------------------------------------| + * | | | | | | | |Hme|PDn|End | + * `----------------------------------------------------------------' + */ +[_FL] = LAYOUT_ansi( + MAGIC_UNSWAP_GRAVE_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_DEL, MAGIC_SWAP_GRAVE_ESC, \ + _______, BL_TOGG, BL_DEC, BL_INC , BL_BRTG, _______, _______, _______, TG(_MAC),_______, KC_PSCR, _______, _______, _______, KC_INS, \ + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, KC_HOME, \ + _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, KC_END , \ + _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END ), + + /* Keymap _MAC: Mac Layer + * ,----------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * |Ctrl|Alt |Win | |Win | |Alt| | | | + * `----------------------------------------------------------------' + */ +[_MAC] = LAYOUT_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_LCTL, KC_LALT, KC_LGUI, _______, KC_RGUI, _______, KC_RALT, _______, _______, _______), + +}; diff --git a/keyboards/tada68/keymaps/dlg/readme.md b/keyboards/tada68/keymaps/dlg/readme.md new file mode 100755 index 0000000000..1f1ae18671 --- /dev/null +++ b/keyboards/tada68/keymaps/dlg/readme.md @@ -0,0 +1,54 @@ +# dlg's layout + +[tshack's layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/tshack), with: + + Mac layer + + Press Fn-I to align the bottom row to mac standards + + volume controls moved to Fn+ M<> + + [Space Cadet Shift](https://docs.qmk.fm/#/feature_space_cadet_shift) enabled + + Fn+R for LED breathing + + Fn+Del for Insert + + `GRAVE_ESC_ALT_OVERRIDE` so cmd-opt-esc still works (thx [mattdicarlo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/mattdicarlo)) + +``` + Base Layer +,----------------------------------------------------------------. +|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | +|----------------------------------------------------------------| +|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | +|----------------------------------------------------------------| +|Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| +|----------------------------------------------------------------| +|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn| +|----------------------------------------------------------------| +|Ctrl|Win |Alt | Space |Alt|Fn |Ctrl|<- |Dn | -> | +`----------------------------------------------------------------' +Note: Shift + Esc = ~ (tilde) + Win + Esc = ` (grave) + + + Fn Layer +,----------------------------------------------------------------. +| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del | | +|----------------------------------------------------------------| +| |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins | +|----------------------------------------------------------------| +| | | | | | |<- |Dn |Up | ->| | | |Hme | +|----------------------------------------------------------------| +| | | | | | | |MUT|V- |V+ | | |PUp|End | +|----------------------------------------------------------------| +| | | | | | | |Hme|PDn|End | +`----------------------------------------------------------------' + +Mac Layer +,----------------------------------------------------------------. +| | | | | | | | | | | | | | | | +|----------------------------------------------------------------| +| | | | | | | | | | | | | | | | +|----------------------------------------------------------------| +| | | | | | | | | | | | | | | +|----------------------------------------------------------------| +| | | | | | | | | | | | | | | +|----------------------------------------------------------------| +|Ctrl|Alt |Win | |Win | |Alt| | | | +`----------------------------------------------------------------' +``` diff --git a/keyboards/tada68/keymaps/dlg/rules.mk b/keyboards/tada68/keymaps/dlg/rules.mk new file mode 100644 index 0000000000..2e0f1a6616 --- /dev/null +++ b/keyboards/tada68/keymaps/dlg/rules.mk @@ -0,0 +1,17 @@ +# 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 = full # 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 # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From 6ae409dd55133e25e103aa974080ce127790357f Mon Sep 17 00:00:00 2001 From: Jason Thigpen Date: Fri, 9 Nov 2018 08:49:29 -0800 Subject: [PATCH 0061/1763] Add my new ANSI layout dz60 setup (#4397) * minor additions to alps64 and dz60 * Rename crd keymap to represent 2u lshift layout * Add crd's new ANSI layout dz60 with preferred layers --- keyboards/alps64/keymaps/crd/keymap.c | 6 ++-- .../keymaps/{crd => crd_2u_lshift}/keymap.c | 30 +++++++++---------- keyboards/dz60/keymaps/crd_ansi/keymap.c | 25 ++++++++++++++++ 3 files changed, 43 insertions(+), 18 deletions(-) rename keyboards/dz60/keymaps/{crd => crd_2u_lshift}/keymap.c (80%) create mode 100644 keyboards/dz60/keymaps/crd_ansi/keymap.c diff --git a/keyboards/alps64/keymaps/crd/keymap.c b/keyboards/alps64/keymaps/crd/keymap.c index 4f3ea446ec..815e6ddf4b 100644 --- a/keyboards/alps64/keymaps/crd/keymap.c +++ b/keyboards/alps64/keymaps/crd/keymap.c @@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* 1: fn1 */ LAYOUT_all( - _______, 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_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_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -19,8 +19,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* 2: fn2 */ LAYOUT_all( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, DEBUG, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ diff --git a/keyboards/dz60/keymaps/crd/keymap.c b/keyboards/dz60/keymaps/crd_2u_lshift/keymap.c similarity index 80% rename from keyboards/dz60/keymaps/crd/keymap.c rename to keyboards/dz60/keymaps/crd_2u_lshift/keymap.c index 148b03b995..4d2ca279c2 100644 --- a/keyboards/dz60/keymaps/crd/keymap.c +++ b/keyboards/dz60/keymaps/crd_2u_lshift/keymap.c @@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Ctrl/Esc| A | S | D | F | G | H | J | K | L | ; | ' | Enter | * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | + * | Shift | Z | X | C | V | B | N | M | , | . | / |Home | U | End | * |-----------------------------------------------------------------------------------------+ * | FN1 | Alt | Cmd | Space | Cmd | FN2 | L | D | R | * `-----------------------------------------------------------------------------------------' @@ -20,17 +20,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_HOME, KC_UP, KC_END, MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT ), /* FN1 Layer * ,-----------------------------------------------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del | * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | + * | | | | | | | | | | | | Home | PgUp | | * |-----------------------------------------------------------------------------------------+ - * | | | | | | | L | D | U | R | | | | + * | | | | | | | L | D | U | R | End | PgDn| | * |-----------------------------------------------------------------------------------------+ * | | | | | | | | | | | | |PgUp | | * |-----------------------------------------------------------------------------------------+ @@ -39,10 +39,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ LAYOUT_directional( - _______, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + 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_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDOWN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_END ), @@ -50,9 +50,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | RESET | * |-----------------------------------------------------------------------------------------+ - * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| |Mute | Vol- | Vol+ | | * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | + * | | | | | | | | | | |Bri- |Bri+ | | * |-----------------------------------------------------------------------------------------+ * | | | | | | | | | | | |Pl/Ps|Vol+ |Mute | * |-----------------------------------------------------------------------------------------+ @@ -61,10 +61,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ LAYOUT_directional( - KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, - _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE, + KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, + _______, _______, _______, DEBUG, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT ), }; diff --git a/keyboards/dz60/keymaps/crd_ansi/keymap.c b/keyboards/dz60/keymaps/crd_ansi/keymap.c new file mode 100644 index 0000000000..eac0f1e84c --- /dev/null +++ b/keyboards/dz60/keymaps/crd_ansi/keymap.c @@ -0,0 +1,25 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_60_ansi( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_UP), + MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, RGUI_T(KC_LEFT), RALT_T(KC_DOWN), LT(2, KC_RIGHT) + ), + LAYOUT_60_ansi( + 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_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + LAYOUT_60_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; From 519ce723fb5e8e7272ee08f611d2c15e40bb2969 Mon Sep 17 00:00:00 2001 From: mcmadhatter Date: Fri, 9 Nov 2018 19:16:08 +0000 Subject: [PATCH 0062/1763] Added support for backlight on diverge3 , and added a UK iso layout (#4392) * Added support for backlight , and a UK iso layout Added support for backlight , and a UK iso layout. Now uses the SPLIT_KEYBOARD #define rather than relying on lets split * Update keyboards/diverge3/keymaps/isoUK/keymap.c Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/isoUK/keymap.c Co-Authored-By: mcmadhatter * Simplified the lower layer Simplified the lower layer * dir rename to snake case dir rename to snake case * changed dir case changed dir case * Update keyboards/diverge3/rules.mk Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/config.h Co-Authored-By: mcmadhatter * Update keyboards/diverge3/config.h Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/keymap.c Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/keymap.c Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/keymap.c Co-Authored-By: mcmadhatter * Update keyboards/diverge3/config.h Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/config.h Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/config.h Co-Authored-By: mcmadhatter * Update keyboards/diverge3/keymaps/iso_uk/config.h Co-Authored-By: mcmadhatter * aligned and tidyied up aligned and tidyied up --- keyboards/diverge3/config.h | 14 +++---- keyboards/diverge3/keymaps/iso_uk/config.h | 24 +++++++++++ keyboards/diverge3/keymaps/iso_uk/keymap.c | 45 +++++++++++++++++++++ keyboards/diverge3/keymaps/iso_uk/readme.md | 1 + keyboards/diverge3/keymaps/iso_uk/rules.mk | 1 + keyboards/diverge3/rules.mk | 10 ++--- 6 files changed, 79 insertions(+), 16 deletions(-) create mode 100755 keyboards/diverge3/keymaps/iso_uk/config.h create mode 100644 keyboards/diverge3/keymaps/iso_uk/keymap.c create mode 100755 keyboards/diverge3/keymaps/iso_uk/readme.md create mode 100755 keyboards/diverge3/keymaps/iso_uk/rules.mk diff --git a/keyboards/diverge3/config.h b/keyboards/diverge3/config.h index f3ed06739a..262be7b757 100644 --- a/keyboards/diverge3/config.h +++ b/keyboards/diverge3/config.h @@ -31,10 +31,6 @@ along with this program. If not, see . /* key matrix size */ #define MATRIX_ROWS 10 #define MATRIX_COLS 8 -// Only SERIAL is currently supported -// By converting this to use I2C, backlight -// would/should be fully functional as well -#define USE_SERIAL /* * Keyboard Matrix Assignments @@ -53,9 +49,9 @@ along with this program. If not, see . /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION ROW2COL -// #define BACKLIGHT_PIN C6 -// #define BACKLIGHT_BREATHING -// #define BACKLIGHT_LEVELS 3 +#define BACKLIGHT_PIN C6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 5 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ @@ -63,7 +59,7 @@ along with this program. If not, see . /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST - + /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE @@ -73,7 +69,7 @@ along with this program. If not, see . /* If defined, GRAVE_ESC will always act as ESC when CTRL is held. * This is userful for the Windows task manager shortcut (ctrl+shift+esc). */ -// #define GRAVE_ESC_CTRL_OVERRIDE + #define GRAVE_ESC_CTRL_OVERRIDE /* * Force NKRO diff --git a/keyboards/diverge3/keymaps/iso_uk/config.h b/keyboards/diverge3/keymaps/iso_uk/config.h new file mode 100755 index 0000000000..83f65979c7 --- /dev/null +++ b/keyboards/diverge3/keymaps/iso_uk/config.h @@ -0,0 +1,24 @@ +/* Copyright 2017 IslandMan93 + * + * 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 . + */ + +#pragma once + + +// place overrides here +#define MASTER_LEFT +#define PERMISSIVE_HOLD +#define TAPPING_TERM 150 + diff --git a/keyboards/diverge3/keymaps/iso_uk/keymap.c b/keyboards/diverge3/keymaps/iso_uk/keymap.c new file mode 100644 index 0000000000..8043347850 --- /dev/null +++ b/keyboards/diverge3/keymaps/iso_uk/keymap.c @@ -0,0 +1,45 @@ +/* Copyright 2017 IslandMan93 + * + * 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 . + */ +#include QMK_KEYBOARD_H + + +enum layers { + _QWERTY, + _LOWER, +}; + +#define LOWER MO(_LOWER) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( \ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_CAPS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LCBR, KC_RCBR, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_PSCR, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_NUHS, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_INS, KC_PGDN, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_HOME, KC_END, KC_SPC, KC_SPC, LOWER, KC_QUOT, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_SLASH + ), + + [_LOWER] = LAYOUT( + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + BL_TOGG, KC_ASTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + BL_INC, KC_ASUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + BL_DEC, KC_ASDN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_ASRP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/diverge3/keymaps/iso_uk/readme.md b/keyboards/diverge3/keymaps/iso_uk/readme.md new file mode 100755 index 0000000000..ff4971754a --- /dev/null +++ b/keyboards/diverge3/keymaps/iso_uk/readme.md @@ -0,0 +1 @@ +# My UK based diverge 3 layout diff --git a/keyboards/diverge3/keymaps/iso_uk/rules.mk b/keyboards/diverge3/keymaps/iso_uk/rules.mk new file mode 100755 index 0000000000..c9383ab8db --- /dev/null +++ b/keyboards/diverge3/keymaps/iso_uk/rules.mk @@ -0,0 +1 @@ +AUTO_SHIFT_ENABLE = yes diff --git a/keyboards/diverge3/rules.mk b/keyboards/diverge3/rules.mk index 38f3ee4e6a..36e8ccb471 100644 --- a/keyboards/diverge3/rules.mk +++ b/keyboards/diverge3/rules.mk @@ -1,6 +1,3 @@ -SRC += ../lets_split/matrix.c \ - ../lets_split/serial.c \ - ../lets_split/split_util.c # MCU name #MCU = at90usb1286 @@ -61,13 +58,12 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # 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 +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. - +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +SPLIT_KEYBOARD = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes From d6184be67a56429a284c2d0fa5f990368a580735 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Fri, 9 Nov 2018 12:15:37 -0800 Subject: [PATCH 0063/1763] IDOBO Keyboard Support (75Keys Aluminum Keyboard) (#4401) * initial commit * put my name everywhere * get the switch matrix correct * add a basic keymap * use a better LAYOUT macro * update readme * Add QMK Configurator support --- keyboards/idobo/config.h | 227 ++++++++++++++++++++++ keyboards/idobo/idobo.c | 43 ++++ keyboards/idobo/idobo.h | 44 +++++ keyboards/idobo/info.json | 12 ++ keyboards/idobo/keymaps/default/config.h | 19 ++ keyboards/idobo/keymaps/default/keymap.c | 66 +++++++ keyboards/idobo/keymaps/default/readme.md | 1 + keyboards/idobo/readme.md | 17 ++ keyboards/idobo/rules.mk | 81 ++++++++ 9 files changed, 510 insertions(+) create mode 100644 keyboards/idobo/config.h create mode 100644 keyboards/idobo/idobo.c create mode 100644 keyboards/idobo/idobo.h create mode 100644 keyboards/idobo/info.json create mode 100644 keyboards/idobo/keymaps/default/config.h create mode 100644 keyboards/idobo/keymaps/default/keymap.c create mode 100644 keyboards/idobo/keymaps/default/readme.md create mode 100644 keyboards/idobo/readme.md create mode 100644 keyboards/idobo/rules.mk diff --git a/keyboards/idobo/config.h b/keyboards/idobo/config.h new file mode 100644 index 0000000000..f6b552bad8 --- /dev/null +++ b/keyboards/idobo/config.h @@ -0,0 +1,227 @@ +/* +Copyright 2018 MechMerlin + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER You +#define PRODUCT idobo +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { B0, B3, C7, B6, C6 } +#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D5, D3, D2, D1, D0, D4, D6, D7, B4, B5 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +#define RGB_DI_PIN F0 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + +/* Bootmagic Lite key configuration */ +// #define BOOTMAGIC_LITE_ROW 0 +// #define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/idobo/idobo.c b/keyboards/idobo/idobo.c new file mode 100644 index 0000000000..3f870835ed --- /dev/null +++ b/keyboards/idobo/idobo.c @@ -0,0 +1,43 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "idobo.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 + + led_set_user(usb_led); +} diff --git a/keyboards/idobo/idobo.h b/keyboards/idobo/idobo.h new file mode 100644 index 0000000000..386fcee1a9 --- /dev/null +++ b/keyboards/idobo/idobo.h @@ -0,0 +1,44 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef IDOBO_H +#define IDOBO_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT_ortho_5x15( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ +} + +#endif diff --git a/keyboards/idobo/info.json b/keyboards/idobo/info.json new file mode 100644 index 0000000000..69c5e4e063 --- /dev/null +++ b/keyboards/idobo/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "IDOBO", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT_ortho_5x15": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}] + } + } +} diff --git a/keyboards/idobo/keymaps/default/config.h b/keyboards/idobo/keymaps/default/config.h new file mode 100644 index 0000000000..a3ed4f762a --- /dev/null +++ b/keyboards/idobo/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/idobo/keymaps/default/keymap.c b/keyboards/idobo/keymaps/default/keymap.c new file mode 100644 index 0000000000..f54e3359bb --- /dev/null +++ b/keyboards/idobo/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ortho_5x15( \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/idobo/keymaps/default/readme.md b/keyboards/idobo/keymaps/default/readme.md new file mode 100644 index 0000000000..577c62b51f --- /dev/null +++ b/keyboards/idobo/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for idobo diff --git a/keyboards/idobo/readme.md b/keyboards/idobo/readme.md new file mode 100644 index 0000000000..7f2c684464 --- /dev/null +++ b/keyboards/idobo/readme.md @@ -0,0 +1,17 @@ +# IDOBO + +![IDOBO](imgur.com image replace me!) + +75Keys Aluminum Mechanical Keyboard. + +Firmware here originally appeared on qmkeyboard.cn + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: IDOBO PCB +Hardware Availability: [IDOBO on Massdrop](https://www.massdrop.com/buy/xd75-aluminum-mechanical-keyboard) + +Make example for this keyboard (after setting up your build environment): + + make idobo:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/idobo/rules.mk b/keyboards/idobo/rules.mk new file mode 100644 index 0000000000..383a3594b4 --- /dev/null +++ b/keyboards/idobo/rules.mk @@ -0,0 +1,81 @@ +# MCU name +#MCU = at90usb1286 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From b3853e7d40528a2d5fbab940678ce75c70b4de6c Mon Sep 17 00:00:00 2001 From: Logan Huskins Date: Sat, 10 Nov 2018 10:21:24 -0600 Subject: [PATCH 0064/1763] Keymap: Add default keymap from web for 1up60hse (#4351) --- .../1up60hse/keymaps/default/config.h | 1 + .../1up60hse/keymaps/default/keymap.c | 43 +++++++++++-------- .../1up60hse/keymaps/default/readme.md | 6 +-- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h b/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h index a3ed4f762a..99a7005607 100644 --- a/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h +++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h @@ -1,4 +1,5 @@ /* Copyright 2018 MechMerlin + * Copyright 2018 Logan Huskins * * 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 diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c b/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c index 556246a3b2..1c168abf7d 100644 --- a/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c +++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c @@ -1,4 +1,5 @@ /* Copyright 2018 MechMerlin + * Copyright 2018 Logan Huskins * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,28 +18,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_60_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, - MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RGUI, KC_RCTL), + 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_SPC, + KC_RALT, KC_RGUI, MO(1), KC_LCTL + ), - [1] = LAYOUT_60_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_TRNS, - KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [1] = LAYOUT_60_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, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, + KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS, + KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, + KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS + ), [2] = LAYOUT_60_ansi( - RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_STEP, BL_DEC, BL_INC, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, RGB_SAI, RGB_HUD, RGB_HUI, RGB_MOD, RGB_TOG, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, RESET, BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, + RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, + 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) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ return true; } - diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md b/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md index a9afa5ea6d..a7041f37b2 100644 --- a/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md +++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md @@ -1,6 +1,4 @@ -# 1up60hse default keymap +# 1up60hse default keymap generated by QMK Configurator -This is the default keymap provided by [1upkeyboards](https://www.1upkeyboards.com). +This is the keymap used by [QMK Configurator](https://config.qmk.fm/#/1upkeyboards/1up60hse/LAYOUT_60_ansi) as default. -## Notes -- Software reset key is located on `Esc` on the third layer. From 3ba242cc3f5db93b14f0939f056e9aa759a43efe Mon Sep 17 00:00:00 2001 From: gorbachev Date: Sat, 10 Nov 2018 11:22:36 -0500 Subject: [PATCH 0065/1763] Keymap for random key presses for the scrabblepad (#4356) * Random key presses for scrabblepad * Fix keymap code comments * Remove unused methods as per code review --- keyboards/scrabblepad/keymaps/random/keymap.c | 75 +++++++++++++++++++ .../scrabblepad/keymaps/random/readme.md | 5 ++ 2 files changed, 80 insertions(+) create mode 100644 keyboards/scrabblepad/keymaps/random/keymap.c create mode 100644 keyboards/scrabblepad/keymaps/random/readme.md diff --git a/keyboards/scrabblepad/keymaps/random/keymap.c b/keyboards/scrabblepad/keymaps/random/keymap.c new file mode 100644 index 0000000000..8e78259661 --- /dev/null +++ b/keyboards/scrabblepad/keymaps/random/keymap.c @@ -0,0 +1,75 @@ +#include "scrabblepad.h" +#include + +static uint16_t keystroke; +static bool shift_pressed; + +static int lower = (int) KC_A; +static int upper = (int) KC_Z; + +uint16_t random_keycode(void) { + return lower + (rand() % (upper - lower + 1)); +}; + +enum custom_keycodes { + RND_KEY = SAFE_RANGE +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case RND_KEY: + if (record->event.pressed) { + keystroke = random_keycode(); + if (rand() % 2 > 0) { + shift_pressed = 1; + register_code(KC_LSHIFT); + } + register_code(keystroke); + } else { + if (shift_pressed > 0) { + unregister_code(KC_LSHIFT); + } + unregister_code(keystroke); + } + + return false; + + default: + return true; + } + + return true; +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT( /* Base */ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RESET, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \ + RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY +), +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/scrabblepad/keymaps/random/readme.md b/keyboards/scrabblepad/keymaps/random/readme.md new file mode 100644 index 0000000000..e719adaeb8 --- /dev/null +++ b/keyboards/scrabblepad/keymaps/random/readme.md @@ -0,0 +1,5 @@ +# Scrabblepad keymap with every key press random + +Every key produces a random key press, except the middle key, which is reserved for resetting the board. + +The random key press is selected between KC_A and KC_Z keycodes. From 408361402385ea938575956e9368b5f373edc629 Mon Sep 17 00:00:00 2001 From: yiancar Date: Sat, 10 Nov 2018 12:26:39 -0800 Subject: [PATCH 0066/1763] I2C driver docs (#4298) * I2C driver docs - Added I2C driver docs. - Changed arm master i2c driver to have a weak i2c_init as it is impossible to account for all possible port configuration in the STM32 world. * Update docs/i2c_driver.md Co-Authored-By: yiancar * Update docs/i2c_driver.md Co-Authored-By: yiancar * Update docs/i2c_driver.md Co-Authored-By: yiancar * Update docs/i2c_driver.md Co-Authored-By: yiancar * GPIO release fix --- docs/_sidebar.md | 1 + docs/_summary.md | 1 + docs/i2c_driver.md | 83 ++++++++++++++++++++++++++++++++++++++++ drivers/arm/i2c_master.c | 5 ++- 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 docs/i2c_driver.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 2c57380122..67e81422a1 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -79,6 +79,7 @@ * [Hand Wiring Guide](hand_wire.md) * [ISP Flashing Guide](isp_flashing_guide.md) * [ARM Debugging Guide](arm_debugging.md) + * [I2C Driver](i2c_driver.md) * For a Deeper Understanding * [How Keyboards Work](how_keyboards_work.md) diff --git a/docs/_summary.md b/docs/_summary.md index 2c57380122..67e81422a1 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -79,6 +79,7 @@ * [Hand Wiring Guide](hand_wire.md) * [ISP Flashing Guide](isp_flashing_guide.md) * [ARM Debugging Guide](arm_debugging.md) + * [I2C Driver](i2c_driver.md) * For a Deeper Understanding * [How Keyboards Work](how_keyboards_work.md) diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md new file mode 100644 index 0000000000..f69eb5a9da --- /dev/null +++ b/docs/i2c_driver.md @@ -0,0 +1,83 @@ +# I2C Master Driver + +The I2C Master drivers used in QMK have a set of common functions to allow portability between MCUs. + +## Available functions + +|Function |Description | +|------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +|`void i2c_init(void);` |Initializes the I2C driver. This function should be called once before any transaction is initiated. | +|`uint8_t i2c_start(uint8_t address);` |Starts an I2C transaction. Address is the 7-bit slave address without the direction bit. | +|`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. | +|`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. Returns status of transaction. | +|`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. | +|`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. | +|`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. | +|`uint8_t i2c_stop(uint16_t timeout);` |Stops the I2C driver. | + +### Function Return + +All the above functions, except `void i2c_init(void);` return the following truth table: + +|Return Value |Description | +|---------------|---------------------------------------------------| +|0 |Operation executed successfully. | +|-1 |Operation failed. | +|-2 |Operation timed out. | + + +## AVR + +### Configuration + +The following defines can be used to configure the I2C master driver. + +|Variable |Description |Default| +|------------------|---------------------------------------------------|-------| +|`#F_SCL` |Clock frequency in Hz |400KHz | +|`#Prescaler` |Divides master clock to aid in I2C clock selection |1 | + +AVRs usually have set GPIO which turn into I2C pins, therefore no further configuration is required. + +## ARM + +For ARM the Chibios I2C HAL driver is under the hood. +This section assumes an STM32 MCU. + +### Configuration + +The configuration for ARM MCUs can be quite complex as often there are multiple I2C drivers which can be assigned to a variety of ports. + +Firstly the `mcuconf.h` file must be setup to enable the necessary hardware drivers. + +|Variable |Description |Default| +|------------------------------|------------------------------------------------------------------------------------|-------| +|`#STM32_I2C_USE_XXX` |Enable/Disable the hardware driver XXX (each driver should be explicitly listed) |FALSE | +|`#STM32_I2C_BUSY_TIMEOUT` |Time in ms until the I2C command is aborted if no response is received |50 | +|`#STM32_I2C_XXX_IRQ_PRIORITY` |Interrupt priority for hardware driver XXX (THIS IS AN EXPERT SETTING) |10 | +|`#STM32_I2C_USE_DMA` |Enable/Disable the ability of the MCU to offload the data transfer to the DMA unit |TRUE | +|`#STM32_I2C_XXX_DMA_PRIORITY` |Priority of DMA unit for hardware driver XXX (THIS IS AN EXPERT SETTING) |1 | + +Secondly, in the `halconf.h` file, `#define HAL_USE_I2C` must be set to `TRUE`. This allows ChibiOS to load its I2C driver. + +Lastly, we need to assign the correct GPIO pins depending on the I2C hardware driver we want to use. + +By default the I2C1 hardware driver is assumed to be used. If another hardware driver is used, `#define I2C_DRIVER I2CDX` should be added to the `config.h` file with X being the number of hardware driver used. For example is I2C3 is enabled, the `config.h` file should contain `#define I2C_DRIVER I2CD3`. This aligns the QMK I2C driver with the Chibios I2C driver. + +STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. + +This can be changed by declaring the `i2c_init` function which intentionally has a weak attribute. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function: + +```C +void i2c_init(void) +{ + setPinInput(B6); // Try releasing special pins for a short time + setPinInput(B7); + chThdSleepMilliseconds(10); // Wait for the release to happen + + palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B6 to I2C function + palSetPadMode(GPIOB, 7, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B7 to I2C function +} +``` + + diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c index 2a7badd351..de58438392 100644 --- a/drivers/arm/i2c_master.c +++ b/drivers/arm/i2c_master.c @@ -26,6 +26,7 @@ */ #include "i2c_master.h" +#include "quantum.h" #include #include @@ -41,9 +42,11 @@ static const I2CConfig i2cconfig = { 0 }; +__attribute__ ((weak)) void i2c_init(void) { - palSetGroupMode(GPIOB, GPIOB_PIN6 | GPIOB_PIN7, 0, PAL_MODE_INPUT); // Try releasing special pins for a short time + setPinInput(B6); // Try releasing special pins for a short time + setPinInput(B7); chThdSleepMilliseconds(10); palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); From 6274980e6188c6f074e51b6655afd9efa991863e Mon Sep 17 00:00:00 2001 From: Yan-Fa Li Date: Sun, 11 Nov 2018 19:54:10 -0800 Subject: [PATCH 0067/1763] Improve new_project script (#4373) * Improve new_project script - use git user.name if available to replace the boilerplate name in files we generate - fix shellshock warnings * Test for git repo Suggestion by @skullydazed * Fix shellshock warning * Incorporate feedback from reviewers - thanks @vomindoraan - use a heredoc instead of echo for console - factor out common paths --- util/new_project.sh | 51 ++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/util/new_project.sh b/util/new_project.sh index a85e833222..d1d1ed82ca 100755 --- a/util/new_project.sh +++ b/util/new_project.sh @@ -14,7 +14,7 @@ elif [ -z "$KEYBOARD_TYPE" ]; then KEYBOARD_TYPE=avr fi -if [ $KEYBOARD_TYPE != "avr" -a $KEYBOARD_TYPE != "ps2avrgb" ]; then +if [ "$KEYBOARD_TYPE" != "avr" ] && [ "$KEYBOARD_TYPE" != "ps2avrgb" ]; then echo "Invalid keyboard type target" exit 1 fi @@ -24,22 +24,43 @@ if [ -e "keyboards/$1" ]; then exit 1 fi -cd "$(dirname "$0")/.." +cd "$(dirname "$0")/.." || exit -KEYBOARD_UPPERCASE=$(echo $1 | awk '{print toupper($0)}') -KEYBOARD_NAME=$(basename $1) -KEYBOARD_NAME_UPPERCASE=$(echo $KEYBOARD_NAME | awk '{print toupper($0)}') +KEYBOARD_NAME=$(basename "$1") +KEYBOARD_NAME_UPPERCASE=$(echo "$KEYBOARD_NAME" | awk '{print toupper($0)}') +NEW_KBD=keyboards/${KEYBOARD} -cp -r quantum/template/base keyboards/$KEYBOARD -cp -r quantum/template/$KEYBOARD_TYPE/. keyboards/$KEYBOARD +cp -r quantum/template/base "$NEW_KBD" +cp -r "quantum/template/$KEYBOARD_TYPE/." "$NEW_KBD" -mv keyboards/${KEYBOARD}/template.c keyboards/${KEYBOARD}/${KEYBOARD_NAME}.c -mv keyboards/${KEYBOARD}/template.h keyboards/${KEYBOARD}/${KEYBOARD_NAME}.h -find keyboards/${KEYBOARD} -type f -exec sed -i '' -e "s;%KEYBOARD%;${KEYBOARD_NAME};g" {} \; -find keyboards/${KEYBOARD} -type f -exec sed -i '' -e "s;%KEYBOARD_UPPERCASE%;${KEYBOARD_NAME_UPPERCASE};g" {} \; +mv "${NEW_KBD}/template.c" "${NEW_KBD}/${KEYBOARD_NAME}.c" +mv "${NEW_KBD}/template.h" "${NEW_KBD}/${KEYBOARD_NAME}.h" +find "${NEW_KBD}" -type f -exec sed -i '' -e "s;%KEYBOARD%;${KEYBOARD_NAME};g" {} \; +find "${NEW_KBD}" -type f -exec sed -i '' -e "s;%KEYBOARD_UPPERCASE%;${KEYBOARD_NAME_UPPERCASE};g" {} \; -echo "######################################################" -echo "# /keyboards/$KEYBOARD project created. To start" -echo "# working on things, cd into keyboards/$KEYBOARD" -echo "######################################################" +GIT=$(whereis git) +if [ "$GIT" != "" ]; then + IS_GIT_REPO=$($GIT log >>/dev/null 2>&1; echo $?) + if [ "$IS_GIT_REPO" -eq 0 ]; then + ID="'$($GIT config --get user.name)'" + echo "Using $ID as user name" + + for i in "$NEW_KBD/config.h" \ + "$NEW_KBD/$KEYBOARD_NAME.c" \ + "$NEW_KBD/$KEYBOARD_NAME.h" \ + "$NEW_KBD/keymaps/default/config.h" \ + "$NEW_KBD/keymaps/default/keymap.c" + do + awk -v id="$ID" '{sub(/REPLACE_WITH_YOUR_NAME/,id); print}' < "$i" > "$i.$$" + mv "$i.$$" "$i" + done + fi +fi + +cat <<-EOF +###################################################### +# $NEW_KBD project created. To start +# working on things, cd into $NEW_KBD +###################################################### +EOF From b49fd46eaaba5efe3231e6a1019af5c16558a057 Mon Sep 17 00:00:00 2001 From: Paco Date: Mon, 12 Nov 2018 14:58:07 -0500 Subject: [PATCH 0068/1763] Add support for slackware distribution (linux_install.sh) (#4369) * Add support for slackware distribution (linux_install.sh) The required packages are not provided by the official repository. The packages need to be installed from slackbuilds.org either manually or with the help of third party tools like sbotools. * Modify linux_install.sh according to code review Modifies the Slackware section of the linux_install.sh script based on the suggestions from the code review. * Modify utils/linux_install.sh according to suggestions --- util/linux_install.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/util/linux_install.sh b/util/linux_install.sh index 8dc28be6ef..971d4c543c 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -4,6 +4,8 @@ GENTOO_WARNING="This script will make a USE change in order to ensure that that QMK works on your system. All changes will be sent to the the file /etc/portage/package.use/qmk_firmware -- please review it, and read Portage's output carefully before installing any packages on your system. You will also need to ensure that your kernel is compiled with support for the keyboard chip that you are using (e.g. enable Arduino for the Pro Micro). Further information can be found on the Gentoo wiki." +SLACKWARE_WARNING="You will need the following packages from slackbuilds.org:\n\tarm-binutils\n\tarm-gcc\n\tavr-binutils\n\tavr-gcc\n\tavr-libc\n\tavrdude\n\tdfu-programmer\n\tdfu-util\n\tnewlib\nThese packages will be installed with sudo and sboinstall, so ensure that your user is added to sudoers and that sboinstall is configured." + if grep ID /etc/os-release | grep -qE "fedora"; then sudo dnf install \ arm-none-eabi-binutils-cs \ @@ -126,6 +128,26 @@ elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then wget \ zip +elif grep ID /etc/os-release | grep -q slackware; then + printf "$SLACKWARE_WARNING\n" + printf "\nProceed (y/N)? " + read -r answer + if echo "$answer" | grep -iq "^y" ;then + sudo sboinstall \ + avr-binutils \ + avr-gcc \ + avr-libc \ + avrdude \ + dfu-programmer \ + dfu-util \ + arm-binutils \ + arm-gcc \ + newlib + echo "Done!" + else + echo "Quitting..." + fi + else echo "Sorry, we don't recognize your OS. Help us by contributing support!" echo From 746005acba3a3522eaa2bf1c8014644e1a60c5df Mon Sep 17 00:00:00 2001 From: zvecr Date: Mon, 12 Nov 2018 20:00:45 +0000 Subject: [PATCH 0069/1763] Keyboard: Initial 25 port (#4394) * Initial 25 port * Initial 25 port - fix info.json and hand_swap_config * Review comments - fix layout macros, copyright comments, and duplicated use of layering macros --- keyboards/40percentclub/25/25.c | 60 +++++ keyboards/40percentclub/25/25.h | 85 +++++++ keyboards/40percentclub/25/config.h | 230 ++++++++++++++++++ keyboards/40percentclub/25/info.json | 29 +++ .../40percentclub/25/keymaps/default/config.h | 19 ++ .../40percentclub/25/keymaps/default/keymap.c | 87 +++++++ .../25/keymaps/default/readme.md | 1 + .../40percentclub/25/keymaps/macro/config.h | 19 ++ .../40percentclub/25/keymaps/macro/keymap.c | 42 ++++ .../40percentclub/25/keymaps/macro/readme.md | 1 + keyboards/40percentclub/25/readme.md | 18 ++ keyboards/40percentclub/25/rules.mk | 85 +++++++ 12 files changed, 676 insertions(+) create mode 100644 keyboards/40percentclub/25/25.c create mode 100644 keyboards/40percentclub/25/25.h create mode 100644 keyboards/40percentclub/25/config.h create mode 100644 keyboards/40percentclub/25/info.json create mode 100644 keyboards/40percentclub/25/keymaps/default/config.h create mode 100644 keyboards/40percentclub/25/keymaps/default/keymap.c create mode 100644 keyboards/40percentclub/25/keymaps/default/readme.md create mode 100644 keyboards/40percentclub/25/keymaps/macro/config.h create mode 100644 keyboards/40percentclub/25/keymaps/macro/keymap.c create mode 100644 keyboards/40percentclub/25/keymaps/macro/readme.md create mode 100644 keyboards/40percentclub/25/readme.md create mode 100644 keyboards/40percentclub/25/rules.mk diff --git a/keyboards/40percentclub/25/25.c b/keyboards/40percentclub/25/25.c new file mode 100644 index 0000000000..54a42d263c --- /dev/null +++ b/keyboards/40percentclub/25/25.c @@ -0,0 +1,60 @@ +/* Copyright 2018 + * + * 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 . + */ +#include "25.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 + + led_set_user(usb_led); +} + +#ifdef SWAP_HANDS_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, + {{4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}}, + {{4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}}, + {{4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8}}, + {{4, 9}, {3, 9}, {2, 9}, {1, 9}, {0, 9}}, + + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}}, + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}}, +}; +#endif diff --git a/keyboards/40percentclub/25/25.h b/keyboards/40percentclub/25/25.h new file mode 100644 index 0000000000..db9c48b524 --- /dev/null +++ b/keyboards/40percentclub/25/25.h @@ -0,0 +1,85 @@ +/* Copyright 2018 + * + * 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 . + */ +#pragma once + +#include "quantum.h" +#define ___ KC_NO + +#ifndef FLIP_HALF +#define LAYOUT_ortho_5x10( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \ + L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \ + L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, L31, L32, L33, L34 }, \ + { L40, L41, L42, L43, L44 }, \ + { R04, R03, R02, R01, R00 }, \ + { R14, R13, R12, R11, R10 }, \ + { R24, R23, R22, R21, R20 }, \ + { R34, R33, R32, R31, R30 }, \ + { R44, R43, R42, R41, R40 } \ +} +#else +#define LAYOUT_ortho_5x10( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \ + L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \ + L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, L31, L32, L33, L34 }, \ + { L40, L41, L42, L43, L44 }, \ + { R00, R01, R02, R03, R04 }, \ + { R10, R11, R12, R13, R14 }, \ + { R20, R21, R22, R23, R24 }, \ + { R30, R31, R32, R33, R34 }, \ + { R40, R41, R42, R43, R44 } \ +} +#endif + +#define LAYOUT_ortho_5x5( \ + L00, L01, L02, L03, L04, \ + L10, L11, L12, L13, L14, \ + L20, L21, L22, L23, L24, \ + L30, L31, L32, L33, L34, \ + L40, L41, L42, L43, L44 \ +) { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, L31, L32, L33, L34 }, \ + { L40, L41, L42, L43, L44 }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ }, \ + { ___, ___, ___, ___, ___ } \ +} + +#define LAYOUT_macro LAYOUT_ortho_5x5 +#define LAYOUT_split LAYOUT_ortho_5x10 + +#ifdef USE_I2C + #error "I2C not Supported" +#endif diff --git a/keyboards/40percentclub/25/config.h b/keyboards/40percentclub/25/config.h new file mode 100644 index 0000000000..23b768e153 --- /dev/null +++ b/keyboards/40percentclub/25/config.h @@ -0,0 +1,230 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x0F25 +#define MANUFACTURER di0ib +#define PRODUCT The 5x5 Keyboard +#define DESCRIPTION A split 50 key keyboard + +#define USE_SERIAL + +/* Select hand configuration */ +#define MASTER_LEFT +//#define MASTER_RIGHT +//#define EE_HANDS + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 5*2 +#define MATRIX_COLS 5 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + +// #define RGB_DI_PIN E2 +// #ifdef RGB_DI_PIN +// #define RGBLIGHT_ANIMATIONS +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ diff --git a/keyboards/40percentclub/25/info.json b/keyboards/40percentclub/25/info.json new file mode 100644 index 0000000000..abb77a0677 --- /dev/null +++ b/keyboards/40percentclub/25/info.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "foobar", + "url": "", + "maintainer": "qmk", + "width": 6, + "height": 2, + "layouts": { + "LAYOUT_macro": { + "key_count": 15, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, + {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, + {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, + {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4} + ] + }, + "LAYOUT_split": { + "key_count": 30, + "layout": [ + {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, + {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, + {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, + {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, + {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4} + ] + } + } +} diff --git a/keyboards/40percentclub/25/keymaps/default/config.h b/keyboards/40percentclub/25/keymaps/default/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/40percentclub/25/keymaps/default/keymap.c b/keyboards/40percentclub/25/keymaps/default/keymap.c new file mode 100644 index 0000000000..ccb54c82a1 --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/default/keymap.c @@ -0,0 +1,87 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _LOWER 1 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Qwerty + * ,---------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + * |------+------+------+------+------+------+------+------+------+------| + * | Q | W | E | R | T | Y | U | I | O | P | + * |------+------+------+------+-------------+------+------+------+------| + * | A | S | D | F | G | H | J | K | L | Bksp | + * |------+------+------+------+------|------+------+------+------+------| + * | Z | X | C | V | B | N | M | , | . |Enter | + * |------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |Lower |Space | Shift| Left | Down | Up |Right | + * `---------------------------------------------------------------------' + */ + [_QWERTY] = LAYOUT_split( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC, \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT, \ + KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_LSFT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + ), + + /* Lower + * ,---------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | ` | / | _ | + | + * |------+------+------+------+------|------+------+------+------+------| + * | F7 | F8 | F9 | F10 | F11 | F12 | ~ | [ | ] | \ | + * |------+------+------+------+-------------+------+------+------+------| + * | Esc | | | | | | | ; | " | Del | + * |------+------+------+------+------|------+------+------+------+------| + * | Tab | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------| + * | | | | | | | Home | PgDn | PgUp | End | + * `---------------------------------------------------------------------' + */ + [_LOWER] = LAYOUT_split( \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_GRV, KC_SLSH, KC_UNDS, KC_PLUS, \ + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TILD, KC_LBRC, KC_RBRC, KC_PIPE, \ + KC_ESC, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, KC_DEL, \ + KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/40percentclub/25/keymaps/default/readme.md b/keyboards/40percentclub/25/keymaps/default/readme.md new file mode 100644 index 0000000000..7558c42ec5 --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default split keymap for 25 diff --git a/keyboards/40percentclub/25/keymaps/macro/config.h b/keyboards/40percentclub/25/keymaps/macro/config.h new file mode 100644 index 0000000000..6173b63272 --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/macro/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/40percentclub/25/keymaps/macro/keymap.c b/keyboards/40percentclub/25/keymaps/macro/keymap.c new file mode 100644 index 0000000000..80d227710b --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/macro/keymap.c @@ -0,0 +1,42 @@ +/* Copyright 2018 + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_macro( + KC_ESC, KC_1, KC_2, KC_3, KC_4, \ + KC_GRV, KC_Q, KC_W, KC_E, KC_R, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC \ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/40percentclub/25/keymaps/macro/readme.md b/keyboards/40percentclub/25/keymaps/macro/readme.md new file mode 100644 index 0000000000..6645f93dd8 --- /dev/null +++ b/keyboards/40percentclub/25/keymaps/macro/readme.md @@ -0,0 +1 @@ +# The default macro keymap for 25 diff --git a/keyboards/40percentclub/25/readme.md b/keyboards/40percentclub/25/readme.md new file mode 100644 index 0000000000..b1685b618d --- /dev/null +++ b/keyboards/40percentclub/25/readme.md @@ -0,0 +1,18 @@ +# 25 + +![25](https://2.bp.blogspot.com/-lBK_ZlB3a9Q/WcAM0B_vwdI/AAAAAAACDgs/qnI9YB53pzck4Bw0v5QRvypDMs80CxWVQCLcBGAs/s640/IMG_0695.JPG) +=== + +Split 50 key keyboard - it is the largest keybad that fits within the 100mm x 100mm PCB size. Can be used together as a split keyboard or as a single 25 key macropad. + +* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/25) + +Keyboard Maintainer: QMK Community +Hardware Supported: 25 PCB +Hardware Availability: [25 project on 40% Keyboards](http://www.40percent.club/2017/09/25.html) + +Make example for this keyboard (after setting up your build environment): + + make 40percentclub/25:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/40percentclub/25/rules.mk b/keyboards/40percentclub/25/rules.mk new file mode 100644 index 0000000000..bfcdce7c99 --- /dev/null +++ b/keyboards/40percentclub/25/rules.mk @@ -0,0 +1,85 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = lite # 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 = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +# Enable generic behavior for split boards +SPLIT_KEYBOARD = yes + +LAYOUTS = ortho_5x5 ortho_5x10 From b173c05cc25e9394c6e50081c1af707443950104 Mon Sep 17 00:00:00 2001 From: zvecr Date: Mon, 12 Nov 2018 20:02:28 +0000 Subject: [PATCH 0070/1763] Tidy 40percentclub boards (#4403) * Remove unnecessary re-definitions for XXXXXXX and _______ * Update 6lit to use KC_NO in layout macros * Update rules.mk to follow current template * Remove use of deprecated function action_get_macro - unused and contents were from old template * Remove use of deprecated function action_get_macro - all code was commented out * Remove use of deprecated function action_get_macro - convert macro to use process_record_user * Convert keymap to consistent use of _______ * fix use of old style header guards * Swap KC_NO for XXXXXXX macro since the swap to the macro for KC_TRANS * Resolve use of ?= in rules.mk files * Remove duplication of rules.mk and config.h in gherkin mjt keymap * Remove unnecessary #includes * Align layout macros so foobar can use gherkin keymaps * Align 6lit layout macros with foobar * Remove ifndef QUANTUM_DIR from keymaps --- keyboards/40percentclub/4x4/4x4.h | 6 +- .../4x4/keymaps/default/keymap.c | 22 +-- keyboards/40percentclub/4x4/rules.mk | 32 ++-- keyboards/40percentclub/5x5/5x5.h | 6 +- .../5x5/keymaps/default/keymap.c | 24 +-- keyboards/40percentclub/5x5/rules.mk | 33 ++-- keyboards/40percentclub/6lit/6lit.h | 13 +- keyboards/40percentclub/foobar/foobar.h | 9 +- .../foobar/keymaps/default/keymap.c | 1 - keyboards/40percentclub/foobar/rules.mk | 2 + keyboards/40percentclub/gherkin/config.h | 5 +- keyboards/40percentclub/gherkin/gherkin.h | 5 +- .../gherkin/keymaps/bbaserdem/config.h | 6 +- .../gherkin/keymaps/bbaserdem/rules.mk | 4 - .../gherkin/keymaps/default/keymap.c | 11 -- .../gherkin/keymaps/itsaferbie/config.h | 7 +- .../gherkin/keymaps/itsaferbie/keymap.c | 31 ++-- .../gherkin/keymaps/itsaferbie/rules.mk | 4 - .../gherkin/keymaps/mjt/config.h | 168 +----------------- .../gherkin/keymaps/mjt/keymap.c | 29 --- .../gherkin/keymaps/mjt/rules.mk | 31 +--- .../gherkin/keymaps/steno/config.h | 7 +- .../gherkin/keymaps/steno/rules.mk | 8 +- .../gherkin/keymaps/talljoe-gherkin/config.h | 7 +- .../gherkin/keymaps/talljoe-gherkin/keymap.c | 2 - .../gherkin/keymaps/talljoe-gherkin/rules.mk | 4 - keyboards/40percentclub/gherkin/rules.mk | 39 ++-- keyboards/40percentclub/luddite/rules.mk | 39 ++-- keyboards/40percentclub/mf68/config.h | 5 +- .../mf68/keymaps/default/keymap.c | 15 -- .../mf68/keymaps/factory/keymap.c | 15 -- keyboards/40percentclub/mf68/mf68.h | 5 +- keyboards/40percentclub/mf68/rules.mk | 54 +++--- keyboards/40percentclub/mf68_ble/config.h | 5 +- .../mf68_ble/keymaps/default/keymap.c | 15 -- keyboards/40percentclub/mf68_ble/mf68_ble.h | 5 +- keyboards/40percentclub/mf68_ble/rules.mk | 54 +++--- keyboards/40percentclub/nano/config.h | 5 +- .../nano/keymaps/default/keymap.c | 1 - .../nano/keymaps/spooka/keymap.c | 2 - keyboards/40percentclub/nano/nano.h | 5 +- keyboards/40percentclub/nano/rules.mk | 34 ++-- keyboards/40percentclub/tomato/config.h | 5 +- .../tomato/keymaps/default/keymap.c | 39 ++-- keyboards/40percentclub/tomato/rules.mk | 32 +++- keyboards/40percentclub/tomato/tomato.h | 5 +- keyboards/40percentclub/ut47/config.h | 5 +- .../ut47/keymaps/default/config.h | 5 +- .../ut47/keymaps/default/keymap.c | 1 - .../ut47/keymaps/non-us/config.h | 5 +- .../ut47/keymaps/non-us/keymap.c | 1 - .../ut47/keymaps/nordic/keymap.c | 1 - .../40percentclub/ut47/keymaps/rgb/config.h | 5 +- .../40percentclub/ut47/keymaps/rgb/keymap.c | 1 - keyboards/40percentclub/ut47/rules.mk | 31 +++- keyboards/40percentclub/ut47/ut47.h | 5 +- 56 files changed, 299 insertions(+), 617 deletions(-) diff --git a/keyboards/40percentclub/4x4/4x4.h b/keyboards/40percentclub/4x4/4x4.h index ec75c3e280..8cc5a150aa 100644 --- a/keyboards/40percentclub/4x4/4x4.h +++ b/keyboards/40percentclub/4x4/4x4.h @@ -1,6 +1,4 @@ - -#ifndef FOURX4_H -#define FOURX4_H +#pragma once #include "quantum.h" #define ___ KC_NO @@ -58,5 +56,3 @@ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f }, \ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \ } - -#endif diff --git a/keyboards/40percentclub/4x4/keymaps/default/keymap.c b/keyboards/40percentclub/4x4/keymaps/default/keymap.c index 144ec05c17..1f52b20667 100644 --- a/keyboards/40percentclub/4x4/keymaps/default/keymap.c +++ b/keyboards/40percentclub/4x4/keymaps/default/keymap.c @@ -6,9 +6,6 @@ #define NUM 2 #define DIR 3 -// Readability keycodes -#define _______ KC_TRNS - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Single 4x4 board only @@ -65,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [NUM] = LAYOUT_ortho_4x16( _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, _______, - _______, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______, + _______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______, _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -90,23 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; - -const uint16_t PROGMEM fn_actions[] = { - -}; - - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - (void)event; - - switch (id) { - - } - return MACRO_NONE; -} - - void matrix_init_user(void) { } diff --git a/keyboards/40percentclub/4x4/rules.mk b/keyboards/40percentclub/4x4/rules.mk index d572e72444..a513357988 100644 --- a/keyboards/40percentclub/4x4/rules.mk +++ b/keyboards/40percentclub/4x4/rules.mk @@ -36,24 +36,30 @@ 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 -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID BOOTLOADER = caterina + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) @@ -68,7 +74,7 @@ UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches -HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) #FIXME: Community keymap build are currently failing due to missing functionality #LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16 diff --git a/keyboards/40percentclub/5x5/5x5.h b/keyboards/40percentclub/5x5/5x5.h index 45fb80a4f7..182e9e8190 100644 --- a/keyboards/40percentclub/5x5/5x5.h +++ b/keyboards/40percentclub/5x5/5x5.h @@ -1,6 +1,4 @@ - -#ifndef FIVEX5_H -#define FIVEX5_H +#pragma once #include "quantum.h" #define ___ KC_NO @@ -53,5 +51,3 @@ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e} \ } - -#endif diff --git a/keyboards/40percentclub/5x5/keymaps/default/keymap.c b/keyboards/40percentclub/5x5/keymaps/default/keymap.c index a2c525d089..56ddbb23f5 100644 --- a/keyboards/40percentclub/5x5/keymaps/default/keymap.c +++ b/keyboards/40percentclub/5x5/keymaps/default/keymap.c @@ -6,9 +6,6 @@ #define NUM 2 #define DIR 3 -// Readability keycodes -#define _______ KC_TRNS - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Single 5x5 board only @@ -74,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, - _______, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, + _______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______ ), @@ -102,25 +99,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -const uint16_t PROGMEM fn_actions[] = { - -}; - -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) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - void matrix_init_user(void) { diff --git a/keyboards/40percentclub/5x5/rules.mk b/keyboards/40percentclub/5x5/rules.mk index abc961a86f..ae04141269 100644 --- a/keyboards/40percentclub/5x5/rules.mk +++ b/keyboards/40percentclub/5x5/rules.mk @@ -36,24 +36,31 @@ 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 -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID BOOTLOADER = caterina + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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) +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) @@ -68,7 +75,7 @@ UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches -HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) #FIXME: Community keymap build are currently failing due to missing functionality #LAYOUTS = ortho_5x5 ortho_5x10 ortho_5x15 diff --git a/keyboards/40percentclub/6lit/6lit.h b/keyboards/40percentclub/6lit/6lit.h index ae0beea35d..af01d44c2a 100644 --- a/keyboards/40percentclub/6lit/6lit.h +++ b/keyboards/40percentclub/6lit/6lit.h @@ -16,10 +16,10 @@ #pragma once #include "quantum.h" -#define ________ KC_NO +#define ___ KC_NO #ifndef FLIP_HALF -#define LAYOUT_split( \ +#define LAYOUT_ortho_2x6( \ L00, L01, L02, R00, R01, R02, \ L10, L11, L12, R10, R11, R12 \ ) { \ @@ -29,7 +29,7 @@ { R12, R11, R10 }, \ } #else -#define LAYOUT_split( \ +#define LAYOUT_ortho_2x6( \ L00, L01, L02, R00, R01, R02, \ L10, L11, L12, R10, R11, R12 \ ) { \ @@ -40,15 +40,18 @@ } #endif -#define LAYOUT_macro( \ +#define LAYOUT_ortho_2x3( \ L00, L01, L02, \ L10, L11, L12 \ ) { \ { L00, L01, L02 }, \ { L10, L11, L12 }, \ + { ___, ___, ___ }, \ + { ___, ___, ___ }, \ } -#define LAYOUT LAYOUT_macro +#define LAYOUT_macro LAYOUT_ortho_2x3 +#define LAYOUT_split LAYOUT_ortho_2x6 #ifdef USE_I2C #error "I2C not Supported" diff --git a/keyboards/40percentclub/foobar/foobar.h b/keyboards/40percentclub/foobar/foobar.h index fc49c72aaf..8cf2e384ff 100644 --- a/keyboards/40percentclub/foobar/foobar.h +++ b/keyboards/40percentclub/foobar/foobar.h @@ -19,7 +19,7 @@ #define ___ KC_NO #ifndef FLIP_HALF -#define LAYOUT_split( \ +#define LAYOUT_ortho_3x10( \ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \ @@ -32,7 +32,7 @@ { R24, R23, R22, R21, R20 } \ } #else -#define LAYOUT_split( \ +#define LAYOUT_ortho_3x10( \ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \ @@ -46,7 +46,7 @@ } #endif -#define LAYOUT_macro( \ +#define LAYOUT_ortho_3x5( \ L00, L01, L02, L03, L04, \ L10, L11, L12, L13, L14, \ L20, L21, L22, L23, L24 \ @@ -59,7 +59,8 @@ { ___, ___, ___, ___, ___ } \ } -#define LAYOUT LAYOUT_macro +#define LAYOUT_macro LAYOUT_ortho_3x5 +#define LAYOUT_split LAYOUT_ortho_3x10 #ifdef USE_I2C #error "I2C not Supported" diff --git a/keyboards/40percentclub/foobar/keymaps/default/keymap.c b/keyboards/40percentclub/foobar/keymaps/default/keymap.c index b750c61851..774f1e8542 100644 --- a/keyboards/40percentclub/foobar/keymaps/default/keymap.c +++ b/keyboards/40percentclub/foobar/keymaps/default/keymap.c @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H -#define _______ KC_TRNS #define FN1_Q LT(1, KC_Q) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/40percentclub/foobar/rules.mk b/keyboards/40percentclub/foobar/rules.mk index 3275651650..155a7daacb 100644 --- a/keyboards/40percentclub/foobar/rules.mk +++ b/keyboards/40percentclub/foobar/rules.mk @@ -81,3 +81,5 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) # Enable generic behavior for split boards SPLIT_KEYBOARD = yes + +LAYOUTS = ortho_3x10 diff --git a/keyboards/40percentclub/gherkin/config.h b/keyboards/40percentclub/gherkin/config.h index 34f38e35c2..3ed638b66f 100644 --- a/keyboards/40percentclub/gherkin/config.h +++ b/keyboards/40percentclub/gherkin/config.h @@ -1,5 +1,4 @@ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -50,5 +49,3 @@ #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 #endif - -#endif diff --git a/keyboards/40percentclub/gherkin/gherkin.h b/keyboards/40percentclub/gherkin/gherkin.h index f8674be40e..70bffee302 100644 --- a/keyboards/40percentclub/gherkin/gherkin.h +++ b/keyboards/40percentclub/gherkin/gherkin.h @@ -1,5 +1,4 @@ -#ifndef GHERKIN_H -#define GHERKIN_H +#pragma once #include "quantum.h" @@ -14,5 +13,3 @@ { K30, K31, K32, K33, K34, K35 }, \ { K40, K41, K42, K43, K44, K45 } \ } - -#endif diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h index 37d7113e78..5c9ca52d75 100644 --- a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h +++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h @@ -1,7 +1,5 @@ -#ifndef CONFIG_KEYMAP_H -#define CONFIG_KEYMAP_H +#pragma once -#include "../../config.h" #define RGB_DI_PIN F6 #define RGBLED_NUM 10 #define RGBLIGHT_ANIMATIONS @@ -9,5 +7,3 @@ #undef BACKLIGHT_LEVELS #endif #define BACKLIGHT_LEVELS 3 - -#endif diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk index cd1cddebf4..07a20a4217 100644 --- a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk +++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk @@ -1,7 +1,3 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif - USER_NAME := bbaserdem-nouserspace STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER diff --git a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c index f018200304..ae6f158627 100644 --- a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c +++ b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c @@ -1,6 +1,5 @@ #include QMK_KEYBOARD_H -#define _______ KC_TRNS #define FN1_Q LT(1, KC_Q) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -19,16 +18,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - (void)event; - - switch (id) { - - } - return MACRO_NONE; -} - void matrix_init_user(void) { } diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h index 71c0cb8b56..6849bbdd2c 100644 --- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h +++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h @@ -1,7 +1,4 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" +#pragma once #undef RGB_DI_PIN #undef RGBLED_NUM @@ -11,5 +8,3 @@ #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 - -#endif \ No newline at end of file diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c index 580b041c9c..950b6e86b9 100644 --- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c +++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c @@ -12,10 +12,9 @@ enum custom_keycodes { PS = SAFE_RANGE, AI, PR, + MACRO_0, }; -#define _______ KC_TRNS - #define PS TO(0) #define AI TO(1) #define PR TO(2) @@ -72,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Illustrator layer [_AI] = LAYOUT_ortho_3x10( - _______, M(0), RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS, + _______, MACRO_0, RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS, _______, _______, _______, KC_E, _______, _______, _______, SHAPE, KC_O, OPEN, _______, _______, _______, _______, _______, _______, _______, KC_M, KC_SLSH, PR ), @@ -133,20 +132,14 @@ void matrix_scan_user(void) { #endif } -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - (void)event; - - switch (id) { - case 0: - // Save for Web Macro. - return MACRO(D(LSFT), D(LALT), D(LCTL), T(S), U(LCTL), U(LALT), U(LSFT), END); - } - return MACRO_NONE; -} - bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - } - return true; -} + if (record->event.pressed) { + switch(keycode) { + case MACRO_0: + // Save for Web Macro. + SEND_STRING(SS_LSFT(SS_LALT(SS_LCTRL("s")))); + return false; + } + } + return true; +}; diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk index ed0af7b8bd..b359ca2874 100644 --- a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk +++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk @@ -1,7 +1,3 @@ BACKLIGHT_ENABLE = yes AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h index bb59ec213d..9fe94bcd21 100644 --- a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h +++ b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h @@ -1,169 +1,7 @@ -/* -Copyright 2012 Jun Wako - -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - -#include "config_common.h" +#pragma once /* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6060 -#define DEVICE_VER 0x0001 +#undef MANUFACTURER +#undef DESCRIPTION #define MANUFACTURER Some Guy -#define PRODUCT Gherkin #define DESCRIPTION 30 percent disaster - -/* key matrix size */ -#define MATRIX_ROWS 5 -#define MATRIX_COLS 6 - -/* - * 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) - * -*/ - -// These are with USB on the left. -// #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 } -// original from TMK: #define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 } -// #define MATRIX_COL_PINS { D0, D4, F6, D7, E6, B4 } - -// these are with USB on the right. -#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 } -#define MATRIX_COL_PINS { B4, E6, D7, F6, D4, D0 } - -#define UNUSED_PINS - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* 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 */ -#define BACKLIGHT_LEVELS 3 -#define BACKLIGHT_PIN B5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -#define AUDIO_VOICES - -/* - * 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 diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c index 2b4369c34f..2fd4c2a461 100644 --- a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c +++ b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c @@ -12,7 +12,6 @@ enum { TD_C_LALT = 2, TD_A_TAB = 3, TD_Q_ESC = 4, -// M(0) }; //Friendly Layer Names @@ -37,10 +36,6 @@ enum gherkin_keycodes { EXT_PLV }; -// Fillers to make layering more clear -#define _______ KC_TRNS -#define XXXXXXX KC_NO - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_ortho_3x10( TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, @@ -171,30 +166,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } - -/* -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - - switch (id) { - case 0: { - if (record->event.pressed) { - key_timer = timer_read(); // if the key is being pressed, we start the timer. - } - else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). - if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. - return MACRO( D(LSFT), END ); - } - else { - return MACRO( T(N), END ); - } - } - break; - } - } - return MACRO_NONE; -}*/ - void matrix_init_user(void) { #ifdef AUDIO_ENABLE startup_user(); diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk index afb93b674c..3a35ae3b30 100644 --- a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk +++ b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk @@ -1,29 +1,2 @@ -## not sure where this stuff goes ## -MCU = atmega32u4 -F_CPU = 16000000 -ARCH = AVR8 -F_USB = $(F_CPU) -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - -# 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 = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # 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 = no # Enable WS2812 RGB underlight. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -TAP_DANCE_ENABLE=yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif +AUDIO_ENABLE = yes # Audio output on port C6 +TAP_DANCE_ENABLE = yes diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/config.h b/keyboards/40percentclub/gherkin/keymaps/steno/config.h index abacefa01d..20a8f7844a 100644 --- a/keyboards/40percentclub/gherkin/keymaps/steno/config.h +++ b/keyboards/40percentclub/gherkin/keymaps/steno/config.h @@ -1,12 +1,7 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" +#pragma once #define NO_ACTION_LAYER #define NO_ACTION_TAPPING #define NO_ACTION_ONESHOT #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION - -#endif \ No newline at end of file diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk index fa813f2099..a6e76f7cf9 100644 --- a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk +++ b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk @@ -1,8 +1,4 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif - -STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER +STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = no # Mouse keys(+4700) @@ -13,4 +9,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no -RGBLIGHT_ENABLE = no \ No newline at end of file +RGBLIGHT_ENABLE = no diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h index 7fa3bf328e..271f48d001 100644 --- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h +++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h @@ -1,6 +1,3 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once -#include "../../config.h" - -#endif +// place overrides here diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c index ea2921924e..ca3da579a1 100644 --- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c +++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c @@ -4,8 +4,6 @@ #define ST_BOLT QK_STENO_BOLT #define ST_GEM QK_STENO_GEMINI -#define XXXXXXX KC_NO - enum keyboard_layers { _QWERTY, _RAISE, diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk index 02216ecb36..a64c606ae7 100644 --- a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk +++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk @@ -1,6 +1,2 @@ -ifndef QUANTUM_DIR - include ../../../../Makefile -endif - MOUSEKEY_ENABLE = no # Mouse keys(+4700) STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER diff --git a/keyboards/40percentclub/gherkin/rules.mk b/keyboards/40percentclub/gherkin/rules.mk index 416ca5e5f4..1e0b346417 100644 --- a/keyboards/40percentclub/gherkin/rules.mk +++ b/keyboards/40percentclub/gherkin/rules.mk @@ -33,25 +33,40 @@ ARCH = AVR8 # CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. F_USB = $(F_CPU) -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina - # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + # Build Options # comment out to disable the options. # BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality AUDIO_ENABLE = no RGBLIGHT_ENABLE = no diff --git a/keyboards/40percentclub/luddite/rules.mk b/keyboards/40percentclub/luddite/rules.mk index 2f7d847bf0..8dff21f9ab 100644 --- a/keyboards/40percentclub/luddite/rules.mk +++ b/keyboards/40percentclub/luddite/rules.mk @@ -33,25 +33,40 @@ ARCH = AVR8 # CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. F_USB = $(F_CPU) -# Bootloader -# This definition is optional, and if your keyboard supports multiple bootloaders of -# different sizes, comment this out, and the correct address will be loaded -# automatically (+60). See bootloader.mk for all options. -BOOTLOADER = caterina - # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + # Build Options # comment out to disable the options. # BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes diff --git a/keyboards/40percentclub/mf68/config.h b/keyboards/40percentclub/mf68/config.h index 07d787eacf..22d987e52c 100644 --- a/keyboards/40percentclub/mf68/config.h +++ b/keyboards/40percentclub/mf68/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -158,5 +157,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/40percentclub/mf68/keymaps/default/keymap.c b/keyboards/40percentclub/mf68/keymaps/default/keymap.c index 73045f3107..ae7e7297cb 100644 --- a/keyboards/40percentclub/mf68/keymaps/default/keymap.c +++ b/keyboards/40percentclub/mf68/keymaps/default/keymap.c @@ -51,18 +51,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ ) }; - -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) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboards/40percentclub/mf68/keymaps/factory/keymap.c b/keyboards/40percentclub/mf68/keymaps/factory/keymap.c index 0c5305e519..12032350cd 100644 --- a/keyboards/40percentclub/mf68/keymaps/factory/keymap.c +++ b/keyboards/40percentclub/mf68/keymaps/factory/keymap.c @@ -57,18 +57,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ ) }; - -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) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboards/40percentclub/mf68/mf68.h b/keyboards/40percentclub/mf68/mf68.h index a55c1d60b0..a34f9cde8d 100644 --- a/keyboards/40percentclub/mf68/mf68.h +++ b/keyboards/40percentclub/mf68/mf68.h @@ -1,5 +1,4 @@ -#ifndef MF68_H -#define MF68_H +#pragma once #include "quantum.h" @@ -36,5 +35,3 @@ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \ ) - -#endif diff --git a/keyboards/40percentclub/mf68/rules.mk b/keyboards/40percentclub/mf68/rules.mk index 9f6445686d..38c9f517b9 100644 --- a/keyboards/40percentclub/mf68/rules.mk +++ b/keyboards/40percentclub/mf68/rules.mk @@ -1,4 +1,3 @@ - # MCU name MCU = atmega32u4 @@ -15,7 +14,6 @@ MCU = atmega32u4 # software delays. F_CPU = 16000000 - # # LUFA specific # @@ -39,30 +37,42 @@ F_USB = $(F_CPU) 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 +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default -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 +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +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 -LAYOUTS = 68_ansi \ No newline at end of file +LAYOUTS = 68_ansi diff --git a/keyboards/40percentclub/mf68_ble/config.h b/keyboards/40percentclub/mf68_ble/config.h index 83c0a7a5ac..e7edd77fe6 100644 --- a/keyboards/40percentclub/mf68_ble/config.h +++ b/keyboards/40percentclub/mf68_ble/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -158,5 +157,3 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c index 73045f3107..ae7e7297cb 100644 --- a/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c +++ b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c @@ -51,18 +51,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ ) }; - -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) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboards/40percentclub/mf68_ble/mf68_ble.h b/keyboards/40percentclub/mf68_ble/mf68_ble.h index 8ef14c98d4..a34f9cde8d 100644 --- a/keyboards/40percentclub/mf68_ble/mf68_ble.h +++ b/keyboards/40percentclub/mf68_ble/mf68_ble.h @@ -1,5 +1,4 @@ -#ifndef MF68_BLE_H -#define MF68_BLE_H +#pragma once #include "quantum.h" @@ -36,5 +35,3 @@ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \ ) - -#endif diff --git a/keyboards/40percentclub/mf68_ble/rules.mk b/keyboards/40percentclub/mf68_ble/rules.mk index 07b59d7853..2ca811833c 100644 --- a/keyboards/40percentclub/mf68_ble/rules.mk +++ b/keyboards/40percentclub/mf68_ble/rules.mk @@ -1,4 +1,3 @@ - # MCU name MCU = atmega32u4 @@ -39,29 +38,42 @@ F_USB = $(F_CPU) 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 +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE ?= no # USB Nkey Rollover -BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default -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 -BLUETOOTH = AdafruitBLE \ No newline at end of file +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +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 + +BLUETOOTH = AdafruitBLE diff --git a/keyboards/40percentclub/nano/config.h b/keyboards/40percentclub/nano/config.h index 088fafcaa5..36840d2f6c 100644 --- a/keyboards/40percentclub/nano/config.h +++ b/keyboards/40percentclub/nano/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -41,5 +40,3 @@ along with this program. If not, see . #define DIODE_DIRECTION COL2ROW #define TAPPING_TERM 200 - -#endif diff --git a/keyboards/40percentclub/nano/keymaps/default/keymap.c b/keyboards/40percentclub/nano/keymaps/default/keymap.c index cd9d4549de..9ce282a28a 100644 --- a/keyboards/40percentclub/nano/keymaps/default/keymap.c +++ b/keyboards/40percentclub/nano/keymaps/default/keymap.c @@ -3,7 +3,6 @@ #define _MAIN 0 #define _FN 1 -#define _______ KC_TRNS #define KC_X0 LT(_FN, KC_ESC) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/40percentclub/nano/keymaps/spooka/keymap.c b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c index 63b90da09f..7908794fe0 100644 --- a/keyboards/40percentclub/nano/keymaps/spooka/keymap.c +++ b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c @@ -2,8 +2,6 @@ #define _MAIN 0 -#define _______ KC_TRNS - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_MAIN] = LAYOUT( RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, diff --git a/keyboards/40percentclub/nano/nano.h b/keyboards/40percentclub/nano/nano.h index 21d6c4f30c..ae297ac12e 100644 --- a/keyboards/40percentclub/nano/nano.h +++ b/keyboards/40percentclub/nano/nano.h @@ -1,5 +1,4 @@ -#ifndef NANO_H -#define NANO_H +#pragma once #include "quantum.h" @@ -10,5 +9,3 @@ { k01, k02, k03, k04 }, \ { k05, k06, k07, k08 } \ } - -#endif diff --git a/keyboards/40percentclub/nano/rules.mk b/keyboards/40percentclub/nano/rules.mk index dc510bc0d1..66ad3ffc66 100644 --- a/keyboards/40percentclub/nano/rules.mk +++ b/keyboards/40percentclub/nano/rules.mk @@ -1,7 +1,4 @@ -SRC = matrix.c - # MCU name -#MCU = at90usb1287 MCU = atmega32u4 # Processor frequency. @@ -40,16 +37,28 @@ F_USB = $(F_CPU) 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 +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = caterina + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# 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) @@ -67,4 +76,7 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +# custom matrix setup +SRC = matrix.c CUSTOM_MATRIX = yes diff --git a/keyboards/40percentclub/tomato/config.h b/keyboards/40percentclub/tomato/config.h index 185cb326cc..05c83c30cd 100644 --- a/keyboards/40percentclub/tomato/config.h +++ b/keyboards/40percentclub/tomato/config.h @@ -1,5 +1,4 @@ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -44,5 +43,3 @@ #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 - -#endif diff --git a/keyboards/40percentclub/tomato/keymaps/default/keymap.c b/keyboards/40percentclub/tomato/keymaps/default/keymap.c index 94bfca202b..01a868d7e3 100644 --- a/keyboards/40percentclub/tomato/keymaps/default/keymap.c +++ b/keyboards/40percentclub/tomato/keymaps/default/keymap.c @@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_ortho_3x10 ( KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 - , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + , _______,_______,_______,_______,KC_DEL, _______,_______,_______,_______,_______ ), /* Level 2: Symbols Layer * ,-------------------------------------------------------------------------------. @@ -51,8 +51,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ LAYOUT_ortho_3x10 ( KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN - , KC_F11, KC_F12,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_GRAVE - , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + , KC_F11, KC_F12,_______,_______,_______,_______,_______,_______,_______,KC_GRAVE + , _______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ), /* Level 3: RGB Layer * ,-------------------------------------------------------------------------------. @@ -64,9 +64,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * '-------------------------------------------------------------------------------' */ LAYOUT_ortho_3x10 - ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS - , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_COMM,KC_DOT, KC_SLSH,KC_SCLN,KC_QUOT - , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT + ( _______,_______,_______,_______,_______,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS + , KC_TAB, _______,_______,_______,_______,KC_COMM,KC_DOT, KC_SLSH,KC_SCLN,KC_QUOT + , _______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT ), /* Level 4: RGB Layer * ,-------------------------------------------------------------------------------. @@ -78,9 +78,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * '-------------------------------------------------------------------------------' */ LAYOUT_ortho_3x10 - ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE - , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LT, KC_GT, KC_QUES,KC_COLN,KC_DQUO - , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_PGUP,KC_PGDN,KC_END + ( _______,_______,_______,_______,_______,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE + , KC_TAB, _______,_______,_______,_______,KC_LT, KC_GT, KC_QUES,KC_COLN,KC_DQUO + , _______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ), /* Level 5: RGB Layer * ,-------------------------------------------------------------------------------. @@ -92,27 +92,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * '-------------------------------------------------------------------------------' */ LAYOUT_ortho_3x10 - ( KC_CALC,KC_WSCH,KC_MAIL,KC_MYCM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS - , RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,KC_NO, KC_NO, RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD - , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS + ( KC_CALC,KC_WSCH,KC_MAIL,KC_MYCM,_______,_______,_______,_______,_______,_______ + , RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,XXXXXXX,XXXXXXX,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD + , _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______ ), }; -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) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - } - return MACRO_NONE; -}; - void matrix_init_user(void) { } diff --git a/keyboards/40percentclub/tomato/rules.mk b/keyboards/40percentclub/tomato/rules.mk index cbb2b05196..844ff99827 100644 --- a/keyboards/40percentclub/tomato/rules.mk +++ b/keyboards/40percentclub/tomato/rules.mk @@ -37,21 +37,37 @@ F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT -# Boot Section Size in *bytes* +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID BOOTLOADER = caterina +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + # Build Options # comment out to disable the options. # BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no RGBLIGHT_ENABLE = yes diff --git a/keyboards/40percentclub/tomato/tomato.h b/keyboards/40percentclub/tomato/tomato.h index f8674be40e..70bffee302 100644 --- a/keyboards/40percentclub/tomato/tomato.h +++ b/keyboards/40percentclub/tomato/tomato.h @@ -1,5 +1,4 @@ -#ifndef GHERKIN_H -#define GHERKIN_H +#pragma once #include "quantum.h" @@ -14,5 +13,3 @@ { K30, K31, K32, K33, K34, K35 }, \ { K40, K41, K42, K43, K44, K45 } \ } - -#endif diff --git a/keyboards/40percentclub/ut47/config.h b/keyboards/40percentclub/ut47/config.h index 4335e3edd5..cd55e4d732 100644 --- a/keyboards/40percentclub/ut47/config.h +++ b/keyboards/40percentclub/ut47/config.h @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef CONFIG_H -#define CONFIG_H +#pragma once #include "config_common.h" @@ -83,5 +82,3 @@ along with this program. If not, see . # else # error "USART configuration is needed." #endif - -#endif diff --git a/keyboards/40percentclub/ut47/keymaps/default/config.h b/keyboards/40percentclub/ut47/keymaps/default/config.h index 46098a22fb..f88ebf7e80 100644 --- a/keyboards/40percentclub/ut47/keymaps/default/config.h +++ b/keyboards/40percentclub/ut47/keymaps/default/config.h @@ -14,11 +14,8 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once #include "config_common.h" // place overrides here - -#endif diff --git a/keyboards/40percentclub/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c index 6b6bb025b1..0fa7838dfd 100644 --- a/keyboards/40percentclub/ut47/keymaps/default/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/default/keymap.c @@ -18,7 +18,6 @@ #include "protocol/serial.h" #endif -#define _______ KC_TRNS #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/config.h b/keyboards/40percentclub/ut47/keymaps/non-us/config.h index 46098a22fb..f88ebf7e80 100644 --- a/keyboards/40percentclub/ut47/keymaps/non-us/config.h +++ b/keyboards/40percentclub/ut47/keymaps/non-us/config.h @@ -14,11 +14,8 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once #include "config_common.h" // place overrides here - -#endif diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c index 1cb537b7d0..0c1c2e7599 100644 --- a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c @@ -18,7 +18,6 @@ #include "protocol/serial.h" #endif -#define _______ KC_TRNS #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c index cc3f43650e..f3e297ec03 100644 --- a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c @@ -21,7 +21,6 @@ #include "keymap_norwegian.h" -#define _______ KC_TRNS #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) #define CTRADEL LALT(LCTL(KC_DEL)) diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/config.h b/keyboards/40percentclub/ut47/keymaps/rgb/config.h index 0eb010a3ae..791147b5bf 100644 --- a/keyboards/40percentclub/ut47/keymaps/rgb/config.h +++ b/keyboards/40percentclub/ut47/keymaps/rgb/config.h @@ -14,8 +14,7 @@ * along with this program. If not, see . */ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once #include "config_common.h" @@ -23,5 +22,3 @@ #define RGBLIGHT_ANIMATIONS #define RGB_DI_PIN D3 // The pin the LED strip is connected to #define RGBLED_NUM 7 // Number of LEDs in your strip - -#endif diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c index 58d11031ad..77fa5b4017 100644 --- a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c @@ -18,7 +18,6 @@ #include "protocol/serial.h" #endif -#define _______ KC_TRNS #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk index b046598669..7495f5edda 100644 --- a/keyboards/40percentclub/ut47/rules.mk +++ b/keyboards/40percentclub/ut47/rules.mk @@ -1,5 +1,4 @@ # MCU name -#MCU = at90usb1286 MCU = atmega32u4 # Processor frequency. @@ -38,12 +37,26 @@ F_USB = $(F_CPU) # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT -# Bootloader + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID BOOTLOADER = caterina -# custom matrix setup -CUSTOM_MATRIX = yes -SRC += matrix.c protocol/serial_uart.c + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 @@ -51,12 +64,12 @@ SRC += matrix.c protocol/serial_uart.c BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) +CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover +NKRO_ENABLE = yes # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode @@ -64,6 +77,10 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +# custom matrix setup +CUSTOM_MATRIX = yes +SRC += matrix.c protocol/serial_uart.c + ifeq ($(strip $(LED_ENABLE)), yes) OPT_DEFS += -DLED_ENABLE SRC += led.c diff --git a/keyboards/40percentclub/ut47/ut47.h b/keyboards/40percentclub/ut47/ut47.h index a4507dd34d..f6456fe911 100644 --- a/keyboards/40percentclub/ut47/ut47.h +++ b/keyboards/40percentclub/ut47/ut47.h @@ -13,8 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#ifndef UT47_H -#define UT47_H +#pragma once #include "quantum.h" @@ -45,5 +44,3 @@ ) #define LAYOUT_kc_ut47 LAYOUT_kc - -#endif From b26ccf9a2f7f070ee3a91456757dc463e46dfe10 Mon Sep 17 00:00:00 2001 From: Logan Bussell <36081148+lbussell@users.noreply.github.com> Date: Mon, 12 Nov 2018 15:04:12 -0500 Subject: [PATCH 0071/1763] Add rules.mk to ortho_4x12/buswerks keymap (#4405) * Added buswerks keymap * cleaned up comments on buswerks keymap * Added buswerks keymap readme.md * Fixed spelling in buswerks readme.md * Removed unnecessary includes, changed process_record_user to now use set_single_persistent_default_layer(), removed deprecated functions, and moved the audio ifdef block to config.h * Changed buswerks ortho_4x12 layout to accommodate 'MIT' layout * Updated README.md to reflect layout changes * update buswerks keymap * add buswerks tragicforce68 keymap --- .../tragicforce68/keymaps/buswerks/keymap.c | 60 +++++++++++++++++++ .../community/ortho_4x12/buswerks/keymap.c | 56 ++++++++++++----- .../community/ortho_4x12/buswerks/rules.mk | 9 +++ 3 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 keyboards/tragicforce68/keymaps/buswerks/keymap.c create mode 100644 layouts/community/ortho_4x12/buswerks/rules.mk diff --git a/keyboards/tragicforce68/keymaps/buswerks/keymap.c b/keyboards/tragicforce68/keymaps/buswerks/keymap.c new file mode 100644 index 0000000000..d74c0186d6 --- /dev/null +++ b/keyboards/tragicforce68/keymaps/buswerks/keymap.c @@ -0,0 +1,60 @@ +#include QMK_KEYBOARD_H + +#define _QWERTY 0 +#define _COLEMAK 1 +#define _FN1 2 + +#define WORD_L LALT(KC_LEFT) +#define WORD_R LALT(KC_RGHT) +#define LINE_L LGUI(KC_LEFT) +#define LINE_R LGUI(KC_RGHT) + +#define DESK_L LCTL(KC_LEFT) +#define DESK_R LCTL(KC_RGHT) +#define MSN_CTL LCTL(KC_UP) + +#define LT_FN LT(_FN1, KC_ESC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP, + //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘ + LT_FN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, + //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, + //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_CAPS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘ + ), + + [_COLEMAK] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP, + //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘ + LT_FN, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENTER, + //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐ + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, + //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_CAPS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘ + ), + + [_FN1] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐ + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, KC_HOME, + //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘ + _______, DESK_L, MSN_CTL, DESK_R, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, + //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐ + _______, _______, _______, _______, _______, _______, LINE_L, WORD_L, WORD_R, LINE_R, _______, _______, BL_INC, + //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐ + _______, _______, _______, KC_BSPC, _______, _______, KC_MENU, BL_BRTG, BL_DEC, BL_TOGG + //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘ + ) +}; \ No newline at end of file diff --git a/layouts/community/ortho_4x12/buswerks/keymap.c b/layouts/community/ortho_4x12/buswerks/keymap.c index c05c264183..72c592a0c3 100644 --- a/layouts/community/ortho_4x12/buswerks/keymap.c +++ b/layouts/community/ortho_4x12/buswerks/keymap.c @@ -7,6 +7,7 @@ extern keymap_config_t keymap_config; #define _DVORAK 2 #define _LOWER 3 #define _RAISE 4 +#define _MOUSE 5 #define _ADJUST 16 enum custom_keycodes { @@ -15,7 +16,7 @@ enum custom_keycodes { DVORAK, LOWER, RAISE, - NAV, + MOUSE, ADJUST, }; @@ -29,15 +30,26 @@ enum custom_keycodes { #define KC_LOWR LOWER #define KC_RASE RAISE #define KC_ADJ ADJUST +#define MOUSE TG(_MOUSE) #define DESK_L LCTL(KC_LEFT) #define DESK_R LCTL(KC_RGHT) #define MSN_CTL LCTL(KC_UP) #define APP_WND LCTL(KC_DOWN) +#define SWITCHR LGUI(KC_TAB) + +#define WORD_L LALT(KC_LEFT) +#define WORD_R LALT(KC_RGHT) +#define LINE_L LGUI(KC_LEFT) +#define LINE_R LGUI(KC_RGHT) + +#define COPY LGUI(KC_C) +#define CUT LGUI(KC_X) +#define PASTE LGUI(KC_V) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = LAYOUT_ortho_4x12( \ +[_QWERTY] = LAYOUT_ortho_4x12( // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------. KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I, KC_O , KC_P , KC_BSPC, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| @@ -45,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ + KC_LCTL, KC_HYPR, MOUSE , KC_LALT, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' ), @@ -57,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ + KC_LCTL, KC_HYPR, MOUSE , KC_LALT, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' ), @@ -69,38 +81,50 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ + KC_LCTL, KC_HYPR, MOUSE , KC_LALT, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' ), [_LOWER] = LAYOUT_ortho_4x12( \ // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------. - KC_TILD, _______, KC_VOLD, MSN_CTL, KC_VOLU, _______, _______, KC_7, KC_8, KC_9, KC_MINS, KC_BSPC, \ + SWITCHR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_7, KC_8, KC_9, KC_MINS, _______, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - _______, _______, DESK_L , APP_WND, DESK_R , _______, _______, KC_4, KC_5, KC_6, KC_PLUS, KC_PIPE, \ + KC_TILD, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_4, KC_5, KC_6, KC_PLUS, KC_PIPE, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - KC_LBRC, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_SLSH, KC_RBRC, \ + _______, _______, _______, KC_UNDS, KC_EQL, _______, _______, KC_1, KC_2, KC_3, _______, _______, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, _______, _______ \ // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' ), [_RAISE] = LAYOUT_ortho_4x12( \ // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------. - KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_DEL, \ + // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + _______, _______, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_BSLS, \ + // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, LINE_L, WORD_L, WORD_R, LINE_R, _______, _______, \ + // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT \ + // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' +), + +[_MOUSE] = LAYOUT_ortho_4x12( \ + // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------. + SWITCHR, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, KC_BSLS, \ + _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3, _______, _______, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - KC_LCBR, KC_CIRC, KC_ASTR, KC_UNDS, KC_EQL, KC_AMPR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, KC_RCBR, \ + _______, _______, _______, KC_WH_U, KC_WH_D, COPY, PASTE, KC_BTN4, KC_BTN5, _______, _______, _______, \ // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + _______, _______, MOUSE , _______, _______, KC_SPC, KC_SPC, KC_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \ // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------' ), [_ADJUST] = LAYOUT_ortho_4x12( \ - KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, \ - _______, _______, RESET, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, QWERTY, COLEMAK, DVORAK, RESET, _______, _______, _______, _______, AG_NORM, AG_SWAP, _______, \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, AU_OFF , AU_ON , _______, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) diff --git a/layouts/community/ortho_4x12/buswerks/rules.mk b/layouts/community/ortho_4x12/buswerks/rules.mk new file mode 100644 index 0000000000..72f8257322 --- /dev/null +++ b/layouts/community/ortho_4x12/buswerks/rules.mk @@ -0,0 +1,9 @@ +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 +TAP_DANCE_ENABLE = no +AUDIO_ENABLE = yes + +MACROS_ENABLED = no \ No newline at end of file From 2509039abfc5f59d791c8e061641b6fc2e63a69b Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Mon, 12 Nov 2018 12:02:51 +0000 Subject: [PATCH 0072/1763] Add missing arm gcc compiler for openSUSE 15.0 and Tumbleweed. --- util/linux_install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/util/linux_install.sh b/util/linux_install.sh index 971d4c543c..0e8296c0d2 100755 --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -112,12 +112,15 @@ elif grep ID /etc/os-release | grep -q sabayon; then elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then CROSS_AVR_GCC=cross-avr-gcc8 + CROSS_ARM_GCC=cross-arm-none-gcc8 if grep ID /etc/os-release | grep -q "15.0"; then CROSS_AVR_GCC=cross-avr-gcc7 + CROSS_ARM_GCC=cross-arm-none-gcc7 fi sudo zypper install \ avr-libc \ $CROSS_AVR_GCC \ + $CROSS_ARM_GCC \ cross-avr-binutils \ cross-arm-none-newlib-devel \ cross-arm-binutils cross-arm-none-newlib-devel \ From b1e74aee43596e2601248b0a78b2c54c897ce78b Mon Sep 17 00:00:00 2001 From: Michael Kaylan <1063516+kaylanm@users.noreply.github.com> Date: Mon, 12 Nov 2018 11:20:56 -0500 Subject: [PATCH 0073/1763] Make sure that avr-gcc@7 gets linked into the path on MacOS. --- docs/faq_build.md | 2 +- docs/getting_started_build_tools.md | 1 + util/macos_install.sh | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/faq_build.md b/docs/faq_build.md index 465a283aef..14c61a1e99 100644 --- a/docs/faq_build.md +++ b/docs/faq_build.md @@ -126,5 +126,5 @@ For now, you need to rollback avr-gcc to 7 in brew. ``` brew uninstall --force avr-gcc brew install avr-gcc@7 -brew link avr-gcc@7 +brew link --force avr-gcc@7 ``` diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md index 587dece4a1..67bbe54344 100644 --- a/docs/getting_started_build_tools.md +++ b/docs/getting_started_build_tools.md @@ -57,6 +57,7 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands: brew tap PX4/homebrew-px4 brew update brew install avr-gcc@7 + brew link --force avr-gcc@7 brew install dfu-programmer brew install dfu-util brew install gcc-arm-none-eabi diff --git a/util/macos_install.sh b/util/macos_install.sh index c31be99d22..d2629a8cb4 100755 --- a/util/macos_install.sh +++ b/util/macos_install.sh @@ -23,3 +23,4 @@ brew tap osx-cross/avr brew tap PX4/homebrew-px4 brew update brew install avr-gcc@7 gcc-arm-none-eabi dfu-programmer avrdude dfu-util +brew link --force avr-gcc@7 From aa03049015855cdd5f61e6e8a7c6955abc5d3141 Mon Sep 17 00:00:00 2001 From: comaid <44457151+comaid@users.noreply.github.com> Date: Tue, 13 Nov 2018 05:19:29 +0900 Subject: [PATCH 0074/1763] Fix up screen off timer of crkbd (#4346) * fix about screen off timer * Fix Up ScreenOffInterval exceeded uint16_t * Fix Up never waking up once screen off if in case of matrix are not dirty. * Revert "fix about screen off timer" This reverts commit 3d175f2340c14250a71af78afec5a1e890d9f4e7. * Fix up screen off timer of crkbd * Fix Up ScreenOffInterval exceeded uint16_t * Fix Up never waking up once screen off if in case of matrix are not dirty. * Fix up screen off timer of helix * Fix Up ScreenOffInterval exceeded uint16_t * Fix Up never waking up once screen off if in case of matrix are not dirty * Revert "Fix up screen off timer of helix" This reverts commit f0efb82443a7dc34b75579359b0514e8bfa51100. * Improve internal processing of process_record_kb() * Use the return value of process_record_gfx() * Fix a indent Fix a indent --- keyboards/crkbd/crkbd.c | 5 +++++ keyboards/crkbd/ssd1306.c | 16 ++++++++++++++-- keyboards/crkbd/ssd1306.h | 3 +++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/keyboards/crkbd/crkbd.c b/keyboards/crkbd/crkbd.c index 5e8ba8bacf..32f7af776e 100644 --- a/keyboards/crkbd/crkbd.c +++ b/keyboards/crkbd/crkbd.c @@ -1 +1,6 @@ #include "crkbd.h" +#include "ssd1306.h" + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + return process_record_gfx(keycode,record) && process_record_user(keycode, record); +} \ No newline at end of file diff --git a/keyboards/crkbd/ssd1306.c b/keyboards/crkbd/ssd1306.c index 205ce67a9e..4330c8497d 100644 --- a/keyboards/crkbd/ssd1306.c +++ b/keyboards/crkbd/ssd1306.c @@ -24,12 +24,17 @@ static const unsigned char font[] PROGMEM; //static uint16_t last_battery_update; //static uint32_t vbat; //#define BatteryUpdateInterval 10000 /* milliseconds */ -#define ScreenOffInterval 300000 /* milliseconds */ + +// 'last_flush' is declared as uint16_t, +// so this must be less than 65535 +#define ScreenOffInterval 60000 /* milliseconds */ #if DEBUG_TO_SCREEN static uint8_t displaying; #endif static uint16_t last_flush; +static bool force_dirty = true; + // Write command sequence. // Returns true on success. static inline bool _send_cmd1(uint8_t cmd) { @@ -321,12 +326,19 @@ void iota_gfx_task_user(void) { void iota_gfx_task(void) { iota_gfx_task_user(); - if (display.dirty) { + if (display.dirty|| force_dirty) { iota_gfx_flush(); + force_dirty = false; } if (timer_elapsed(last_flush) > ScreenOffInterval) { iota_gfx_off(); } } + +bool process_record_gfx(uint16_t keycode, keyrecord_t *record) { + force_dirty = true; + return true; +} + #endif diff --git a/keyboards/crkbd/ssd1306.h b/keyboards/crkbd/ssd1306.h index 76dd6a2a72..ea8c923280 100644 --- a/keyboards/crkbd/ssd1306.h +++ b/keyboards/crkbd/ssd1306.h @@ -3,6 +3,7 @@ #include #include #include "pincontrol.h" +#include "action.h" enum ssd1306_cmds { DisplayOff = 0xAE, @@ -86,3 +87,5 @@ void matrix_write(struct CharacterMatrix *matrix, const char *data); void matrix_write_ln(struct CharacterMatrix *matrix, const char *data); void matrix_write_P(struct CharacterMatrix *matrix, const char *data); void matrix_render(struct CharacterMatrix *matrix); + +bool process_record_gfx(uint16_t keycode, keyrecord_t *record); \ No newline at end of file From 2b7decbaeb020c5320ada182552e633deec77ff7 Mon Sep 17 00:00:00 2001 From: comaid <44457151+comaid@users.noreply.github.com> Date: Tue, 13 Nov 2018 05:20:50 +0900 Subject: [PATCH 0075/1763] Fix up screen off timer of helix (#4347) * Fix up screen off timer of helix * Fix Up ScreenOffInterval exceeded uint16_t * Fix Up never waking up once screen off if in case of matrix are not dirty * Changing referenIng incorrect constant name * OLED_ENABLED => SSD1306OLED * Improve internal processing of process_record_kb() * Use the return value of process_record_gfx() * Move a include statement into #ifdef block Move #include "ssd1306.h` statement into #ifdef block * Move process_record_kbI() Move process_record_kb() from helix.c to rev1.c/rev2.c/pico.c * Move process_record_kb() --- keyboards/helix/pico/pico.c | 6 ++++++ keyboards/helix/rev1/rev1.c | 6 ++++++ keyboards/helix/rev2/rev2.c | 6 ++++++ keyboards/helix/ssd1306.c | 17 +++++++++++++++-- keyboards/helix/ssd1306.h | 3 ++- 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/keyboards/helix/pico/pico.c b/keyboards/helix/pico/pico.c index 5e248ccffe..bb8ba9ca2b 100644 --- a/keyboards/helix/pico/pico.c +++ b/keyboards/helix/pico/pico.c @@ -2,6 +2,12 @@ #ifdef SSD1306OLED +#include "ssd1306.h" + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + return process_record_gfx(keycode,record) && process_record_user(keycode, record); +} + void led_set_kb(uint8_t usb_led) { // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here //led_set_user(usb_led); diff --git a/keyboards/helix/rev1/rev1.c b/keyboards/helix/rev1/rev1.c index d7ea9b7235..309cca010f 100644 --- a/keyboards/helix/rev1/rev1.c +++ b/keyboards/helix/rev1/rev1.c @@ -2,6 +2,12 @@ #ifdef SSD1306OLED +#include "ssd1306.h" + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + return process_record_gfx(keycode,record) && process_record_user(keycode, record); +} + void led_set_kb(uint8_t usb_led) { // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here led_set_user(usb_led); diff --git a/keyboards/helix/rev2/rev2.c b/keyboards/helix/rev2/rev2.c index 75765f1d35..abaa02cdb1 100644 --- a/keyboards/helix/rev2/rev2.c +++ b/keyboards/helix/rev2/rev2.c @@ -2,6 +2,12 @@ #ifdef SSD1306OLED +#include "ssd1306.h" + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + return process_record_gfx(keycode,record) && process_record_user(keycode, record); +} + void led_set_kb(uint8_t usb_led) { // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here //led_set_user(usb_led); diff --git a/keyboards/helix/ssd1306.c b/keyboards/helix/ssd1306.c index b3e55a67c2..dd3290ba0c 100644 --- a/keyboards/helix/ssd1306.c +++ b/keyboards/helix/ssd1306.c @@ -1,3 +1,4 @@ + #ifdef SSD1306OLED #include "ssd1306.h" @@ -27,12 +28,17 @@ //static uint16_t last_battery_update; //static uint32_t vbat; //#define BatteryUpdateInterval 10000 /* milliseconds */ -#define ScreenOffInterval 300000 /* milliseconds */ + +// 'last_flush' is declared as uint16_t, +// so this must be less than 65535 +#define ScreenOffInterval 60000 /* milliseconds */ #if DEBUG_TO_SCREEN static uint8_t displaying; #endif static uint16_t last_flush; +static bool force_dirty = true; + // Write command sequence. // Returns true on success. static inline bool _send_cmd1(uint8_t cmd) { @@ -318,12 +324,19 @@ void iota_gfx_task_user(void) { void iota_gfx_task(void) { iota_gfx_task_user(); - if (display.dirty) { + if (display.dirty|| force_dirty) { iota_gfx_flush(); + force_dirty = false; } if (timer_elapsed(last_flush) > ScreenOffInterval) { iota_gfx_off(); } } + +bool process_record_gfx(uint16_t keycode, keyrecord_t *record) { + force_dirty = true; + return true; +} + #endif diff --git a/keyboards/helix/ssd1306.h b/keyboards/helix/ssd1306.h index 77ce7c211a..9cf6983b7e 100644 --- a/keyboards/helix/ssd1306.h +++ b/keyboards/helix/ssd1306.h @@ -4,6 +4,7 @@ #include #include #include "pincontrol.h" +#include "action.h" enum ssd1306_cmds { DisplayOff = 0xAE, @@ -87,6 +88,6 @@ void matrix_write(struct CharacterMatrix *matrix, const char *data); void matrix_write_P(struct CharacterMatrix *matrix, const char *data); void matrix_render(struct CharacterMatrix *matrix); - +bool process_record_gfx(uint16_t keycode, keyrecord_t *record); #endif From d0f8e1babee406af6c17759200173109705a35e3 Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Thu, 25 Oct 2018 02:03:29 +0900 Subject: [PATCH 0076/1763] modify quantum/template/avr/config.h: add rgblight effect configurations --- quantum/template/avr/config.h | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h index 56395f376f..463ddff2db 100644 --- a/quantum/template/avr/config.h +++ b/quantum/template/avr/config.h @@ -54,11 +54,24 @@ along with this program. If not, see . // #define RGB_DI_PIN E2 // #ifdef RGB_DI_PIN -// #define RGBLIGHT_ANIMATIONS -// #define RGBLED_NUM 16 -// #define RGBLIGHT_HUE_STEP 8 -// #define RGBLIGHT_SAT_STEP 8 -// #define RGBLIGHT_VAL_STEP 8 +// #define RGBLED_NUM 16 +// #define RGBLIGHT_HUE_STEP 8 +// #define RGBLIGHT_SAT_STEP 8 +// #define RGBLIGHT_VAL_STEP 8 +// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ +// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +// /*== all animations enable ==*/ +// #define RGBLIGHT_ANIMATIONS +// /*== or choose animations ==*/ +// #define RGBLIGHT_EFFECT_BREATHING +// #define RGBLIGHT_EFFECT_RAINBOW_MOOD +// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL +// #define RGBLIGHT_EFFECT_SNAKE +// #define RGBLIGHT_EFFECT_KNIGHT +// #define RGBLIGHT_EFFECT_CHRISTMAS +// #define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #define RGBLIGHT_EFFECT_RGB_TEST +// #define RGBLIGHT_EFFECT_ALTERNATING // #endif /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ From 2b3473455cb366888cdb62e8e570d24444173a01 Mon Sep 17 00:00:00 2001 From: Junya Ogura Date: Thu, 8 Nov 2018 02:58:51 +0900 Subject: [PATCH 0077/1763] Change hex file permission to 644 from 755 --- util/bootloader_atmega32u4_1_0_0.hex | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 util/bootloader_atmega32u4_1_0_0.hex diff --git a/util/bootloader_atmega32u4_1_0_0.hex b/util/bootloader_atmega32u4_1_0_0.hex old mode 100755 new mode 100644 From 599b21b9f4b450392380870675b136449839f6e5 Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Mon, 12 Nov 2018 20:51:24 +0000 Subject: [PATCH 0078/1763] convert to unix line-endings [skip ci] --- util/bootloader_atmega32u4_1_0_0.hex | 506 +++++++++++++-------------- 1 file changed, 253 insertions(+), 253 deletions(-) diff --git a/util/bootloader_atmega32u4_1_0_0.hex b/util/bootloader_atmega32u4_1_0_0.hex index 275aeacba3..20174989ae 100644 --- a/util/bootloader_atmega32u4_1_0_0.hex +++ b/util/bootloader_atmega32u4_1_0_0.hex @@ -1,253 +1,253 @@ -:020000020000FC -:047000000C948D3E21 -:047028000C94B73DD0 -:10702F0012010002FF010020EB03F42F0000010208 -:10703F00030109021200010100803209040000005F -:10704F00000000000C03410054004D0045004C00AF -:10705F001603410054006D00330032005500340018 -:10706F004400460055000C0331002E0030002E0066 -:10707F0030000403090416010C0100000C0000018C -:02708F006C7F14 -:1070920012BD01BDF89A00B5089501E00895F9996D -:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929 -:1070B200FECF0C944938F80104910895F8013491F7 -:1070C20031962491890108950091610000930C0189 -:1070D20000E80093610001E00093610005BF02E057 -:1070E20005BF0C9486380091D70001600093D70049 -:1070F200A89507EF04BF0091600000610093600053 -:1071020000E00093600001E008950E94AA3D0E9401 -:10711200B53DFDCF0CD00F7708D0006806D00061D6 -:1071220004D0016028D0789408950093D80000918B -:10713200D8000895FCDF00621ED04CD009B500FFD4 -:10714200FDCFF5DF0F7D17D00091E0000E7F009399 -:10715200E0000091E000077F0093E0000091E20070 -:1071620001600093E2000091E20008600093E200F7 -:1071720078940C94743B0093D800089500910D010B -:10718200002359F40091D90000FF07C0D0DF006846 -:10719200F2DF01E000930D01CDDFE0E2F2E00081D9 -:1071A200018100FF0DC0008111811E7F11830083C8 -:1071B20001E00093EA0000E00093EA0000931E025F -:1071C20000E00093E9000091E80003FF02C00E9482 -:1071D200F23B0895A89539D000E40093600000E0E6 -:1071E200009381000093800010E0009385000093DB -:1071F200840001E006BB00918100036000938100DE -:107202000091600007FFFCCF00E80093600010933C -:107212008100A89507EF04BF18D010936000209159 -:1072220084003091850010938100109380001093A8 -:1072320085001093840001E006BB2D3D354010F01F -:1072420002E101C002E009BD089500916000006101 -:107252000093600008950E94AD3E239741D100E063 -:1072620000930901B5D104811581012B51F437D165 -:1072720000910701002309F4B9C000E0009307015F -:10728200B5C058D102FFFDCF37D1068335D1009367 -:107292000F0132D1009310012FD1009311012CD193 -:1072A2000093120129D10093130102852091130149 -:1072B20030911201409111015091100116811A95DD -:1072C20041F01250A9F01A9599F11A9509F473C078 -:1072D2008BC010910F01113011F411E001C010E0C8 -:1072E200138799D00C3F11F414D17FC077D17DC0A0 -:1072F20092D010910F01112329F01A9549F01A9595 -:10730200A9F073C010E013870C3F09F06EC0ECCFF8 -:1073120056D103C04CD109F468C00D911C9144D1DF -:107322000F3FC1F305E0009309015FC011E0EBCF0D -:10733200D2D029F00250E1F10A9541F056C0FDD0B9 -:107342000E94A33F0FEF00930A014FC0552319F08B -:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE -:1073620003FFFDCF67D051D04AD008E00093600000 -:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F -:1073820044D00FEF1FE004C009811A810150104060 -:1073920009831A8309811A81012BB1F700E800934E -:1073A200610000910C01009361000C940000FFCF7A -:1073B20001E003871AC08FD019F00A9539F015C081 -:1073C200535098F4BAD002E000870FC0505339F0FE -:1073D2005A9541F05F52B1F35A95A1F306C002E00B -:1073E2000883F0CF01E0FCCFA8D079D02396E4E067 -:1073F2000C94BA3E01E005BF00E005BF089500917C -:10740200D8000F770093D800089509B50D7F09BD04 -:1074120000E009BD08955183408333832283109194 -:10742200E8001B7F1093E8001091E8001F7710938B -:10743200E80008955DD053D0F8940091E000016017 -:107442000093E000089579D04AC0219749D0009175 -:107452000601035019F00250B9F00BC03CD021F0E4 -:107462000A9559F00A9529F400910A010C3F19F482 -:1074720050D02196089567D0FCCF0091010100936E -:10748200F100009100010AC01091100124D019F0FE -:107492000A9549F0EECF135018F400E00093F10082 -:1074A2001ED044D0E6CF105339F01A9539F01F524E -:1074B20041F01A9541F0F4CF08E5F0CF00E006D094 -:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5 -:1074D20030E00C94113F00910F010023089521C068 -:1074E2000BD008D007D00093040106D00093050109 -:1074F20021D00BC000D008830091F10008950091C3 -:10750200EB0000620093EB0015D0077F0093E800C8 -:107512000895F5DF02E00093080103E000930901FA -:10752200089559D007D000FFFDCF089503D002FF80 -:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A -:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD -:107552002BD00093F1002BD059F43DD0082F092BEA -:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1 -:10757200042D4394003289F300910B0100230D91F5 -:107582001C9131F311970E945838E3CFD3DF00FFEB -:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B -:1075A200CCDFE5E00C94B93E11970C945C380D9158 -:1075B2001C910F5F1F4F1C930E93019708958281B8 -:1075C200938100811181801B910B0196DF01089547 -:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71 -:1075E200F7DF80819181A081B181AF710481158122 -:1075F20000521040048315830AC000910B0100233E -:1076020031F4A301920103E911E00E943B3F47D00C -:10761200B8F1662477242C0111C06EDFF301ED5618 -:10762200FE4F008301E0600E00E0701E01960091A3 -:10763200F200002311F033D0B8F47FDF30D0E8F24B -:10764200F301B096E238F040C0F674DF02FFFDCFDE -:107652000091F200BDDF24813581201B304024835C -:107662003583E5CF49DFAA95AA23E1F700910B0103 -:10767200013099F62091F1008C010E945038D6CF4A -:1076820004811581012B21F055DF02FFFDCF55DF6B -:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051 -:1076A200F1E0028113810817190708952091EB0078 -:1076B20021602093EB000093EC000091ED0002703A -:1076C200012B0093ED000091ED0002600093ED00AC -:1076D2001091EE00012F000F00E0001F0895412FCE -:1076E2000093E900089500E009D000FD05C000E024 -:1076F200F7DF10E202E0DACF00E00895F1DF009157 -:10770200EB0008950F770132A9F5112369F11A955B -:1077120059F01A9561F01A9569F01A95F9F01A95CF -:10772200C1F01A95D9F024C00E942C3920C00E94C1 -:10773200263A1DC029D00091090123D001E01FD0B3 -:1077420020D0009108011BD00E94923A0E94973AE1 -:107752000EC01AD00091080114D007C002E00093B5 -:10776200080100E0009309010FD00E94923A03C081 -:107772000E94803A02C001E0089500E0089501D01D -:1077820000E00093F10008950091E800077F009364 -:10779200E800089508950350F9F4112339F01A9579 -:1077A20051F01A9581F01A9599F016C004E016D09E -:1077B20001E810E703C011D003E510E7E7E1F2E0CA -:1077C20000831183D8CF06E109D00FE510E7F6CF89 -:1077D20004D005E710E7F2CFD0CF0CE000931A02F5 -:1077E200089527D120D100931D02E1D0212F11232A -:1077F20029F12A95E9F02250F1F0225099F02A95C8 -:1078020049F0225061F02A9581F02A95E1F02A95FB -:10781200E9F023C0003809F44FC00C94833B0038D0 -:10782200E1F7C8C00023C9F71EC00023B1F72DC07D -:10783200033098F744C1033080F70BC1003868F376 -:10784200033858F7C9C0013841F77BC1013051F400 -:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA -:1078620009F41ED008951091E3001078DCD00F7750 -:10787200012B0093E300E9D0ACD000FFFDCF0091D3 -:10788200E30000680093E300089591D0123040F4C1 -:107892000FD010931E02DAD000911E020C94CB3B43 -:1078A2000091EB0001D004C000620093EB00089548 -:1078B2000091E800077FC0C0BA93AA93229700E024 -:1078C2000093190274D0AFD0202F2A9519F02A956F -:1078D200E9F022C002E100931A020FE210E7E7E1A9 -:1078E200F2E0008311839DD008839DD00983E0DFFD -:1078F20000911A0210E02881398102171307A8F4B7 -:107902000F7181F401E00093190211C002E10093AA -:107912001A0201E410E7E3CF0E94CC3B002319F7DF -:107922008ED040C01093190202C020931A027ED05A -:10793200A7E1B2E001C08AD000911A02002309F146 -:1079420048D004FD1EC045D000FD03C042D004FF54 -:10795200FACF10E0012F1395003281F0ED91FC91E6 -:107962001197049133D02D913C912F5F3F4F3C935F -:107972002E93FD0103810A95038361F72AD004FF48 -:10798200DACF00911902013039F423D004FD04C08A -:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F -:1079A20018D00B7F49D02296A991B99108951091D0 -:1079B200F10008957DDF00911E0208D047D009D062 -:1079C2000F773AD006D002FFFDCFBFC00093F1007F -:1079D20008950091E800089524D010911D021058D6 -:1079E20029F01A9589F01A9591F019C061DF00917A -:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63 -:107A020018D0E7DF0F770CC053DF00E0F2CF51D080 -:107A12000F7710E0F801E55EFD4F0081EACF0FD04D -:107A22000BC001D000D00091F1000895D2DF0F7E8B -:107A320003C00091E8000B7F0093E80008950091D5 -:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31 -:107A5200F3CF00911D02002329F00A9509F10A953E -:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE -:107A7200B9F4D9DF0F7711F416D01BD00093E900C7 -:107A82001091EB0010FF0BC00ED010E01093E90034 -:107A920021E0F801E55EFD4F20834FD003C042D0C4 -:107AA20045D0CFDFC9CF1091EB0010621093EB00ED -:107AB20008951091E800177F1093E800089500914F -:107AC2001D02002311F4AFDF02C0013011F4B7DF51 -:107AD200B3CF023031F52DD019F52091F1002F7777 -:107AE2002093E90023D000FF19C081F01FD000616C -:107AF200DCDE01E010E0422F0E949F3E0093EA008C -:107B020000E00093EA0012D00860CFDE0BD030E034 -:107B1200F901E55EFD4F008310D0DACF03D0D7CF55 -:107B2200BFDE089500E00093E90008950091EB00A4 -:107B3200089579DF3CDF00230895BADE4ADF0E7F25 -:107B4200089583DF46DF02FFFDCF73DF42DF0F7749 -:107B520073CF0091D70001600093D7000E948B3849 -:107B620000E000931F0208950C94BF388A93FA93A1 -:107B7200EA933A922A921A920A927A936A935A93BF -:107B82004A933A932A931A930A938FB70091DA0091 -:107B920000FF24C00091D80000FF20C00EEF009328 -:107BA200DA000091D90000FF11C001E000930D013D -:107BB200ABD0026096D09AD00860A2D00E949B38C7 -:107BC2000091E0000E7F0093E00008C000E0009307 -:107BD2000D0100931E0298D0046083D07FD002FF73 -:107BE20005C084D002FF02C00BEF75D077D000FF32 -:107BF2001BC07CD000FF18C001E000930E016AD0C8 -:107C020083D000626ED00EEF6FD0006179D06ED05B -:107C12000F7D76D00091D80000620093D80009B59C -:107C22000D7F09BD00E009BD59D004FF20C05ED020 -:107C320004FF1DC009B500FD05C00E94EB3809B55F -:107C420000FFFDCF0091D8000F7D0093D80042D0F5 -:107C520000910E01002359F04CD00FEE45D00F7E5B -:107C620052D000643ED042D001604AD042D036D0D9 -:107C720005FF0FC03BD005FF0CC000E000930E01D2 -:107C820035D00F7E3DD00FED2FD00F7D3CD0006858 -:107C920028D024D003FF0DC029D003FF0AC000E082 -:107CA20000931F0207EF17D00E94743B2DD0116082 -:107CB20018D08FBF09911991299139914991599100 -:107CC200699179910990199029903990E991F991E6 -:107CD200899118950FEE0093E10008950091E1005B -:107CE20008951183008308950093E1000091E2005A -:107CF20008950091E200006203D00091E200086062 -:107D02000093E2000895FCDFE0E2F2E000811181DD -:107D1200089500008895FECF01E60DBF02E00EBF78 -:107D2200C2EED2E00E947438002311F00E94D33ECA -:107D32000E9465380E948A3E0C948A3E4A951AF047 -:107D4200000F111FFBCF0895BA92AA929A928A92BB -:107D52007A926A925A924A92BA93AA939A938A937D -:107D62000895BB84AA84998488847F806E805D8014 -:107D72004C80BB81AA8199818881F0E00FB6F8948A -:107D8200CE0FDF1F0FBE089520E006D0E9F7089559 -:107D9200259102D0E9F708952D9301501040202F2C -:107DA200212B089585E890E7FC0105911491FC01CF -:107DB2003296A591B491FC01349625913491422FCB -:107DC200432B19F0F901E4DF01C0DEDF069610E76C -:107DD2008139910748F308952F930CD02F9101D048 -:107DE20008953CD0F12FE02F45E047BFE89536D00B -:107DF20012D0089533D0F12FE02F43E047BFE8952A -:107E02002DD008952BD0F12FE02F43E047BFE89506 -:107E120025D001D0089522D041E147BFE8951EC088 -:107E22001DD0F12FE02F41E247BFC895002D16C0AB -:107E320015D0F12FE02F49E047BFC895002D0EC0A5 -:107E4200F32FE22F012E102E41E047BFE89506C026 -:107E520005D0002E29E027BFE89500C0022E27B7E3 -:107E620020FDFCCF202D0895022E27B726FDFCCF42 -:107E7200202D08950E94A53E22974801C901DA01EA -:107E820010C05BD001E0A00E00E0B01E00E4A0161E -:107E920000E0B00608F440C0830120E030E00E9418 -:107EA200F23E0A2F0B2B09F440C0082F0F7710E087 -:107EB2002C01401A510A320100E4A02E03C00A2FFD -:107EC2000B2BE1F04816590680F0F40101914F01A5 -:107ED2000983119729F001914F010883119711C06D -:107EE200F2013196049108830CC0F20104910983D6 -:107EF2003196E817F907A1F7F401EDCF1BD00883FB -:107F020019839201088119810E94213F16D0AA94F7 -:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE -:107F220009F4AFCF83011DD0B7CF01E02296ECE078 -:107F32000C94B23E82010C945F3802E0400E00E0E5 -:107F4200501E08959A938A9380E090E08C0109D0A4 -:107F520080589F4F8F3F0FE69007C0F38991999108 -:107F6200089520E030E00C94FB3E00000000000089 -:067F720000000000FC000D -:107FE4000C94ED3E0C94113F0C94193F0C94213FDA -:0C7FF4000C94F23E0C94033F0C94293FC7 -:040000030000700089 -:00000001FF +:020000020000FC +:047000000C948D3E21 +:047028000C94B73DD0 +:10702F0012010002FF010020EB03F42F0000010208 +:10703F00030109021200010100803209040000005F +:10704F00000000000C03410054004D0045004C00AF +:10705F001603410054006D00330032005500340018 +:10706F004400460055000C0331002E0030002E0066 +:10707F0030000403090416010C0100000C0000018C +:02708F006C7F14 +:1070920012BD01BDF89A00B5089501E00895F9996D +:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929 +:1070B200FECF0C944938F80104910895F8013491F7 +:1070C20031962491890108950091610000930C0189 +:1070D20000E80093610001E00093610005BF02E057 +:1070E20005BF0C9486380091D70001600093D70049 +:1070F200A89507EF04BF0091600000610093600053 +:1071020000E00093600001E008950E94AA3D0E9401 +:10711200B53DFDCF0CD00F7708D0006806D00061D6 +:1071220004D0016028D0789408950093D80000918B +:10713200D8000895FCDF00621ED04CD009B500FFD4 +:10714200FDCFF5DF0F7D17D00091E0000E7F009399 +:10715200E0000091E000077F0093E0000091E20070 +:1071620001600093E2000091E20008600093E200F7 +:1071720078940C94743B0093D800089500910D010B +:10718200002359F40091D90000FF07C0D0DF006846 +:10719200F2DF01E000930D01CDDFE0E2F2E00081D9 +:1071A200018100FF0DC0008111811E7F11830083C8 +:1071B20001E00093EA0000E00093EA0000931E025F +:1071C20000E00093E9000091E80003FF02C00E9482 +:1071D200F23B0895A89539D000E40093600000E0E6 +:1071E200009381000093800010E0009385000093DB +:1071F200840001E006BB00918100036000938100DE +:107202000091600007FFFCCF00E80093600010933C +:107212008100A89507EF04BF18D010936000209159 +:1072220084003091850010938100109380001093A8 +:1072320085001093840001E006BB2D3D354010F01F +:1072420002E101C002E009BD089500916000006101 +:107252000093600008950E94AD3E239741D100E063 +:1072620000930901B5D104811581012B51F437D165 +:1072720000910701002309F4B9C000E0009307015F +:10728200B5C058D102FFFDCF37D1068335D1009367 +:107292000F0132D1009310012FD1009311012CD193 +:1072A2000093120129D10093130102852091130149 +:1072B20030911201409111015091100116811A95DD +:1072C20041F01250A9F01A9599F11A9509F473C078 +:1072D2008BC010910F01113011F411E001C010E0C8 +:1072E200138799D00C3F11F414D17FC077D17DC0A0 +:1072F20092D010910F01112329F01A9549F01A9595 +:10730200A9F073C010E013870C3F09F06EC0ECCFF8 +:1073120056D103C04CD109F468C00D911C9144D1DF +:107322000F3FC1F305E0009309015FC011E0EBCF0D +:10733200D2D029F00250E1F10A9541F056C0FDD0B9 +:107342000E94A33F0FEF00930A014FC0552319F08B +:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE +:1073620003FFFDCF67D051D04AD008E00093600000 +:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F +:1073820044D00FEF1FE004C009811A810150104060 +:1073920009831A8309811A81012BB1F700E800934E +:1073A200610000910C01009361000C940000FFCF7A +:1073B20001E003871AC08FD019F00A9539F015C081 +:1073C200535098F4BAD002E000870FC0505339F0FE +:1073D2005A9541F05F52B1F35A95A1F306C002E00B +:1073E2000883F0CF01E0FCCFA8D079D02396E4E067 +:1073F2000C94BA3E01E005BF00E005BF089500917C +:10740200D8000F770093D800089509B50D7F09BD04 +:1074120000E009BD08955183408333832283109194 +:10742200E8001B7F1093E8001091E8001F7710938B +:10743200E80008955DD053D0F8940091E000016017 +:107442000093E000089579D04AC0219749D0009175 +:107452000601035019F00250B9F00BC03CD021F0E4 +:107462000A9559F00A9529F400910A010C3F19F482 +:1074720050D02196089567D0FCCF0091010100936E +:10748200F100009100010AC01091100124D019F0FE +:107492000A9549F0EECF135018F400E00093F10082 +:1074A2001ED044D0E6CF105339F01A9539F01F524E +:1074B20041F01A9541F0F4CF08E5F0CF00E006D094 +:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5 +:1074D20030E00C94113F00910F010023089521C068 +:1074E2000BD008D007D00093040106D00093050109 +:1074F20021D00BC000D008830091F10008950091C3 +:10750200EB0000620093EB0015D0077F0093E800C8 +:107512000895F5DF02E00093080103E000930901FA +:10752200089559D007D000FFFDCF089503D002FF80 +:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A +:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD +:107552002BD00093F1002BD059F43DD0082F092BEA +:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1 +:10757200042D4394003289F300910B0100230D91F5 +:107582001C9131F311970E945838E3CFD3DF00FFEB +:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B +:1075A200CCDFE5E00C94B93E11970C945C380D9158 +:1075B2001C910F5F1F4F1C930E93019708958281B8 +:1075C200938100811181801B910B0196DF01089547 +:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71 +:1075E200F7DF80819181A081B181AF710481158122 +:1075F20000521040048315830AC000910B0100233E +:1076020031F4A301920103E911E00E943B3F47D00C +:10761200B8F1662477242C0111C06EDFF301ED5618 +:10762200FE4F008301E0600E00E0701E01960091A3 +:10763200F200002311F033D0B8F47FDF30D0E8F24B +:10764200F301B096E238F040C0F674DF02FFFDCFDE +:107652000091F200BDDF24813581201B304024835C +:107662003583E5CF49DFAA95AA23E1F700910B0103 +:10767200013099F62091F1008C010E945038D6CF4A +:1076820004811581012B21F055DF02FFFDCF55DF6B +:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051 +:1076A200F1E0028113810817190708952091EB0078 +:1076B20021602093EB000093EC000091ED0002703A +:1076C200012B0093ED000091ED0002600093ED00AC +:1076D2001091EE00012F000F00E0001F0895412FCE +:1076E2000093E900089500E009D000FD05C000E024 +:1076F200F7DF10E202E0DACF00E00895F1DF009157 +:10770200EB0008950F770132A9F5112369F11A955B +:1077120059F01A9561F01A9569F01A95F9F01A95CF +:10772200C1F01A95D9F024C00E942C3920C00E94C1 +:10773200263A1DC029D00091090123D001E01FD0B3 +:1077420020D0009108011BD00E94923A0E94973AE1 +:107752000EC01AD00091080114D007C002E00093B5 +:10776200080100E0009309010FD00E94923A03C081 +:107772000E94803A02C001E0089500E0089501D01D +:1077820000E00093F10008950091E800077F009364 +:10779200E800089508950350F9F4112339F01A9579 +:1077A20051F01A9581F01A9599F016C004E016D09E +:1077B20001E810E703C011D003E510E7E7E1F2E0CA +:1077C20000831183D8CF06E109D00FE510E7F6CF89 +:1077D20004D005E710E7F2CFD0CF0CE000931A02F5 +:1077E200089527D120D100931D02E1D0212F11232A +:1077F20029F12A95E9F02250F1F0225099F02A95C8 +:1078020049F0225061F02A9581F02A95E1F02A95FB +:10781200E9F023C0003809F44FC00C94833B0038D0 +:10782200E1F7C8C00023C9F71EC00023B1F72DC07D +:10783200033098F744C1033080F70BC1003868F376 +:10784200033858F7C9C0013841F77BC1013051F400 +:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA +:1078620009F41ED008951091E3001078DCD00F7750 +:10787200012B0093E300E9D0ACD000FFFDCF0091D3 +:10788200E30000680093E300089591D0123040F4C1 +:107892000FD010931E02DAD000911E020C94CB3B43 +:1078A2000091EB0001D004C000620093EB00089548 +:1078B2000091E800077FC0C0BA93AA93229700E024 +:1078C2000093190274D0AFD0202F2A9519F02A956F +:1078D200E9F022C002E100931A020FE210E7E7E1A9 +:1078E200F2E0008311839DD008839DD00983E0DFFD +:1078F20000911A0210E02881398102171307A8F4B7 +:107902000F7181F401E00093190211C002E10093AA +:107912001A0201E410E7E3CF0E94CC3B002319F7DF +:107922008ED040C01093190202C020931A027ED05A +:10793200A7E1B2E001C08AD000911A02002309F146 +:1079420048D004FD1EC045D000FD03C042D004FF54 +:10795200FACF10E0012F1395003281F0ED91FC91E6 +:107962001197049133D02D913C912F5F3F4F3C935F +:107972002E93FD0103810A95038361F72AD004FF48 +:10798200DACF00911902013039F423D004FD04C08A +:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F +:1079A20018D00B7F49D02296A991B99108951091D0 +:1079B200F10008957DDF00911E0208D047D009D062 +:1079C2000F773AD006D002FFFDCFBFC00093F1007F +:1079D20008950091E800089524D010911D021058D6 +:1079E20029F01A9589F01A9591F019C061DF00917A +:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63 +:107A020018D0E7DF0F770CC053DF00E0F2CF51D080 +:107A12000F7710E0F801E55EFD4F0081EACF0FD04D +:107A22000BC001D000D00091F1000895D2DF0F7E8B +:107A320003C00091E8000B7F0093E80008950091D5 +:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31 +:107A5200F3CF00911D02002329F00A9509F10A953E +:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE +:107A7200B9F4D9DF0F7711F416D01BD00093E900C7 +:107A82001091EB0010FF0BC00ED010E01093E90034 +:107A920021E0F801E55EFD4F20834FD003C042D0C4 +:107AA20045D0CFDFC9CF1091EB0010621093EB00ED +:107AB20008951091E800177F1093E800089500914F +:107AC2001D02002311F4AFDF02C0013011F4B7DF51 +:107AD200B3CF023031F52DD019F52091F1002F7777 +:107AE2002093E90023D000FF19C081F01FD000616C +:107AF200DCDE01E010E0422F0E949F3E0093EA008C +:107B020000E00093EA0012D00860CFDE0BD030E034 +:107B1200F901E55EFD4F008310D0DACF03D0D7CF55 +:107B2200BFDE089500E00093E90008950091EB00A4 +:107B3200089579DF3CDF00230895BADE4ADF0E7F25 +:107B4200089583DF46DF02FFFDCF73DF42DF0F7749 +:107B520073CF0091D70001600093D7000E948B3849 +:107B620000E000931F0208950C94BF388A93FA93A1 +:107B7200EA933A922A921A920A927A936A935A93BF +:107B82004A933A932A931A930A938FB70091DA0091 +:107B920000FF24C00091D80000FF20C00EEF009328 +:107BA200DA000091D90000FF11C001E000930D013D +:107BB200ABD0026096D09AD00860A2D00E949B38C7 +:107BC2000091E0000E7F0093E00008C000E0009307 +:107BD2000D0100931E0298D0046083D07FD002FF73 +:107BE20005C084D002FF02C00BEF75D077D000FF32 +:107BF2001BC07CD000FF18C001E000930E016AD0C8 +:107C020083D000626ED00EEF6FD0006179D06ED05B +:107C12000F7D76D00091D80000620093D80009B59C +:107C22000D7F09BD00E009BD59D004FF20C05ED020 +:107C320004FF1DC009B500FD05C00E94EB3809B55F +:107C420000FFFDCF0091D8000F7D0093D80042D0F5 +:107C520000910E01002359F04CD00FEE45D00F7E5B +:107C620052D000643ED042D001604AD042D036D0D9 +:107C720005FF0FC03BD005FF0CC000E000930E01D2 +:107C820035D00F7E3DD00FED2FD00F7D3CD0006858 +:107C920028D024D003FF0DC029D003FF0AC000E082 +:107CA20000931F0207EF17D00E94743B2DD0116082 +:107CB20018D08FBF09911991299139914991599100 +:107CC200699179910990199029903990E991F991E6 +:107CD200899118950FEE0093E10008950091E1005B +:107CE20008951183008308950093E1000091E2005A +:107CF20008950091E200006203D00091E200086062 +:107D02000093E2000895FCDFE0E2F2E000811181DD +:107D1200089500008895FECF01E60DBF02E00EBF78 +:107D2200C2EED2E00E947438002311F00E94D33ECA +:107D32000E9465380E948A3E0C948A3E4A951AF047 +:107D4200000F111FFBCF0895BA92AA929A928A92BB +:107D52007A926A925A924A92BA93AA939A938A937D +:107D62000895BB84AA84998488847F806E805D8014 +:107D72004C80BB81AA8199818881F0E00FB6F8948A +:107D8200CE0FDF1F0FBE089520E006D0E9F7089559 +:107D9200259102D0E9F708952D9301501040202F2C +:107DA200212B089585E890E7FC0105911491FC01CF +:107DB2003296A591B491FC01349625913491422FCB +:107DC200432B19F0F901E4DF01C0DEDF069610E76C +:107DD2008139910748F308952F930CD02F9101D048 +:107DE20008953CD0F12FE02F45E047BFE89536D00B +:107DF20012D0089533D0F12FE02F43E047BFE8952A +:107E02002DD008952BD0F12FE02F43E047BFE89506 +:107E120025D001D0089522D041E147BFE8951EC088 +:107E22001DD0F12FE02F41E247BFC895002D16C0AB +:107E320015D0F12FE02F49E047BFC895002D0EC0A5 +:107E4200F32FE22F012E102E41E047BFE89506C026 +:107E520005D0002E29E027BFE89500C0022E27B7E3 +:107E620020FDFCCF202D0895022E27B726FDFCCF42 +:107E7200202D08950E94A53E22974801C901DA01EA +:107E820010C05BD001E0A00E00E0B01E00E4A0161E +:107E920000E0B00608F440C0830120E030E00E9418 +:107EA200F23E0A2F0B2B09F440C0082F0F7710E087 +:107EB2002C01401A510A320100E4A02E03C00A2FFD +:107EC2000B2BE1F04816590680F0F40101914F01A5 +:107ED2000983119729F001914F010883119711C06D +:107EE200F2013196049108830CC0F20104910983D6 +:107EF2003196E817F907A1F7F401EDCF1BD00883FB +:107F020019839201088119810E94213F16D0AA94F7 +:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE +:107F220009F4AFCF83011DD0B7CF01E02296ECE078 +:107F32000C94B23E82010C945F3802E0400E00E0E5 +:107F4200501E08959A938A9380E090E08C0109D0A4 +:107F520080589F4F8F3F0FE69007C0F38991999108 +:107F6200089520E030E00C94FB3E00000000000089 +:067F720000000000FC000D +:107FE4000C94ED3E0C94113F0C94193F0C94213FDA +:0C7FF4000C94F23E0C94033F0C94293FC7 +:040000030000700089 +:00000001FF From e653cc198e3a535f23ae33d677115f192979ee55 Mon Sep 17 00:00:00 2001 From: Andrew Kannan Date: Mon, 12 Nov 2018 19:31:22 -0500 Subject: [PATCH 0079/1763] The "Practice60" Board, Blue Pill powered (#4407) * Starting point for blue pill based practice60 * Changes * add * try raw bin no botloader * swap back to bootloader version * edit * Remove debug LED flash * Disable JTAG to open up B3 and B4 * Add led backlight support (no breathing yet) * Update matrix for correctness * RGB Underglow working in a very simple state * not as bright * Move to handwired * revert ChibiOS_Test changes * Changes based on PR comments * Address PR comments v2 * Move files --- .../boards/GENERIC_STM32_F103/board.c | 56 ++ .../boards/GENERIC_STM32_F103/board.h | 166 ++++++ .../boards/GENERIC_STM32_F103/board.mk | 5 + .../handwired/practice60/bootloader_defs.h | 10 + keyboards/handwired/practice60/chconf.h | 524 ++++++++++++++++++ keyboards/handwired/practice60/config.h | 74 +++ keyboards/handwired/practice60/halconf.h | 353 ++++++++++++ keyboards/handwired/practice60/hsv2rgb.c | 80 +++ keyboards/handwired/practice60/hsv2rgb.h | 23 + .../practice60/keymaps/default/keymap.c | 48 ++ keyboards/handwired/practice60/ld/MKL26Z64.ld | 105 ++++ .../ld/STM32F103x8_stm32duino_bootloader.ld | 88 +++ keyboards/handwired/practice60/led.c | 51 ++ keyboards/handwired/practice60/mcuconf.h | 209 +++++++ keyboards/handwired/practice60/practice60.c | 32 ++ keyboards/handwired/practice60/practice60.h | 18 + keyboards/handwired/practice60/readme.md | 3 + keyboards/handwired/practice60/rules.mk | 56 ++ keyboards/handwired/practice60/underglow.c | 157 ++++++ keyboards/handwired/practice60/underglow.h | 10 + 20 files changed, 2068 insertions(+) create mode 100644 keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c create mode 100644 keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h create mode 100644 keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk create mode 100644 keyboards/handwired/practice60/bootloader_defs.h create mode 100644 keyboards/handwired/practice60/chconf.h create mode 100644 keyboards/handwired/practice60/config.h create mode 100644 keyboards/handwired/practice60/halconf.h create mode 100644 keyboards/handwired/practice60/hsv2rgb.c create mode 100644 keyboards/handwired/practice60/hsv2rgb.h create mode 100644 keyboards/handwired/practice60/keymaps/default/keymap.c create mode 100644 keyboards/handwired/practice60/ld/MKL26Z64.ld create mode 100644 keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld create mode 100644 keyboards/handwired/practice60/led.c create mode 100644 keyboards/handwired/practice60/mcuconf.h create mode 100644 keyboards/handwired/practice60/practice60.c create mode 100644 keyboards/handwired/practice60/practice60.h create mode 100644 keyboards/handwired/practice60/readme.md create mode 100644 keyboards/handwired/practice60/rules.mk create mode 100644 keyboards/handwired/practice60/underglow.c create mode 100644 keyboards/handwired/practice60/underglow.h diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c new file mode 100644 index 0000000000..8c5a87f35f --- /dev/null +++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c @@ -0,0 +1,56 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "hal.h" + +// Value to place in RTC backup register 10 for persistent bootloader mode +#define RTC_BOOTLOADER_FLAG 0x424C + +/** + * @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. + */ +#if HAL_USE_PAL || defined(__DOXYGEN__) +const PALConfig pal_default_config = +{ + {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH}, + {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH}, + {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH}, + {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH}, + {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH}, +}; +#endif + +/* + * Early initialization code. + * This initialization must be performed just after stack setup and before + * any other initialization. + */ +void __early_init(void) { + + stm32_clock_init(); +} + +/* + * Board-specific initialization code. + */ +void boardInit(void) { + //JTAG-DP Disabled and SW-DP Enabled + AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; + //Set backup register DR10 to enter bootloader on reset + BKP->DR10 = RTC_BOOTLOADER_FLAG; +} diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h new file mode 100644 index 0000000000..9427adabf1 --- /dev/null +++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h @@ -0,0 +1,166 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for a Generic STM32F103 board. + */ + +/* + * Board identifier. + */ +#define BOARD_GENERIC_STM32_F103 +#define BOARD_NAME "Generic STM32F103x board" + +/* + * Board frequencies. + */ +#define STM32_LSECLK 32768 +#define STM32_HSECLK 8000000 + +/* + * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h. + */ +#define STM32F103xB + +/* + * IO pins assignments + */ + +/* on-board */ + +#define GPIOA_LED 8 +#define GPIOD_OSC_IN 0 +#define GPIOD_OSC_OUT 1 + +/* In case your board has a "USB enable" hardware + controlled by a pin, define it here. (It could be just + a 1.5k resistor connected to D+ line.) +*/ +/* +#define GPIOB_USB_DISC 10 +*/ + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * + * The digits have the following meaning: + * 0 - Analog input. + * 1 - Push Pull output 10MHz. + * 2 - Push Pull output 2MHz. + * 3 - Push Pull output 50MHz. + * 4 - Digital input. + * 5 - Open Drain output 10MHz. + * 6 - Open Drain output 2MHz. + * 7 - Open Drain output 50MHz. + * 8 - Digital input with PullUp or PullDown resistor depending on ODR. + * 9 - Alternate Push Pull output 10MHz. + * A - Alternate Push Pull output 2MHz. + * B - Alternate Push Pull output 50MHz. + * C - Reserved. + * D - Alternate Open Drain output 10MHz. + * E - Alternate Open Drain output 2MHz. + * F - Alternate Open Drain output 50MHz. + * Please refer to the STM32 Reference Manual for details. + */ + +/* + * Port A setup. + * Everything input with pull-up except: + * PA2 - Alternate output (USART2 TX). + * PA3 - Normal input (USART2 RX). + * PA9 - Alternate output (USART1 TX). + * PA10 - Normal input (USART1 RX). + */ +#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFFFF + +/* + * Port B setup. + * Everything input with pull-up except: + * PB10 - Push Pull output (USB switch). + */ +#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ +#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */ +#define VAL_GPIOBODR 0xFFFFFFFF + +/* + * Port C setup. + * Everything input with pull-up except: + * PC13 - Push Pull output (LED). + */ +#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */ +#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */ +#define VAL_GPIOCODR 0xFFFFFFFF + +/* + * Port D setup. + * Everything input with pull-up except: + * PD0 - Normal input (XTAL). + * PD1 - Normal input (XTAL). + */ +#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ +#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ +#define VAL_GPIODODR 0xFFFFFFFF + +/* + * Port E setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ +#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ +#define VAL_GPIOEODR 0xFFFFFFFF + +/* + * USB bus activation macro, required by the USB driver. + */ +/* The point is that most of the generic STM32F103* boards + have a 1.5k resistor connected on one end to the D+ line + and on the other end to some pin. Or even a slightly more + complicated "USB enable" circuit, controlled by a pin. + That should go here. + + However on some boards (e.g. one that I have), there's no + such hardware. In which case it's better to not do anything. +*/ +/* +#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT); + +/* + * USB bus de-activation macro, required by the USB driver. + */ +/* +#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC) +*/ +#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12); + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* _BOARD_H_ */ diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk new file mode 100644 index 0000000000..6b8b312fd9 --- /dev/null +++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c + +# Required include directories +BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103 diff --git a/keyboards/handwired/practice60/bootloader_defs.h b/keyboards/handwired/practice60/bootloader_defs.h new file mode 100644 index 0000000000..0f45203cb6 --- /dev/null +++ b/keyboards/handwired/practice60/bootloader_defs.h @@ -0,0 +1,10 @@ +/* Address for jumping to bootloader on STM32 chips. */ +/* It is chip dependent, the correct number can be looked up here (page 175): + * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf + * This also requires a patch to chibios: + * /tmk_core/tool/chibios/ch-bootloader-jump.patch + */ + +// STM32F103* does NOT have an USB bootloader in ROM (only serial), +// so setting anything here does not make much sense +// #define STM32_BOOTLOADER_ADDRESS 0x1FFFC800 diff --git a/keyboards/handwired/practice60/chconf.h b/keyboards/handwired/practice60/chconf.h new file mode 100644 index 0000000000..dfb1f9dfb9 --- /dev/null +++ b/keyboards/handwired/practice60/chconf.h @@ -0,0 +1,524 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @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 16 + +/** + * @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 2000 + +/** + * @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 + +/* Use __WFI in the idle thread for waiting. Does lower the power + * consumption. */ +#define CORTEX_ENABLE_WFI_IDLE TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @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 FALSE + +/** + * @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 FALSE + +/** + * @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 FALSE + +/** + * @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 FALSE + +/** + * @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 FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @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 FALSE + +/** + * @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 */ + +/** @} */ diff --git a/keyboards/handwired/practice60/config.h b/keyboards/handwired/practice60/config.h new file mode 100644 index 0000000000..31ddd77d17 --- /dev/null +++ b/keyboards/handwired/practice60/config.h @@ -0,0 +1,74 @@ +/* +Copyright 2015 Jun Wako + +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 . +*/ + +#pragma once + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c borks */ +#define MANUFACTURER QMK +#define PRODUCT Practice 60 +#define DESCRIPTION Practice 60 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +#define MATRIX_COL_PINS { B11, B10, B1, B0, A7, A6, A5, A4, A3, A2, A1, A0, C15, C14 } +#define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 } +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_LEVELS 1 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + + + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* 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 diff --git a/keyboards/handwired/practice60/halconf.h b/keyboards/handwired/practice60/halconf.h new file mode 100644 index 0000000000..5fba285a38 --- /dev/null +++ b/keyboards/handwired/practice60/halconf.h @@ -0,0 +1,353 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @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 FALSE +#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 FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#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 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 FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI TRUE +#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 64 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 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 1 +#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 + +/*===========================================================================*/ +/* 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_ */ + +/** @} */ diff --git a/keyboards/handwired/practice60/hsv2rgb.c b/keyboards/handwired/practice60/hsv2rgb.c new file mode 100644 index 0000000000..adb7af8fa5 --- /dev/null +++ b/keyboards/handwired/practice60/hsv2rgb.c @@ -0,0 +1,80 @@ +/* hsv2rgb.c + * Integer only conversion functions between HSV and RGB + */ + +#include "hsv2rgb.h" + +// TODO fix these buggy macros +#define max(x,y) ((x>y) ? x:y) +#define min(x,y) ((x>y) ? y:x) +#define min3(x,y,z) (min(min(x,y),z)) +#define max3(x,y,z) (max(max(x,y),z)) + + +rgb_color hsv2rgb(hsv_color hsv) +{ + // From : http://qscribble.blogspot.fr/2008/06/integer-conversion-from-hsl-to-rgb.html + int h = hsv.h; + int s = hsv.s; + int v = hsv.v; + rgb_color rgb = {0, 0, 0}; + + if (v == 0) + return rgb; + + // sextant = 0 .. 5 + int sextant = (h*6)/256; + // f = 0 .. 42 + int f = h - (sextant*256)/6; + + int p = (v * (256 - s))/256; + int q = (v * (256*43 - s*f))/(256*43); + int t = (v * (256*43 - s*(43-f)))/(256*43); + + // Corrige les erreurs dues aux arrondis + p = max(min(p, 255), 0); + q = max(min(q, 255), 0); + t = max(min(t, 255), 0); + + switch(sextant){ + case 0: rgb.r = v; rgb.g = t; rgb.b = p; break; + case 1: rgb.r = q; rgb.g = v; rgb.b = p; break; + case 2: rgb.r = p; rgb.g = v; rgb.b = t; break; + case 3: rgb.r = p; rgb.g = q; rgb.b = v; break; + case 4: rgb.r = t; rgb.g = p; rgb.b = v; break; + default:rgb.r = v; rgb.g = p; rgb.b = q; break; + } + return rgb; +} + + +hsv_color rgb2hsv(rgb_color rgb) +{ + // From : http://www.ruinelli.ch/rgb-to-hsv + hsv_color hsv = {0, 0, 0}; + int min, max, delta; + + min = min3(rgb.r, rgb.g, rgb.b); + max = max3(rgb.r, rgb.g, rgb.b); + + if(max==0) { + hsv.h = 0; + hsv.s = 0; + hsv.v = 0; + return hsv; + } + + hsv.v = max; + delta = max - min; + + hsv.s = (delta)*255 / max; + + if(rgb.r == max) + hsv.h = (rgb.g - rgb.b)*42/delta; // between yellow & magenta + else if(rgb.g == max) + hsv.h = 120 + (rgb.b - rgb.r)*42/delta; // between cyan & yellow + else + hsv.h = 240 + (rgb.r - rgb.g)*42/delta; // between magenta & cyan + + return hsv; +} \ No newline at end of file diff --git a/keyboards/handwired/practice60/hsv2rgb.h b/keyboards/handwired/practice60/hsv2rgb.h new file mode 100644 index 0000000000..99566c32c0 --- /dev/null +++ b/keyboards/handwired/practice60/hsv2rgb.h @@ -0,0 +1,23 @@ +/* hsv2rgb.h + * Convert Hue Saturation Value to Red Green Blue + * + * Programme de convertion d'une information HSV en RGB + */ +#ifndef HSV2RGB_H +#define HSV2RGB_H + +typedef struct { + unsigned char h; + unsigned char s; + unsigned char v; +} hsv_color; + +typedef struct { + unsigned char r; + unsigned char g; + unsigned char b; +} rgb_color; + +rgb_color hsv2rgb(hsv_color hsv); + +#endif \ No newline at end of file diff --git a/keyboards/handwired/practice60/keymaps/default/keymap.c b/keyboards/handwired/practice60/keymaps/default/keymap.c new file mode 100644 index 0000000000..e15cd22307 --- /dev/null +++ b/keyboards/handwired/practice60/keymaps/default/keymap.c @@ -0,0 +1,48 @@ +/* +Copyright 2012,2013 Jun Wako + +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 . +*/ +#include QMK_KEYBOARD_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 _BASE 0 +#define _FN1 1 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_60_ansi( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , KC_RGUI , MO(_FN1) , KC_RCTL + ), + + [_FN1] = LAYOUT_60_ansi( + KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, \ + RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ + BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_GRV, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/handwired/practice60/ld/MKL26Z64.ld b/keyboards/handwired/practice60/ld/MKL26Z64.ld new file mode 100644 index 0000000000..c4ca8b874c --- /dev/null +++ b/keyboards/handwired/practice60/ld/MKL26Z64.ld @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com + * (C) 2016 flabbergast + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * KL26Z64 memory setup. + */ +MEMORY +{ + flash0 : org = 0x00000000, len = 0x100 + flash1 : org = 0x00000400, len = 0x10 + flash2 : org = 0x00000410, len = 62k - 0x410 + flash3 : org = 0x0000F800, len = 2k + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x1FFFF800, len = 8k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* Flash region for the configuration bytes.*/ +SECTIONS +{ + .cfmprotect : ALIGN(4) SUBALIGN(4) + { + KEEP(*(.cfmconfig)) + } > flash1 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash2); +REGION_ALIAS("XTORS_FLASH_LMA", flash2); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash2); +REGION_ALIAS("TEXT_FLASH_LMA", flash2); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash2); +REGION_ALIAS("RODATA_FLASH_LMA", flash2); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash2); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash2); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +__eeprom_workarea_start__ = ORIGIN(flash3); +__eeprom_workarea_size__ = LENGTH(flash3); +__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld new file mode 100644 index 0000000000..d0688ef601 --- /dev/null +++ b/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld @@ -0,0 +1,88 @@ +/* + 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. +*/ + +/* + * ST32F103xB memory setup for use with the maplemini bootloader. + * You will have to + * #define CORTEX_VTOR_INIT 0x5000 + * in your projects chconf.h + */ +MEMORY +{ + flash0 : org = 0x08002000, len = 64k - 0x2000 + flash1 : org = 0x00000000, len = 0 + flash2 : org = 0x00000000, len = 0 + flash3 : org = 0x00000000, len = 0 + flash4 : org = 0x00000000, len = 0 + flash5 : org = 0x00000000, len = 0 + flash6 : org = 0x00000000, len = 0 + flash7 : org = 0x00000000, len = 0 + ram0 : org = 0x20000000, len = 20k + ram1 : org = 0x00000000, len = 0 + ram2 : org = 0x00000000, len = 0 + ram3 : org = 0x00000000, len = 0 + ram4 : org = 0x00000000, len = 0 + ram5 : org = 0x00000000, len = 0 + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/handwired/practice60/led.c b/keyboards/handwired/practice60/led.c new file mode 100644 index 0000000000..f15baed169 --- /dev/null +++ b/keyboards/handwired/practice60/led.c @@ -0,0 +1,51 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#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(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(GPIOA, 8); + #endif +} + +void backlight_set(uint8_t level) { + printf("backlight_set(%d)\n", level); + #ifdef BACKLIGHT_ENABLE + if (level == 0) { + // Turn backlight off + palSetPad(GPIOA, 8); + } else { + // Turn backlight on + palClearPad(GPIOA, 8); + } + #endif +} + +void led_set(uint8_t usb_led) +{ + if (usb_led & (1</os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +MCU_FAMILY = STM32 +MCU_SERIES = STM32F1xx +# linker script to use +# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# startup code to use +# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +MCU_STARTUP = stm32f1xx +# it should exist either in /os/hal/boards/ +# or /boards +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m3 +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +ARMV = 7 +# If you want to be able to jump to bootloader from firmware on STM32 MCUs, +# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in +# ./bootloader_defs.h or in ./boards//bootloader_defs.h (if you have +# a custom board definition that you plan to reuse). +# If you're not setting it here, leave it commented out. +# It is chip dependent, the correct number can be looked up here (page 175): +# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf +# This also requires a patch to chibios: +# /tmk_core/tool/chibios/ch-bootloader-jump.patch +#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 + + +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = yes # Console for debug +COMMAND_ENABLE = yes # Commands for debug and configuration +SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = yes + +LAYOUTS = 60_ansi + +DEFAULT_FOLDER = handwired/practice60 diff --git a/keyboards/handwired/practice60/underglow.c b/keyboards/handwired/practice60/underglow.c new file mode 100644 index 0000000000..1383af1898 --- /dev/null +++ b/keyboards/handwired/practice60/underglow.c @@ -0,0 +1,157 @@ +#include "ch.h" +#include "hal.h" + +#include "hsv2rgb.h" +#include "underglow.h" + +#define BYTES_FOR_LED_BYTE 4 +#define NB_COLORS 3 +#define BYTES_FOR_LED BYTES_FOR_LED_BYTE*NB_COLORS +#define DATA_SIZE BYTES_FOR_LED*NB_LEDS +#define RESET_SIZE 200 +#define PREAMBLE_SIZE 4 + +// Define the spi your LEDs are plugged to here +#define LEDS_SPI SPID2 +// Define the number of LEDs you wish to control in your LED strip +#define NB_LEDS 8 + +#define LED_SPIRAL 1 + +static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE]; +static uint8_t get_protocol_eq(uint8_t data, int pos); + +/* + * This lib is meant to be used asynchronously, thus the colors contained in + * the txbuf will be sent in loop, so that the colors are always the ones you + * put in the table (the user thus have less to worry about) + * + * Since the data are sent via DMA, and the call to spiSend is a blocking one, + * the processor ressources are not used to much, if you see your program being + * too slow, simply add a: + * chThdSleepMilliseconds(x); + * after the spiSend, where you increment x untill you are satisfied with your + * program speed, another trick may be to lower this thread priority : your call + */ +static THD_WORKING_AREA(LEDS_THREAD_WA, 128); +static THD_FUNCTION(ledsThread, arg) { + (void) arg; + while(1){ + spiSend(&LEDS_SPI, PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE, txbuf); + } +} + +#if LED_SPIRAL +/* + * 'Led spiral' is a simple demo in which we put all the leds to the same + * color, where this color does all the hsv circle in loop. + * If you want to launch the thread that will chage the led colors to the + * appropriate value, simply set LED_SPIRAL to 1. + */ +static THD_WORKING_AREA(HSVTRANS_WA, 128); +static THD_FUNCTION(hsv_transThread, arg){ + (void) arg; + hsv_color color = {0, 255, 127}; + while(1){ + color.h += 1; + color.h %= 256; + set_leds_color_hsv(color); + chThdSleepMilliseconds(50); + } +} +#endif + +static const SPIConfig spicfg = { + NULL, + GPIOB, + 15, + SPI_CR1_BR_1|SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us +}; + +/* + * Function used to initialize the driver. + * + * Starts by shutting off all the LEDs. + * Then gets access on the LED_SPI driver. + * May eventually launch an animation on the LEDs (e.g. a thread setting the + * txbuff values) + */ +void leds_init(void){ + for(int i = 0; i < RESET_SIZE; i++) + txbuf[DATA_SIZE+i] = 0x00; + for (int i=0; i Date: Tue, 13 Nov 2018 00:46:01 +0000 Subject: [PATCH 0080/1763] Fixed incorrect link to feature_combo.md in features.md docs file. Was linked to feature_combos.md, but _sidebar.md, _summary.md, and config_options.md all link to feature_combo.md. Assuming that it should not be pluralized. (#4411) --- docs/features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features.md b/docs/features.md index 43d972e689..85f4cf6e00 100644 --- a/docs/features.md +++ b/docs/features.md @@ -8,7 +8,7 @@ QMK has a staggering number of features for building your keyboard. It can take * [Auto Shift](feature_auto_shift.md) - Tap for the normal key, hold slightly longer for its shifted state. * [Backlight](feature_backlight.md) - LED lighting support for your keyboard. * [Bootmagic](feature_bootmagic.md) - Adjust the behavior of your keyboard using hotkeys. -* [Combos](feature_combos.md) - Custom actions for multiple key holds. +* [Combos](feature_combo.md) - Custom actions for multiple key holds. * [Command](feature_command.md) - Runtime version of bootmagic (Formerly known as "Magic"). * [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself. * [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave. From 9b28dc84889357b9097ece2557c926ffa12a8479 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Mon, 12 Nov 2018 21:46:34 -0800 Subject: [PATCH 0081/1763] KBDFans KBD67 Support (#4412) * initial commit for kbd67 keyboard * add in a standard matrix * get the correct matrix for layout_all * add a layout_65_ansi LAYOUT macro * get a default keymap in * add caps lock led support * fix formatting of my name in the comments * add QMK Configurator support * turn on bootmagic --- keyboards/kbd67/config.h | 240 ++++++++++++++++++++++ keyboards/kbd67/info.json | 16 ++ keyboards/kbd67/kbd67.c | 51 +++++ keyboards/kbd67/kbd67.h | 59 ++++++ keyboards/kbd67/keymaps/default/config.h | 19 ++ keyboards/kbd67/keymaps/default/keymap.c | 99 +++++++++ keyboards/kbd67/keymaps/default/readme.md | 1 + keyboards/kbd67/readme.md | 15 ++ keyboards/kbd67/rules.mk | 80 ++++++++ 9 files changed, 580 insertions(+) create mode 100644 keyboards/kbd67/config.h create mode 100644 keyboards/kbd67/info.json create mode 100644 keyboards/kbd67/kbd67.c create mode 100644 keyboards/kbd67/kbd67.h create mode 100644 keyboards/kbd67/keymaps/default/config.h create mode 100644 keyboards/kbd67/keymaps/default/keymap.c create mode 100644 keyboards/kbd67/keymaps/default/readme.md create mode 100644 keyboards/kbd67/readme.md create mode 100644 keyboards/kbd67/rules.mk diff --git a/keyboards/kbd67/config.h b/keyboards/kbd67/config.h new file mode 100644 index 0000000000..2e3cf85c38 --- /dev/null +++ b/keyboards/kbd67/config.h @@ -0,0 +1,240 @@ +/* +Copyright 2018 MechMerlin + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER kbdfans +#define PRODUCT kbd67 +#define DESCRIPTION 65% Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4, F5 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +#define RGB_DI_PIN E2 +#ifdef RGB_DI_PIN + #define RGBLED_NUM 20 + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LIMIT_VAL 180 /* The maximum brightness level */ + // #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +/*== all animations enable ==*/ + #define RGBLIGHT_ANIMATIONS +/*== or choose animations ==*/ + // #define RGBLIGHT_EFFECT_BREATHING + // #define RGBLIGHT_EFFECT_RAINBOW_MOOD + // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + // #define RGBLIGHT_EFFECT_SNAKE + // #define RGBLIGHT_EFFECT_KNIGHT + // #define RGBLIGHT_EFFECT_CHRISTMAS + // #define RGBLIGHT_EFFECT_STATIC_GRADIENT + // #define RGBLIGHT_EFFECT_RGB_TEST + // #define RGBLIGHT_EFFECT_ALTERNATING +#endif + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + +/* Bootmagic Lite key configuration */ +// #define BOOTMAGIC_LITE_ROW 0 +// #define BOOTMAGIC_LITE_COLUMN 0 diff --git a/keyboards/kbd67/info.json b/keyboards/kbd67/info.json new file mode 100644 index 0000000000..70a926a7f1 --- /dev/null +++ b/keyboards/kbd67/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "kbd67", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 5, + "layouts": { + "LAYOUT_all": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":7.75, "y":4, "w":2.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + }, + + "LAYOUT_65_ansi": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} diff --git a/keyboards/kbd67/kbd67.c b/keyboards/kbd67/kbd67.c new file mode 100644 index 0000000000..5e0369673b --- /dev/null +++ b/keyboards/kbd67/kbd67.c @@ -0,0 +1,51 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "kbd67.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 + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 2); + PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); + PORTB &= ~(1 << 2); + } + + led_set_user(usb_led); +} diff --git a/keyboards/kbd67/kbd67.h b/keyboards/kbd67/kbd67.h new file mode 100644 index 0000000000..4a98c66f7a --- /dev/null +++ b/keyboards/kbd67/kbd67.h @@ -0,0 +1,59 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef KBD67_H +#define KBD67_H + +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \ + K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \ + K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \ + K40, K41, K43, K44, K46, K48, K4A, K4B, K4C, K4D, K4E, K4F \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \ + { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \ + { K40, K41, KC_NO, K43, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, K4E, K4F }, \ +} + +#define LAYOUT_65_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, \ + K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \ + K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \ + K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E, K4F \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E, K0F }, \ + { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \ + { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \ + { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E, K4F }, \ +} + +#endif diff --git a/keyboards/kbd67/keymaps/default/config.h b/keyboards/kbd67/keymaps/default/config.h new file mode 100644 index 0000000000..a3ed4f762a --- /dev/null +++ b/keyboards/kbd67/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 MechMerlin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/kbd67/keymaps/default/keymap.c b/keyboards/kbd67/keymaps/default/keymap.c new file mode 100644 index 0000000000..89fa9a534d --- /dev/null +++ b/keyboards/kbd67/keymaps/default/keymap.c @@ -0,0 +1,99 @@ +/* Copyright 2018 'mechmerlin' + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap (Base Layer) Default Layer + * ,----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn| + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | + * `----------------------------------------------------------------' + */ +[0] = LAYOUT_65_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_HOME, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, \ + KC_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_PGDN, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap Fn Layer + * ,----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins | + * |----------------------------------------------------------------| + * | | |Up | | | | | | | | | | | |Hme | + * |----------------------------------------------------------------| + * | |<- |Dn | ->| | | | | | | | | |End | + * |----------------------------------------------------------------| + * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR | + * |----------------------------------------------------------------| + * | | | | | | | |MsL|MsD|MsR | + * `----------------------------------------------------------------' + */ +[1] = LAYOUT_65_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,KC_INS, \ + KC_CAPS,_______, KC_UP,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP,_______, _______,_______, \ + _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,_______,_______,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______, KC_END,KC_PGDN,KC_DOWN, _______,KC_PGUP,_______, \ + _______, _______, _______, _______, _______,_______,_______,KC_HOME,KC_PGDN, KC_END), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/kbd67/keymaps/default/readme.md b/keyboards/kbd67/keymaps/default/readme.md new file mode 100644 index 0000000000..2cb43c5e1a --- /dev/null +++ b/keyboards/kbd67/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for kbd67 diff --git a/keyboards/kbd67/readme.md b/keyboards/kbd67/readme.md new file mode 100644 index 0000000000..734b1a63ae --- /dev/null +++ b/keyboards/kbd67/readme.md @@ -0,0 +1,15 @@ +# kbd67 + +![kbd67](imgur.com image replace me!) + +65% keyboard with blocker. + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: KBD67 PCB +Hardware Availability: [KBDFans](https://kbdfans.cn/products/coming-soon-kbd67-mechanical-keyboard-diy-kit) + +Make example for this keyboard (after setting up your build environment): + + make kbd67:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/kbd67/rules.mk b/keyboards/kbd67/rules.mk new file mode 100644 index 0000000000..9d25d7b21a --- /dev/null +++ b/keyboards/kbd67/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = atmel-dfu + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From 709bf386f4429687a8ec73ebd29193e5f209461b Mon Sep 17 00:00:00 2001 From: Andrew Kannan Date: Tue, 13 Nov 2018 01:03:48 -0500 Subject: [PATCH 0082/1763] Update Practice60 to use MT feature and revise system ticks (#4413) * Update Practice60 to use MT feature and revise system tics * Increase system tick frequency 10,000 instead of 10,000 --- keyboards/handwired/practice60/chconf.h | 6 +++--- keyboards/handwired/practice60/keymaps/default/keymap.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/handwired/practice60/chconf.h b/keyboards/handwired/practice60/chconf.h index dfb1f9dfb9..bbd9b2da62 100644 --- a/keyboards/handwired/practice60/chconf.h +++ b/keyboards/handwired/practice60/chconf.h @@ -41,14 +41,14 @@ * @brief System time counter resolution. * @note Allowed values are 16 or 32 bits. */ -#define CH_CFG_ST_RESOLUTION 16 +#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 2000 +#define CH_CFG_ST_FREQUENCY 100000 /** * @brief Time delta constant for the tick-less mode. @@ -58,7 +58,7 @@ * The value one is not valid, timeouts are rounded up to * this value. */ -#define CH_CFG_ST_TIMEDELTA 2 +#define CH_CFG_ST_TIMEDELTA 0 /** @} */ diff --git a/keyboards/handwired/practice60/keymaps/default/keymap.c b/keyboards/handwired/practice60/keymaps/default/keymap.c index e15cd22307..afea72b116 100644 --- a/keyboards/handwired/practice60/keymaps/default/keymap.c +++ b/keyboards/handwired/practice60/keymaps/default/keymap.c @@ -32,7 +32,7 @@ enum custom_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_60_ansi( KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MT(MOD_LSFT, 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_SPC , KC_RALT , KC_RGUI , MO(_FN1) , KC_RCTL From 7e87532ec261bcc30d7fa5dfc5bf6427e2d3d36e Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Tue, 13 Nov 2018 08:26:55 -0800 Subject: [PATCH 0083/1763] converter/ibm_terminal Refactor and Configurator support (#4414) * IBM Terminal converter: layout macro refactor - Renamed KEYMAP to LAYOUT - Renamed KEYMAP_101 to LAYOUT_101 - minor matrix array fixes * IBM Terminal converter: default keymap refactor - Updated layout macro names - Updated to #include QMK_KEYBOARD_H - config.h updated to use #pragma once * IBM Terminal converter: priyadi keymap refactor - Updated layout macro names - Updated to #include QMK_KEYBOARD_H - Removed redundant KC_TRNS and KC_NO defines - config.h updated to use #pragma once * IBM Terminal converter: Configurator support * IBM Terminal converter: readme cleanup Updated markdown formatting. * IBM Terminal converter: readme rename Renamed file to fully lowercase. --- keyboards/converter/ibm_terminal/README.md | 40 --- .../converter/ibm_terminal/ibm_terminal.h | 10 +- keyboards/converter/ibm_terminal/info.json | 245 ++++++++++++++++++ .../ibm_terminal/keymaps/default/config.h | 7 +- .../ibm_terminal/keymaps/default/keymap.c | 12 +- .../ibm_terminal/keymaps/priyadi/config.h | 7 +- .../ibm_terminal/keymaps/priyadi/keymap.c | 28 +- keyboards/converter/ibm_terminal/readme.md | 39 +++ 8 files changed, 305 insertions(+), 83 deletions(-) delete mode 100644 keyboards/converter/ibm_terminal/README.md create mode 100644 keyboards/converter/ibm_terminal/info.json create mode 100644 keyboards/converter/ibm_terminal/readme.md diff --git a/keyboards/converter/ibm_terminal/README.md b/keyboards/converter/ibm_terminal/README.md deleted file mode 100644 index dff26e0594..0000000000 --- a/keyboards/converter/ibm_terminal/README.md +++ /dev/null @@ -1,40 +0,0 @@ -Keyboard converter for IBM terminal keyboard -============================================ - -This is a port of TMK's converter/terminal_usb to QMK. - -It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy. -I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys). - -Source code: https://github.com/qmk/qmk_firmware.git -Article: http://geekhack.org/index.php?topic=27272.0 - - -CONNECTION ----------- -Keyboard ATMega32U4 ----------------------- -Data: PD2 -Clock: PD5 - -And VCC and GND, of course. See RESOURCE for keyboard connector pin assign. - - -BUILD ------ -$ git clone https://github.com/qmk/qmk_firmware.git -$ cd qmk_firmware -$ make converter/ibm_terminal:default - - -RESOURCE --------- -Soarer's Converter: http://geekhack.org/index.php?topic=17458.0 -102keys(1392595): http://geekhack.org/index.php?topic=10737.0 -122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html -KbdBabel: http://www.kbdbabel.org/ -RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png -DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png -WinAVR: http://winavr.sourceforge.net/ - -EOF diff --git a/keyboards/converter/ibm_terminal/ibm_terminal.h b/keyboards/converter/ibm_terminal/ibm_terminal.h index c6468349ca..adf048206e 100644 --- a/keyboards/converter/ibm_terminal/ibm_terminal.h +++ b/keyboards/converter/ibm_terminal/ibm_terminal.h @@ -19,7 +19,7 @@ void matrix_init_user(void); * 17| | * +---------+ */ -#define KEYMAP( \ +#define LAYOUT( \ K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F, \ K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, \ \ @@ -45,13 +45,13 @@ void matrix_init_user(void); { K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \ { K70, K71, K72, K73, K74, K75, K76, K77 }, \ { K78, K79, K7A, K7B, K7C, K7D, K7E, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO,}, \ + { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO } \ } /* * IBM Terminal keyboard 1399625, 101-key */ -#define KEYMAP_101( \ +#define LAYOUT_101( \ K08, K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, K57,K5F,K62, \ \ K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, K67,K6E,K6F, K76,K77,K7E,K84, \ @@ -76,7 +76,7 @@ void matrix_init_user(void); { KC_NO, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \ { K70, K71, K72, K73, K74, K75, K76, K77 }, \ { KC_NO, K79, K7A, KC_NO, K7C, K7D, K7E, KC_NO }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO,}, \ + { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO } \ } -#endif \ No newline at end of file +#endif diff --git a/keyboards/converter/ibm_terminal/info.json b/keyboards/converter/ibm_terminal/info.json new file mode 100644 index 0000000000..f064f3c5bd --- /dev/null +++ b/keyboards/converter/ibm_terminal/info.json @@ -0,0 +1,245 @@ +{ + "keyboard_name": "Keyboard converter for IBM terminal keyboard", + "url": "", + "maintainer": "qmk", + "width": 24.75, + "height": 8, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"F13", "x":3.25, "y":0}, + {"label":"F14", "x":4.25, "y":0}, + {"label":"F15", "x":5.25, "y":0}, + {"label":"F16", "x":6.25, "y":0}, + {"label":"F17", "x":7.25, "y":0}, + {"label":"F18", "x":8.25, "y":0}, + {"label":"F19", "x":9.25, "y":0}, + {"label":"F20", "x":10.25, "y":0}, + {"label":"F21", "x":11.25, "y":0}, + {"label":"F22", "x":12.25, "y":0}, + {"label":"F23", "x":13.25, "y":0}, + {"label":"F24", "x":14.25, "y":0}, + {"label":"F1", "x":3.25, "y":1}, + {"label":"F2", "x":4.25, "y":1}, + {"label":"F3", "x":5.25, "y":1}, + {"label":"F4", "x":6.25, "y":1}, + {"label":"F5", "x":7.25, "y":1}, + {"label":"F6", "x":8.25, "y":1}, + {"label":"F7", "x":9.25, "y":1}, + {"label":"F8", "x":10.25, "y":1}, + {"label":"F9", "x":11.25, "y":1}, + {"label":"F10", "x":12.25, "y":1}, + {"label":"F11", "x":13.25, "y":1}, + {"label":"F12", "x":14.25, "y":1}, + {"label":"Print Screen", "x":0, "y":3}, + {"label":"Esc", "x":1, "y":3}, + {"label":"Esc", "x":2.25, "y":3}, + {"label":"1", "x":3.25, "y":3}, + {"label":"2", "x":4.25, "y":3}, + {"label":"3", "x":5.25, "y":3}, + {"label":"4", "x":6.25, "y":3}, + {"label":"5", "x":7.25, "y":3}, + {"label":"6", "x":8.25, "y":3}, + {"label":"7", "x":9.25, "y":3}, + {"label":"8", "x":10.25, "y":3}, + {"label":"9", "x":11.25, "y":3}, + {"label":"0", "x":12.25, "y":3}, + {"label":"-", "x":13.25, "y":3}, + {"label":"=", "x":14.25, "y":3}, + {"label":"No", "x":15.25, "y":3}, + {"label":"Back Space", "x":16.25, "y":3}, + {"label":"Insert", "x":17.5, "y":3}, + {"label":"Home", "x":18.5, "y":3}, + {"label":"Page Up", "x":19.5, "y":3}, + {"label":"Num Lock", "x":20.75, "y":3}, + {"label":"/", "x":21.75, "y":3}, + {"label":"*", "x":22.75, "y":3}, + {"label":"-", "x":23.75, "y":3}, + {"label":"Scroll Lock", "x":0, "y":4}, + {"label":"Int4", "x":1, "y":4}, + {"label":"Tab", "x":2.25, "y":4, "w":1.5}, + {"label":"Q", "x":3.75, "y":4}, + {"label":"W", "x":4.75, "y":4}, + {"label":"E", "x":5.75, "y":4}, + {"label":"R", "x":6.75, "y":4}, + {"label":"T", "x":7.75, "y":4}, + {"label":"Y", "x":8.75, "y":4}, + {"label":"U", "x":9.75, "y":4}, + {"label":"I", "x":10.75, "y":4}, + {"label":"O", "x":11.75, "y":4}, + {"label":"P", "x":12.75, "y":4}, + {"label":"[", "x":13.75, "y":4}, + {"label":"]", "x":14.75, "y":4}, + {"label":"No", "x":15.75, "y":4, "w":1.5}, + {"label":"Delete", "x":17.5, "y":4}, + {"label":"End", "x":18.5, "y":4}, + {"label":"Page Down", "x":19.5, "y":4}, + {"label":"7", "x":20.75, "y":4}, + {"label":"8", "x":21.75, "y":4}, + {"label":"9", "x":22.75, "y":4}, + {"label":"+", "x":23.75, "y":4}, + {"label":"Pause", "x":0, "y":5}, + {"label":"Int5", "x":1, "y":5}, + {"label":"Caps Lock", "x":2.25, "y":5, "w":1.75}, + {"label":"A", "x":4, "y":5}, + {"label":"S", "x":5, "y":5}, + {"label":"D", "x":6, "y":5}, + {"label":"F", "x":7, "y":5}, + {"label":"G", "x":8, "y":5}, + {"label":"H", "x":9, "y":5}, + {"label":"J", "x":10, "y":5}, + {"label":"K", "x":11, "y":5}, + {"label":"L", "x":12, "y":5}, + {"label":";", "x":13, "y":5}, + {"label":"'", "x":14, "y":5}, + {"label":"\\", "x":15, "y":5}, + {"label":"Enter", "x":16, "y":5, "w":1.25}, + {"label":"Up", "x":18.5, "y":5}, + {"label":"4", "x":20.75, "y":5}, + {"label":"5", "x":21.75, "y":5}, + {"label":"6", "x":22.75, "y":5}, + {"label":",", "x":23.75, "y":5}, + {"label":"App", "x":0, "y":6}, + {"label":"Int6", "x":1, "y":6}, + {"label":"Shift", "x":2.25, "y":6, "w":1.25}, + {"label":"ISO \\", "x":3.5, "y":6}, + {"label":"Z", "x":4.5, "y":6}, + {"label":"X", "x":5.5, "y":6}, + {"label":"C", "x":6.5, "y":6}, + {"label":"V", "x":7.5, "y":6}, + {"label":"B", "x":8.5, "y":6}, + {"label":"N", "x":9.5, "y":6}, + {"label":"M", "x":10.5, "y":6}, + {"label":",", "x":11.5, "y":6}, + {"label":".", "x":12.5, "y":6}, + {"label":"/", "x":13.5, "y":6}, + {"label":"No", "x":14.5, "y":6}, + {"label":"Shift", "x":15.5, "y":6, "w":1.75}, + {"label":"Left", "x":17.5, "y":6}, + {"label":"Int2", "x":18.5, "y":6}, + {"label":"Right", "x":19.5, "y":6}, + {"label":"1", "x":20.75, "y":6}, + {"label":"2", "x":21.75, "y":6}, + {"label":"3", "x":22.75, "y":6}, + {"label":"Enter", "x":23.75, "y":6}, + {"label":"RGUI", "x":0, "y":7}, + {"label":"lgui", "x":1, "y":7}, + {"label":"Ctrl", "x":2.25, "y":7, "w":1.5}, + {"label":"Alt", "x":4.75, "y":7, "w":1.5}, + {"label":"Space", "x":6.25, "y":7, "w":7}, + {"label":"Alt", "x":13.25, "y":7, "w":1.5}, + {"label":"Ctrl", "x":15.75, "y":7, "w":1.5}, + {"label":"Down", "x":18.5, "y":7}, + {"label":"No", "x":20.75, "y":7}, + {"label":"0", "x":21.75, "y":7}, + {"label":".", "x":22.75, "y":7}, + {"label":"No", "x":23.75, "y":7} + ] + }, + "LAYOUT_101": { + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":2, "y":0}, + {"label":"F2", "x":3, "y":0}, + {"label":"F3", "x":4, "y":0}, + {"label":"F4", "x":5, "y":0}, + {"label":"F5", "x":6.5, "y":0}, + {"label":"F6", "x":7.5, "y":0}, + {"label":"F7", "x":8.5, "y":0}, + {"label":"F8", "x":9.5, "y":0}, + {"label":"F9", "x":11, "y":0}, + {"label":"F10", "x":12, "y":0}, + {"label":"F11", "x":13, "y":0}, + {"label":"F12", "x":14, "y":0}, + {"label":"Print Screen", "x":15.25, "y":0}, + {"label":"Scroll Lock", "x":16.25, "y":0}, + {"label":"Pause", "x":17.25, "y":0}, + {"label":"`", "x":0, "y":2}, + {"label":"1", "x":1, "y":2}, + {"label":"2", "x":2, "y":2}, + {"label":"3", "x":3, "y":2}, + {"label":"4", "x":4, "y":2}, + {"label":"5", "x":5, "y":2}, + {"label":"6", "x":6, "y":2}, + {"label":"7", "x":7, "y":2}, + {"label":"8", "x":8, "y":2}, + {"label":"9", "x":9, "y":2}, + {"label":"0", "x":10, "y":2}, + {"label":"-", "x":11, "y":2}, + {"label":"=", "x":12, "y":2}, + {"label":"Back Space", "x":13, "y":2, "w":2}, + {"label":"Insert", "x":15.25, "y":2}, + {"label":"Home", "x":16.25, "y":2}, + {"label":"Page Up", "x":17.25, "y":2}, + {"label":"Num Lock", "x":18.5, "y":2}, + {"label":"/", "x":19.5, "y":2}, + {"label":"*", "x":20.5, "y":2}, + {"label":"-", "x":21.5, "y":2}, + {"label":"Tab", "x":0, "y":3, "w":1.5}, + {"label":"Q", "x":1.5, "y":3}, + {"label":"W", "x":2.5, "y":3}, + {"label":"E", "x":3.5, "y":3}, + {"label":"R", "x":4.5, "y":3}, + {"label":"T", "x":5.5, "y":3}, + {"label":"Y", "x":6.5, "y":3}, + {"label":"U", "x":7.5, "y":3}, + {"label":"I", "x":8.5, "y":3}, + {"label":"O", "x":9.5, "y":3}, + {"label":"P", "x":10.5, "y":3}, + {"label":"[", "x":11.5, "y":3}, + {"label":"]", "x":12.5, "y":3}, + {"label":"\\", "x":13.5, "y":3, "w":1.5}, + {"label":"Delete", "x":15.25, "y":3}, + {"label":"End", "x":16.25, "y":3}, + {"label":"Page Down", "x":17.25, "y":3}, + {"label":"7", "x":18.5, "y":3}, + {"label":"8", "x":19.5, "y":3}, + {"label":"9", "x":20.5, "y":3}, + {"label":"Caps Lock", "x":0, "y":4, "w":1.75}, + {"label":"A", "x":1.75, "y":4}, + {"label":"S", "x":2.75, "y":4}, + {"label":"D", "x":3.75, "y":4}, + {"label":"F", "x":4.75, "y":4}, + {"label":"G", "x":5.75, "y":4}, + {"label":"H", "x":6.75, "y":4}, + {"label":"J", "x":7.75, "y":4}, + {"label":"K", "x":8.75, "y":4}, + {"label":"L", "x":9.75, "y":4}, + {"label":";", "x":10.75, "y":4}, + {"label":"'", "x":11.75, "y":4}, + {"label":"Enter", "x":12.75, "y":4, "w":2.25}, + {"label":"4", "x":18.5, "y":4}, + {"label":"5", "x":19.5, "y":4}, + {"label":"6", "x":20.5, "y":4}, + {"label":"+", "x":21.5, "y":3, "h":2}, + {"label":"Shift", "x":0, "y":5, "w":2.25}, + {"label":"Z", "x":2.25, "y":5}, + {"label":"X", "x":3.25, "y":5}, + {"label":"C", "x":4.25, "y":5}, + {"label":"V", "x":5.25, "y":5}, + {"label":"B", "x":6.25, "y":5}, + {"label":"N", "x":7.25, "y":5}, + {"label":"M", "x":8.25, "y":5}, + {"label":",", "x":9.25, "y":5}, + {"label":".", "x":10.25, "y":5}, + {"label":"/", "x":11.25, "y":5}, + {"label":"Shift", "x":12.25, "y":5, "w":2.75}, + {"label":"Up", "x":16.25, "y":5}, + {"label":"1", "x":18.5, "y":5}, + {"label":"2", "x":19.5, "y":5}, + {"label":"3", "x":20.5, "y":5}, + {"label":"Ctrl", "x":0, "y":6, "w":1.5}, + {"label":"Alt", "x":2.5, "y":6, "w":1.5}, + {"label":"Space", "x":4, "y":6, "w":7}, + {"label":"Alt", "x":11, "y":6, "w":1.5}, + {"label":"Ctrl", "x":13.5, "y":6, "w":1.5}, + {"label":"Left", "x":15.25, "y":6}, + {"label":"Down", "x":16.25, "y":6}, + {"label":"Right", "x":17.25, "y":6}, + {"label":"0", "x":18.5, "y":6, "w":2}, + {"label":".", "x":20.5, "y":6}, + {"label":"Enter", "x":21.5, "y":5, "h":2} + ] + } + } +} diff --git a/keyboards/converter/ibm_terminal/keymaps/default/config.h b/keyboards/converter/ibm_terminal/keymaps/default/config.h index 7fa3bf328e..271f48d001 100644 --- a/keyboards/converter/ibm_terminal/keymaps/default/config.h +++ b/keyboards/converter/ibm_terminal/keymaps/default/config.h @@ -1,6 +1,3 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once -#include "../../config.h" - -#endif +// place overrides here diff --git a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c index 2beb51106e..59187ef339 100644 --- a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c +++ b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c @@ -15,18 +15,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include -#include -#include "keycode.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "ibm_terminal.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Layer 0 - KEYMAP( + LAYOUT( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, @@ -56,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----' `---------------------------------------' `----' `-----------' `---------------' */ /* - KEYMAP_101( + LAYOUT_101( 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_BRK, 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_NLCK,KC_PSLS,KC_PAST,KC_PMNS, diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h index 7fa3bf328e..271f48d001 100644 --- a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h +++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h @@ -1,6 +1,3 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H +#pragma once -#include "../../config.h" - -#endif +// place overrides here diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c index 47a5181dde..3d6da6eab8 100644 --- a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c +++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c @@ -15,17 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "keycode.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "ibm_terminal.h" -#include "action_layer.h" - -// Fillers to make layering clearer - -#define _______ KC_TRNS -#define XXXXXXX KC_NO +#include QMK_KEYBOARD_H enum layers { QWE, // qwerty @@ -159,7 +149,7 @@ const uint32_t PROGMEM unicode_map[] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* qwerty */ - [QWE] = KEYMAP( + [QWE] = LAYOUT( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_PSCR, KC_SLCK, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, @@ -171,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* colemak */ - [COL] = KEYMAP( + [COL] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -183,7 +173,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* workman */ - [WOR] = KEYMAP( + [WOR] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -195,7 +185,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* dvorak */ - [DVO] = KEYMAP( + [DVO] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -207,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* system */ - [SYS] = KEYMAP( + [SYS] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -219,7 +209,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* mouse keys */ - [MOU] = KEYMAP( + [MOU] = LAYOUT( XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, @@ -231,7 +221,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* emoji */ - [EMO] = KEYMAP( + [EMO] = LAYOUT( XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, @@ -243,7 +233,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* - [XXX] = KEYMAP( + [XXX] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, diff --git a/keyboards/converter/ibm_terminal/readme.md b/keyboards/converter/ibm_terminal/readme.md new file mode 100644 index 0000000000..b781b04687 --- /dev/null +++ b/keyboards/converter/ibm_terminal/readme.md @@ -0,0 +1,39 @@ +# Keyboard converter for IBM terminal keyboard + +This is a port of TMK's converter/terminal_usb to QMK. + +It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy. +I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys). + +Source code: https://github.com/qmk/qmk_firmware.git +Article: http://geekhack.org/index.php?topic=27272.0 + + +## Connection + +Keyboard | ATMega32U4 +:------- | :--------- +Data | PD2 +Clock | PD5 + +And VCC and GND, of course. See Resource section for keyboard connector pin assign. + + +## Build + +``` +git clone https://github.com/qmk/qmk_firmware.git +cd qmk_firmware +make converter/ibm_terminal:default +``` + +## Resource + +- Soarer's Converter: http://geekhack.org/index.php?topic=17458.0 +- 102keys(1392595): http://geekhack.org/index.php?topic=10737.0 +- 122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html +- KbdBabel: http://www.kbdbabel.org/ +- RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png +- DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png +- WinAVR: http://winavr.sourceforge.net/ + From caa293a8f77447891b02d5f8c91b209f9a082cc9 Mon Sep 17 00:00:00 2001 From: Junya Ogura <5352+juno@users.noreply.github.com> Date: Wed, 14 Nov 2018 01:27:46 +0900 Subject: [PATCH 0084/1763] Remove duplicate row from Available functions table in i2c_driver doc (#4416) --- docs/i2c_driver.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md index f69eb5a9da..ea24dc64f3 100644 --- a/docs/i2c_driver.md +++ b/docs/i2c_driver.md @@ -8,7 +8,6 @@ The I2C Master drivers used in QMK have a set of common functions to allow porta |------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |`void i2c_init(void);` |Initializes the I2C driver. This function should be called once before any transaction is initiated. | |`uint8_t i2c_start(uint8_t address);` |Starts an I2C transaction. Address is the 7-bit slave address without the direction bit. | -|`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. | |`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. Returns status of transaction. | |`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. | |`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. | From 2dea540afbfcffaea82f70b6642c39aedb9e3b5b Mon Sep 17 00:00:00 2001 From: Wilba Date: Wed, 14 Nov 2018 03:31:25 +1100 Subject: [PATCH 0085/1763] Refactoring M6-A, M6-B, Zeal60, Zeal65, WT60-A, WT65-A, WT80-A (#4417) * Refactored M6-B to use Zeal60 RGB backlight code * Fixed M6-B LED co-ordinates * Minor changes to RGB config for Zeal65 * Added dynamic keymaps to WT80-A, WT60-A, WT-80A, U80-A --- keyboards/rama/m6_a/config.h | 113 ++------- keyboards/rama/m6_a/rules.mk | 32 ++- keyboards/rama/m6_b/config.h | 33 ++- keyboards/rama/m6_b/m6_b.c | 216 +----------------- keyboards/rama/m6_b/m6_b_api.h | 39 ---- keyboards/rama/m6_b/rgb_backlight.c | 139 ----------- keyboards/rama/m6_b/rgb_backlight.h | 34 --- keyboards/rama/m6_b/rules.mk | 24 +- keyboards/rama/u80_a/config.h | 17 ++ keyboards/rama/u80_a/keymaps/default/keymap.c | 15 ++ keyboards/rama/u80_a/rules.mk | 12 +- keyboards/wilba_tech/wt60_a/config.h | 17 ++ keyboards/wilba_tech/wt60_a/rules.mk | 11 +- keyboards/wilba_tech/wt65_a/config.h | 17 ++ keyboards/wilba_tech/wt65_a/rules.mk | 11 +- keyboards/wilba_tech/wt80_a/config.h | 17 ++ .../wt80_a/keymaps/default/keymap.c | 16 ++ keyboards/wilba_tech/wt80_a/rules.mk | 11 +- keyboards/wilba_tech/wt80_a/wt80_a.h | 15 ++ keyboards/wilba_tech/wt_main.c | 155 ++++++++++++- keyboards/zeal60/rgb_backlight.c | 122 +++++++--- keyboards/zeal60/zeal60.c | 1 + keyboards/zeal65/config.h | 8 +- 23 files changed, 468 insertions(+), 607 deletions(-) delete mode 100644 keyboards/rama/m6_b/m6_b_api.h delete mode 100644 keyboards/rama/m6_b/rgb_backlight.c delete mode 100644 keyboards/rama/m6_b/rgb_backlight.h diff --git a/keyboards/rama/m6_a/config.h b/keyboards/rama/m6_a/config.h index 8d77f5339d..63da792745 100644 --- a/keyboards/rama/m6_a/config.h +++ b/keyboards/rama/m6_a/config.h @@ -1,20 +1,18 @@ -/* -Copyright 2018 Wilba - -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 . -*/ - +/* Copyright 2018 Jason Williams (Wilba) + * + * 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 . + */ #pragma once #include "config_common.h" @@ -47,7 +45,7 @@ along with this program. If not, see . /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION COL2ROW - + // #define BACKLIGHT_PIN B7 // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 @@ -109,88 +107,10 @@ along with this program. If not, see . 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 - -/* - * 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 - #define RGB_BACKLIGHT_ENABLED 0 #define DYNAMIC_KEYMAP_LAYER_COUNT 4 - // EEPROM usage // TODO: refactor with new user EEPROM code (coming soon) @@ -206,3 +126,4 @@ along with this program. If not, see . #define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 // Dynamic keymap starts after backlight config (35+37) #define DYNAMIC_KEYMAP_EEPROM_ADDR 72 + diff --git a/keyboards/rama/m6_a/rules.mk b/keyboards/rama/m6_a/rules.mk index ed85ac36d0..ff17069182 100644 --- a/keyboards/rama/m6_a/rules.mk +++ b/keyboards/rama/m6_a/rules.mk @@ -1,5 +1,5 @@ # project specific files -SRC = keyboards/rama/m6_b/m6_b.c +SRC = ../zeal60/zeal60.c # MCU name MCU = atmega32u4 @@ -43,24 +43,32 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Boot Section BOOTLOADER = atmel-dfu +# Do not put the microcontroller into power saving mode +# when we get USB suspend event. We want it to keep updating +# backlight effects. +OPT_DEFS += -DNO_SUSPEND_POWER_DOWN + + # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +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) +CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +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 # 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 -AUDIO_ENABLE = no # Audio output on port C6 -FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend RAW_ENABLE = yes -DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file +DYNAMIC_KEYMAP_ENABLE = yes +CIE1931_CURVE = no + diff --git a/keyboards/rama/m6_b/config.h b/keyboards/rama/m6_b/config.h index 1adaad3f9e..c016703e04 100644 --- a/keyboards/rama/m6_b/config.h +++ b/keyboards/rama/m6_b/config.h @@ -109,8 +109,38 @@ #define RGB_BACKLIGHT_ENABLED 1 -#define DYNAMIC_KEYMAP_LAYER_COUNT 4 +// This conditionally compiles the backlight code for M6-B specifics +#define RGB_BACKLIGHT_M6_B + +// enable/disable LEDs based on layout +#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0 +#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0 +#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0 +#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0 +#define RGB_BACKLIGHT_USE_ISO_ENTER 0 +#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0 + +// disable backlight when USB suspended (PC sleep/hibernate/shutdown) +#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0 + +// disable backlight after timeout in minutes, 0 = no timeout +#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0 + +// the default effect (RGB test) +#define RGB_BACKLIGHT_EFFECT 255 + +// These define which keys in the matrix are alphas/mods +// Used for backlight effects so colors are different for +// alphas vs. mods +// Each value is for a row, bit 0 is column 0 +// Alpha=0 Mod=1 +#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0 +#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0 +#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0 +#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0 +#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0 +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 // EEPROM usage @@ -127,3 +157,4 @@ #define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 // Dynamic keymap starts after backlight config (35+37) #define DYNAMIC_KEYMAP_EEPROM_ADDR 72 + diff --git a/keyboards/rama/m6_b/m6_b.c b/keyboards/rama/m6_b/m6_b.c index e7cd2f6287..581b31d753 100644 --- a/keyboards/rama/m6_b/m6_b.c +++ b/keyboards/rama/m6_b/m6_b.c @@ -13,218 +13,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "m6_b.h" -#include "m6_b_api.h" - -// Check that no backlight functions are called -#if RGB_BACKLIGHT_ENABLED -#include "rgb_backlight.h" -#endif // RGB_BACKLIGHT_ENABLED - -#include "raw_hid.h" -#include "dynamic_keymap.h" -#include "timer.h" -#include "tmk_core/common/eeprom.h" - -bool eeprom_is_valid(void) -{ - return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC && - eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION); -} - -void eeprom_set_valid(bool valid) -{ - eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF); - eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF); -} - -void eeprom_reset(void) -{ - // Set the keyboard-specific EEPROM state as invalid. - eeprom_set_valid(false); - // Set the TMK/QMK EEPROM state as invalid. - eeconfig_disable(); -} - -#ifdef RAW_ENABLE - -void raw_hid_receive( uint8_t *data, uint8_t length ) -{ - uint8_t *command_id = &(data[0]); - uint8_t *command_data = &(data[1]); - switch ( *command_id ) - { - case id_get_protocol_version: - { - command_data[0] = PROTOCOL_VERSION >> 8; - command_data[1] = PROTOCOL_VERSION & 0xFF; - break; - } - case id_get_keyboard_value: - { - if ( command_data[0] == id_uptime ) - { - uint32_t value = timer_read32(); - command_data[1] = (value >> 24 ) & 0xFF; - command_data[2] = (value >> 16 ) & 0xFF; - command_data[3] = (value >> 8 ) & 0xFF; - command_data[4] = value & 0xFF; - } - else - { - *command_id = id_unhandled; - } - break; - } -#ifdef DYNAMIC_KEYMAP_ENABLE - case id_dynamic_keymap_get_keycode: - { - uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] ); - command_data[3] = keycode >> 8; - command_data[4] = keycode & 0xFF; - break; - } - case id_dynamic_keymap_set_keycode: - { - dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] ); - break; - } - case id_dynamic_keymap_reset: - { - dynamic_keymap_reset(); - break; - } -#endif // DYNAMIC_KEYMAP_ENABLE -#if RGB_BACKLIGHT_ENABLED - case id_backlight_config_set_value: - { - //backlight_config_set_value(command_data); - break; - } - case id_backlight_config_get_value: - { - //backlight_config_get_value(command_data); - break; - } - case id_backlight_config_save: - { - //backlight_config_save(); - break; - } -#endif // RGB_BACKLIGHT_ENABLED - case id_eeprom_reset: - { - eeprom_reset(); - break; - } - case id_bootloader_jump: - { - // Need to send data back before the jump - // Informs host that the command is handled - raw_hid_send( data, length ); - // Give host time to read it - wait_ms(100); - bootloader_jump(); - break; - } - default: - { - // Unhandled message. - *command_id = id_unhandled; - break; - } - } - - // Return same buffer with values changed - raw_hid_send( data, length ); - -} - +#ifndef RGB_BACKLIGHT_M6_B +#error RGB_BACKLIGHT_M6_B not defined, you done goofed somehao, brah #endif - -void main_init(void) -{ - // If the EEPROM has the magic, the data is good. - // OK to load from EEPROM. - if (eeprom_is_valid()) { -#if RGB_BACKLIGHT_ENABLED - //backlight_config_load(); -#endif // RGB_BACKLIGHT_ENABLED - } else { -#if RGB_BACKLIGHT_ENABLED - // If the EEPROM has not been saved before, or is out of date, - // save the default values to the EEPROM. Default values - // come from construction of the zeal_backlight_config instance. - //backlight_config_save(); -#endif // RGB_BACKLIGHT_ENABLED -#ifdef DYNAMIC_KEYMAP_ENABLE - // This resets the keymaps in EEPROM to what is in flash. - dynamic_keymap_reset(); -#endif - // Save the magic number last, in case saving was interrupted - eeprom_set_valid(true); - } -#if RGB_BACKLIGHT_ENABLED - // Initialize LED drivers for backlight. - backlight_init_drivers(); - - backlight_timer_init(); - backlight_timer_enable(); -#endif // RGB_BACKLIGHT_ENABLED -} - -void bootmagic_lite(void) -{ - // The lite version of TMK's bootmagic. - // 100% less potential for accidentally making the - // keyboard do stupid things. - - // We need multiple scans because debouncing can't be turned off. - matrix_scan(); - wait_ms(DEBOUNCING_DELAY); - wait_ms(DEBOUNCING_DELAY); - matrix_scan(); - - // If the Esc (matrix 0,0) is held down on power up, - // reset the EEPROM valid state and jump to bootloader. - if ( matrix_get_row(0) & (1<<0) ) { - eeprom_reset(); - bootloader_jump(); - } -} - -void matrix_init_kb(void) { - bootmagic_lite(); - main_init(); - matrix_init_user(); -} - -void matrix_scan_kb(void) { -#if RGB_BACKLIGHT_ENABLED - // This only updates the LED driver buffers if something has changed. - backlight_update_pwm_buffers(); -#endif // BACKLIGHT_ENABLED - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - led_set_user(usb_led); -} - -void suspend_power_down_kb(void) -{ -#if RGB_BACKLIGHT_ENABLED - //backlight_set_suspend_state(true); -#endif // BACKLIGHT_ENABLED -} - -void suspend_wakeup_init_kb(void) -{ -#if RGB_BACKLIGHT_ENABLED - //backlight_set_suspend_state(false); -#endif // BACKLIGHT_ENABLED -} diff --git a/keyboards/rama/m6_b/m6_b_api.h b/keyboards/rama/m6_b/m6_b_api.h deleted file mode 100644 index 041fd6e6ee..0000000000 --- a/keyboards/rama/m6_b/m6_b_api.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2017 Jason Williams (Wilba) - * - * 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 . - */ -#pragma once - -#define PROTOCOL_VERSION 0x0001 - -enum m6_b_command_id -{ - id_get_protocol_version = 0x01, // always 0x01 - id_get_keyboard_value, - id_set_keyboard_value, - id_dynamic_keymap_get_keycode, - id_dynamic_keymap_set_keycode, - id_dynamic_keymap_reset, - id_backlight_config_set_value, - id_backlight_config_get_value, - id_backlight_config_save, - id_eeprom_reset, - id_bootloader_jump, - id_unhandled = 0xFF, -}; - -enum m6_b_keyboard_value_id -{ - id_uptime = 0x01 -}; diff --git a/keyboards/rama/m6_b/rgb_backlight.c b/keyboards/rama/m6_b/rgb_backlight.c deleted file mode 100644 index 8f7ac06303..0000000000 --- a/keyboards/rama/m6_b/rgb_backlight.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * - * 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 . - */ -#if RGB_BACKLIGHT_ENABLED - -#include "rgb_backlight.h" -//#include "rgb_backlight_api.h" - -#include -#include -#include -#include "progmem.h" - -#include "quantum/color.h" -#include "drivers/avr/i2c_master.h" -#include "drivers/issi/is31fl3218.h" - -bool g_suspend_state = false; - -// Global tick at 20 Hz -uint32_t g_tick = 0; -uint8_t g_config_effect_speed = 0; -uint8_t g_config_brightness = 255; - -void backlight_update_pwm_buffers(void) -{ - IS31FL3218_update_pwm_buffers(); -} - -void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) -{ - IS31FL3218_set_color( index, red, green, blue ); -} - -void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) -{ - IS31FL3218_set_color_all( red, green, blue ); -} - - -// This is (F_CPU/1024) / 20 Hz -// = 15625 Hz / 20 Hz -// = 781 -#define TIMER3_TOP 260 - -void backlight_timer_init(void) -{ - static uint8_t backlight_timer_is_init = 0; - if ( backlight_timer_is_init ) - { - return; - } - backlight_timer_is_init = 1; - - // Timer 3 setup - TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP - _BV(CS32) | _BV(CS30); // prescale by /1024 - // Set TOP value - uint8_t sreg = SREG; - cli(); - - OCR3AH = (TIMER3_TOP >> 8) & 0xff; - OCR3AL = TIMER3_TOP & 0xff; - SREG = sreg; -} - -void backlight_timer_enable(void) -{ - TIMSK3 |= _BV(OCIE3A); -} - -void backlight_timer_disable(void) -{ - TIMSK3 &= ~_BV(OCIE3A); -} - -void backlight_set_suspend_state(bool state) -{ - g_suspend_state = state; -} - -void backlight_effect_cycle_all(void) -{ - uint8_t hueOffset = ( g_tick << g_config_effect_speed ) & 0xFF; - uint8_t satOffset = 127; - // Relies on hue being 8-bit and wrapping - for ( int i=0; i<6; i++ ) - { - HSV hsv = { .h = hueOffset, .s = satOffset, .v = g_config_brightness }; - RGB rgb = hsv_to_rgb( hsv ); - backlight_set_color( i, rgb.r, rgb.g, rgb.b ); - } -} - -ISR(TIMER3_COMPA_vect) -{ - // delay 1 second before driving LEDs or doing anything else - static uint8_t startup_tick = 0; - if ( startup_tick < 20 ) - { - startup_tick++; - return; - } - - g_tick++; - - if ( g_suspend_state ) - { - backlight_set_color_all( 0, 0, 0 ); - } - else - { - //HSV hsv = { .h = 240, .s = 255, .v = g_config_brightness }; - //RGB rgb = hsv_to_rgb( hsv ); - //backlight_set_color_all( rgb.r, rgb.g, rgb.b ); - backlight_effect_cycle_all(); - } -} - -void backlight_init_drivers(void) -{ - // Initialize I2C - i2c_init(); - IS31FL3218_init(); -} - -#endif // RGB_BACKLIGHT_ENABLED diff --git a/keyboards/rama/m6_b/rgb_backlight.h b/keyboards/rama/m6_b/rgb_backlight.h deleted file mode 100644 index bbf605284b..0000000000 --- a/keyboards/rama/m6_b/rgb_backlight.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * - * 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 . - */ -#pragma once - -#if RGB_BACKLIGHT_ENABLED -#else -#error rgb_backlight.h included when RGB_BACKLIGHT_ENABLED == 0 -#endif // RGB_BACKLIGHT_ENABLED - -#include -#include - -#include "quantum/color.h" - -void backlight_init_drivers(void); -void backlight_update_pwm_buffers(void); -void backlight_timer_init(void); -void backlight_timer_enable(void); -void backlight_timer_disable(void); -void backlight_set_suspend_state(bool state); - diff --git a/keyboards/rama/m6_b/rules.mk b/keyboards/rama/m6_b/rules.mk index 8226debd45..1a7466af37 100644 --- a/keyboards/rama/m6_b/rules.mk +++ b/keyboards/rama/m6_b/rules.mk @@ -1,5 +1,6 @@ # project specific files -SRC = rgb_backlight.c \ +SRC = ../zeal60/zeal60.c \ + ../zeal60/rgb_backlight.c \ quantum/color.c \ drivers/issi/is31fl3218.c \ drivers/avr/i2c_master.c @@ -56,22 +57,23 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN # Build Options # change yes to no to disable # -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +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) +CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = yes # USB Nkey Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +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 # 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 -AUDIO_ENABLE = no # Audio output on port C6 -FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend RAW_ENABLE = yes DYNAMIC_KEYMAP_ENABLE = yes CIE1931_CURVE = yes + diff --git a/keyboards/rama/u80_a/config.h b/keyboards/rama/u80_a/config.h index bfd9728283..9c74735ad5 100644 --- a/keyboards/rama/u80_a/config.h +++ b/keyboards/rama/u80_a/config.h @@ -185,3 +185,20 @@ /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/rama/u80_a/keymaps/default/keymap.c b/keyboards/rama/u80_a/keymaps/default/keymap.c index cf9225e3e5..036a57b689 100644 --- a/keyboards/rama/u80_a/keymaps/default/keymap.c +++ b/keyboards/rama/u80_a/keymaps/default/keymap.c @@ -18,5 +18,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [2] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [3] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; diff --git a/keyboards/rama/u80_a/rules.mk b/keyboards/rama/u80_a/rules.mk index 99224c247c..67b04e350e 100644 --- a/keyboards/rama/u80_a/rules.mk +++ b/keyboards/rama/u80_a/rules.mk @@ -52,17 +52,21 @@ BOOTLOADER = atmel-dfu # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 +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 = no # USB Nkey Rollover +NKRO_ENABLE = yes # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes +CIE1931_CURVE = yes \ No newline at end of file diff --git a/keyboards/wilba_tech/wt60_a/config.h b/keyboards/wilba_tech/wt60_a/config.h index 95f4c786e6..26f9ed2ba4 100644 --- a/keyboards/wilba_tech/wt60_a/config.h +++ b/keyboards/wilba_tech/wt60_a/config.h @@ -185,3 +185,20 @@ /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk index 99224c247c..76a07d7a44 100644 --- a/keyboards/wilba_tech/wt60_a/rules.mk +++ b/keyboards/wilba_tech/wt60_a/rules.mk @@ -52,17 +52,20 @@ BOOTLOADER = atmel-dfu # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 +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 = no # USB Nkey Rollover +NKRO_ENABLE = yes # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/wilba_tech/wt65_a/config.h b/keyboards/wilba_tech/wt65_a/config.h index fa919f186b..5f535c6a79 100644 --- a/keyboards/wilba_tech/wt65_a/config.h +++ b/keyboards/wilba_tech/wt65_a/config.h @@ -185,3 +185,20 @@ /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk index 99224c247c..76a07d7a44 100644 --- a/keyboards/wilba_tech/wt65_a/rules.mk +++ b/keyboards/wilba_tech/wt65_a/rules.mk @@ -52,17 +52,20 @@ BOOTLOADER = atmel-dfu # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 +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 = no # USB Nkey Rollover +NKRO_ENABLE = yes # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/wilba_tech/wt80_a/config.h b/keyboards/wilba_tech/wt80_a/config.h index 9687cb6d68..f78ce7fb34 100644 --- a/keyboards/wilba_tech/wt80_a/config.h +++ b/keyboards/wilba_tech/wt80_a/config.h @@ -185,3 +185,20 @@ /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 + +// EEPROM usage + +// TODO: refactor with new user EEPROM code (coming soon) +#define EEPROM_MAGIC 0x451F +#define EEPROM_MAGIC_ADDR 32 +// Bump this every time we change what we store +// This will automatically reset the EEPROM with defaults +// and avoid loading invalid data from the EEPROM +#define EEPROM_VERSION 0x07 +#define EEPROM_VERSION_ADDR 34 + +// Backlight config starts after EEPROM version +#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35 +// Dynamic keymap starts after backlight config (35+37) +#define DYNAMIC_KEYMAP_EEPROM_ADDR 72 diff --git a/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c index cf9225e3e5..9cbe7ff624 100644 --- a/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c +++ b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c @@ -18,5 +18,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [2] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + [3] = LAYOUT_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + }; diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk index 99224c247c..76a07d7a44 100644 --- a/keyboards/wilba_tech/wt80_a/rules.mk +++ b/keyboards/wilba_tech/wt80_a/rules.mk @@ -52,17 +52,20 @@ BOOTLOADER = atmel-dfu # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +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 +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 = no # USB Nkey Rollover +NKRO_ENABLE = yes # USB Nkey Rollover BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +RAW_ENABLE = yes +DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.h b/keyboards/wilba_tech/wt80_a/wt80_a.h index 26403ef347..a6fb1cccb1 100644 --- a/keyboards/wilba_tech/wt80_a/wt80_a.h +++ b/keyboards/wilba_tech/wt80_a/wt80_a.h @@ -41,3 +41,18 @@ { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \ } +#define LAYOUT_no_split( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \ + K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \ + { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \ + { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \ +} diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c index f514dbefcd..23f07d7eb1 100644 --- a/keyboards/wilba_tech/wt_main.c +++ b/keyboards/wilba_tech/wt_main.c @@ -16,6 +16,152 @@ #include "quantum.h" #include "keyboards/wilba_tech/wt_mono_backlight.h" +#include "keyboards/zeal60/zeal60_api.h" // Temporary hack + +#include "raw_hid.h" +#include "dynamic_keymap.h" +#include "timer.h" +#include "tmk_core/common/eeprom.h" + +bool eeprom_is_valid(void) +{ + return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC && + eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION); +} + +void eeprom_set_valid(bool valid) +{ + eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF); + eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF); +} + +void eeprom_reset(void) +{ + // Set the Zeal60 specific EEPROM state as invalid. + eeprom_set_valid(false); + // Set the TMK/QMK EEPROM state as invalid. + eeconfig_disable(); +} + +#ifdef RAW_ENABLE + +void raw_hid_receive( uint8_t *data, uint8_t length ) +{ + uint8_t *command_id = &(data[0]); + uint8_t *command_data = &(data[1]); + switch ( *command_id ) + { + case id_get_protocol_version: + { + command_data[0] = PROTOCOL_VERSION >> 8; + command_data[1] = PROTOCOL_VERSION & 0xFF; + break; + } + case id_get_keyboard_value: + { + if ( command_data[0] == id_uptime ) + { + uint32_t value = timer_read32(); + command_data[1] = (value >> 24 ) & 0xFF; + command_data[2] = (value >> 16 ) & 0xFF; + command_data[3] = (value >> 8 ) & 0xFF; + command_data[4] = value & 0xFF; + } + else + { + *command_id = id_unhandled; + } + break; + } +#ifdef DYNAMIC_KEYMAP_ENABLE + case id_dynamic_keymap_get_keycode: + { + uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] ); + command_data[3] = keycode >> 8; + command_data[4] = keycode & 0xFF; + break; + } + case id_dynamic_keymap_set_keycode: + { + dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] ); + break; + } + case id_dynamic_keymap_reset: + { + dynamic_keymap_reset(); + break; + } +#endif // DYNAMIC_KEYMAP_ENABLE + case id_backlight_config_set_value: + { + //backlight_config_set_value(command_data); + break; + } + case id_backlight_config_get_value: + { + //backlight_config_get_value(command_data); + break; + } + case id_backlight_config_save: + { + //backlight_config_save(); + break; + } + case id_eeprom_reset: + { + eeprom_reset(); + break; + } + case id_bootloader_jump: + { + // Need to send data back before the jump + // Informs host that the command is handled + raw_hid_send( data, length ); + // Give host time to read it + wait_ms(100); + bootloader_jump(); + break; + } + default: + { + // Unhandled message. + *command_id = id_unhandled; + break; + } + } + + // Return same buffer with values changed + raw_hid_send( data, length ); + +} + +#endif + +void main_init(void) +{ + // If the EEPROM has the magic, the data is good. + // OK to load from EEPROM. + if (eeprom_is_valid()) { + //backlight_config_load(); + } else { + // If the EEPROM has not been saved before, or is out of date, + // save the default values to the EEPROM. Default values + // come from construction of the zeal_backlight_config instance. + //backlight_config_save(); +#ifdef DYNAMIC_KEYMAP_ENABLE + // This resets the keymaps in EEPROM to what is in flash. + dynamic_keymap_reset(); +#endif + // Save the magic number last, in case saving was interrupted + eeprom_set_valid(true); + } + + // Initialize LED drivers for backlight. + backlight_init_drivers(); + + backlight_timer_init(); + backlight_timer_enable(); +} void bootmagic_lite(void) { @@ -32,9 +178,7 @@ void bootmagic_lite(void) // If the Esc (matrix 0,0) is held down on power up, // reset the EEPROM valid state and jump to bootloader. if ( matrix_get_row(0) & (1<<0) ) { - // Set the TMK/QMK EEPROM state as invalid. - eeconfig_disable(); - // Jump to bootloader. + eeprom_reset(); bootloader_jump(); } } @@ -42,14 +186,13 @@ void bootmagic_lite(void) void matrix_init_kb(void) { bootmagic_lite(); - backlight_init_drivers(); - backlight_timer_init(); - backlight_timer_enable(); + main_init(); matrix_init_user(); } void matrix_scan_kb(void) { + // This only updates the LED driver buffers if something has changed. backlight_update_pwm_buffers(); matrix_scan_user(); } diff --git a/keyboards/zeal60/rgb_backlight.c b/keyboards/zeal60/rgb_backlight.c index ce8b1cb179..c3dade123c 100644 --- a/keyboards/zeal60/rgb_backlight.c +++ b/keyboards/zeal60/rgb_backlight.c @@ -15,12 +15,12 @@ */ #if RGB_BACKLIGHT_ENABLED -#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_ZEAL65) || defined (RGB_BACKLIGHT_M60_A) +#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_ZEAL65) || defined (RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) #else -#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A +#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B #endif -#include "zeal60.h" +#include "quantum.h" #include "rgb_backlight.h" #include "rgb_backlight_api.h" #include "rgb_backlight_keycodes.h" @@ -32,7 +32,14 @@ #include "quantum/color.h" #include "drivers/avr/i2c_master.h" + +#if defined (RGB_BACKLIGHT_M6_B) +#include "drivers/issi/is31fl3218.h" +#define BACKLIGHT_LED_COUNT 6 +#else #include "drivers/issi/is31fl3731.h" +#define BACKLIGHT_LED_COUNT 72 +#endif #define BACKLIGHT_EFFECT_MAX 10 @@ -69,11 +76,12 @@ uint8_t g_indicator_state = 0; uint32_t g_tick = 0; // Ticks since this key was last hit. -uint8_t g_key_hit[72]; +uint8_t g_key_hit[BACKLIGHT_LED_COUNT]; // Ticks since any key was last hit. uint32_t g_any_key_hit = 0; +#if !defined(RGB_BACKLIGHT_M6_B) // This is a 7-bit address, that gets left-shifted and bit 0 // set to 0 for write, 1 for read (as per I2C protocol) #define ISSI_ADDR_1 0x74 @@ -162,7 +170,7 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { {1, C9_16, C7_15, C6_15}, // LD16 {1, C8_16, C7_16, C6_16}, // LD17 }; - +#endif // !defined(RGB_BACKLIGHT_M6_B) typedef struct Point { @@ -175,7 +183,7 @@ typedef struct Point { // point values in range x=0..224 y=0..64 // origin is center of top-left key (i.e Esc) #if defined (RGB_BACKLIGHT_ZEAL65) -const Point g_map_led_to_point[72] PROGMEM = { +const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = { // LA0..LA17 {120,16}, {104,16}, {88,16}, {72,16}, {56,16}, {40,16}, {24,16}, {4,16}, {4,32}, {128,0}, {112,0}, {96,0}, {80,0}, {64,0}, {48,0}, {32,0}, {16,0}, {0,0}, @@ -189,7 +197,7 @@ const Point g_map_led_to_point[72] PROGMEM = { {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {202,48}, {224,48}, {116,48}, {132,48}, {148,48}, {164,48}, {255,255}, {144,60}, {164,64}, {188,64}, {208,64} }; -const Point g_map_led_to_point_polar[72] PROGMEM = { +const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = { // LA0..LA17 {64,128}, {75,132}, {84,145}, {91,164}, {97,187}, {102,213}, {105,242}, {109,255}, {128,247}, {61,255}, {67,255}, {72,255}, {77,255}, {82,255}, {86,255}, {90,255}, {93,255}, {96,255}, @@ -204,7 +212,7 @@ const Point g_map_led_to_point_polar[72] PROGMEM = { {189,128}, {200,131}, {210,141}, {218,159}, {201,228}, {201,228}, {206,255}, {213,255}, {218,255} }; #elif defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A) -const Point g_map_led_to_point[72] PROGMEM = { +const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = { // LA0..LA17 {120,16}, {104,16}, {88,16}, {72,16}, {56,16}, {40,16}, {24,16}, {4,16}, {4,32}, {128,0}, {112,0}, {96,0}, {80,0}, {64,0}, {48,0}, {32,0}, {16,0}, {0,0}, @@ -218,7 +226,7 @@ const Point g_map_led_to_point[72] PROGMEM = { {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {210,48}, {224,48}, {116,48}, {132,48}, {148,48}, {164,48}, {144,64}, {161,64}, {181,64}, {201,64}, {221,64} }; -const Point g_map_led_to_point_polar[72] PROGMEM = { +const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = { // LA0..LA17 {58,129}, {70,129}, {80,139}, {89,157}, {96,181}, {101,208}, {105,238}, {109,255}, {128,247}, {58,255}, {64,255}, {70,255}, {75,255}, {80,255}, {85,255}, {89,255}, {93,255}, {96,255}, @@ -232,6 +240,16 @@ const Point g_map_led_to_point_polar[72] PROGMEM = { {0,27}, {0,64}, {0,101}, {0,137}, {0,174}, {255,233}, {228,201}, {235,255}, {237,255}, {195,128}, {206,136}, {215,152}, {222,175}, {205,234}, {209,255}, {214,255}, {219,255}, {223,255} }; +#elif defined (RGB_BACKLIGHT_M6_B) +// M6-B is really simple: +// 0 3 5 +// 1 2 4 +const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = { + {0,0}, {0,16}, {16,16}, {16,0}, {32,16}, {32,0} +}; +const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = { + {0,0}, {0,16}, {16,16}, {16,0}, {32,16}, {32,0} +}; #endif // This may seem counter-intuitive, but it's quite flexible. @@ -245,16 +263,30 @@ void map_led_to_point( uint8_t index, Point *point ) point->x = pgm_read_byte(addr); point->y = pgm_read_byte(addr+1); +#if defined (RGB_BACKLIGHT_M6_B) + return; +#endif + switch (index) { case 18+4: // LB4A if ( g_config.use_split_backspace ) point->x -= 8; break; +#if defined (RGB_BACKLIGHT_ZEAL60) case 18+14: // LB14A if ( g_config.use_iso_enter ) point->y += 8; // extremely pedantic break; + case 54+5: // LD5A + if ( !g_config.use_iso_enter ) + point->x -= 10; + break; + case 36+16: // LC16A + if ( !g_config.use_split_left_shift ) + point->x += 8; + break; +#endif #if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A) case 36+0: // LC0A if ( g_config.use_7u_spacebar ) @@ -264,19 +296,11 @@ void map_led_to_point( uint8_t index, Point *point ) if ( g_config.use_7u_spacebar ) point->x += 4; break; -#endif - case 36+16: // LC16A - if ( !g_config.use_split_left_shift ) - point->x += 8; - break; - case 54+5: // LD5A - if ( !g_config.use_iso_enter ) - point->x -= 10; - break; case 54+7: // LD7A if ( !g_config.use_split_right_shift ) point->x -= 8; break; +#endif } } @@ -325,6 +349,13 @@ const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = { { 36+16, 36+15, 36+5, 36+4, 36+3, 36+2, 36+1, 54+9, 54+10, 54+11, 54+12, 54+6, 54+7, 54+8 }, { 36+17, 36+8, 36+7, 36+6, 255, 255, 255, 36+0, 255, 54+13, 54+14, 54+15, 54+16, 54+17 } }; +#elif defined (RGB_BACKLIGHT_M6_B) +// M6-B is really simple: +// 0 3 5 +// 1 2 4 +const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = { + { 0, 3, 5, 1, 2, 4 } +}; #endif void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ) @@ -338,18 +369,30 @@ void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ) void backlight_update_pwm_buffers(void) { +#if defined (RGB_BACKLIGHT_M6_B) + IS31FL3218_update_pwm_buffers(); +#else IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, ISSI_ADDR_2 ); IS31FL3731_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 ); +#endif } void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) { +#if defined (RGB_BACKLIGHT_M6_B) + IS31FL3218_set_color( index, red, green, blue ); +#else IS31FL3731_set_color( index, red, green, blue ); +#endif } void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) { +#if defined (RGB_BACKLIGHT_M6_B) + IS31FL3218_set_color_all( red, green, blue ); +#else IS31FL3731_set_color_all( red, green, blue ); +#endif } void backlight_set_key_hit(uint8_t row, uint8_t column) @@ -436,6 +479,7 @@ void backlight_effect_rgb_test(void) } } +#if defined(RGB_DEBUGGING_ONLY) // This tests the LEDs // Note that it will change the LED control registers // in the LED drivers, and leave them in an invalid @@ -475,6 +519,7 @@ void backlight_effect_single_LED_test(void) backlight_set_color_all( 255, 255, 255 ); backlight_test_led( led, color==0, color==1, color==2 ); } +#endif // defined(RGB_DEBUGGING_ONLY) // All LEDs off void backlight_effect_all_off(void) @@ -502,7 +547,7 @@ void backlight_effect_alphas_mods(void) { uint8_t index; map_row_column_to_led( row, column, &index ); - if ( index < 72 ) + if ( index < BACKLIGHT_LED_COUNT ) { if ( ( g_config.alphas_mods[row] & (1< Date: Tue, 13 Nov 2018 11:38:48 -0500 Subject: [PATCH 0086/1763] Keyboard: Add 412 64 Model 00 keyboard. (#4400) * Add 412-64 keyboard firmware It's pretty barebones for now, but the Model 00 is also a pretty barebones machine. Model 01 won't be better, but plenty of pins exist for things like LEDs on Model 02. * MANU/PROD ID changes. Changed around the MANUFACTURER and PRODUCT IDs to be more polite when viewed in qmk toolbox. * Fixing PROD again. For the love of all that is good and holy, that was ugly. This new one looks better. This stuff matters to me for some reason. * Yep, updating MANU again. There we go. That's better - From my name to my "design firm". * Update keyboards/412_64/keymaps/default/keymap.c Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com> * Update keyboards/412_64/rules.mk Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com> * Update keyboards/412_64/rules.mk Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com> * Update keyboards/412_64/rules.mk Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com> * Update keyboards/412_64/rules.mk Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com> --- keyboards/412_64/412_64.c | 29 ++++ keyboards/412_64/412_64.h | 29 ++++ keyboards/412_64/config.h | 202 ++++++++++++++++++++++ keyboards/412_64/keymaps/default/config.h | 5 + keyboards/412_64/keymaps/default/keymap.c | 105 +++++++++++ keyboards/412_64/keymaps/default/rules.mk | 1 + keyboards/412_64/readme.md | 15 ++ keyboards/412_64/rules.mk | 73 ++++++++ 8 files changed, 459 insertions(+) create mode 100644 keyboards/412_64/412_64.c create mode 100644 keyboards/412_64/412_64.h create mode 100644 keyboards/412_64/config.h create mode 100644 keyboards/412_64/keymaps/default/config.h create mode 100644 keyboards/412_64/keymaps/default/keymap.c create mode 100644 keyboards/412_64/keymaps/default/rules.mk create mode 100644 keyboards/412_64/readme.md create mode 100644 keyboards/412_64/rules.mk diff --git a/keyboards/412_64/412_64.c b/keyboards/412_64/412_64.c new file mode 100644 index 0000000000..eaec54ade8 --- /dev/null +++ b/keyboards/412_64/412_64.c @@ -0,0 +1,29 @@ + +#include "412_64.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 + + led_set_user(usb_led); +} diff --git a/keyboards/412_64/412_64.h b/keyboards/412_64/412_64.h new file mode 100644 index 0000000000..27a32f15aa --- /dev/null +++ b/keyboards/412_64/412_64.h @@ -0,0 +1,29 @@ + +#ifndef FOURx16_H +#define FOURx16_H + +#include "quantum.h" +#define ___ KC_NO + +// This a shortcut to help you visually see your layout. +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array + +#define LAYOUT_ortho_4x16( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \ + K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, \ + K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \ + K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62, K63 \ +) \ +{ \ + { K00, K02, K04, K06, K08, K10, K12, K14 }, \ + { K01, K03, K05, K07, K09, K11, K13, K15 }, \ + { K16, K18, K20, K22, K24, K26, K28, K30 }, \ + { K17, K19, K21, K23, K25, K27, K29, K31 }, \ + { K32, K34, K36, K38, K40, K42, K44, K46 }, \ + { K33, K35, K37, K39, K41, K43, K45, K47 }, \ + { K48, K50, K52, K54, K56, K58, K60, K62 }, \ + { K49, K51, K53, K55, K57, K59, K61, K63 } \ +} + +#endif diff --git a/keyboards/412_64/config.h b/keyboards/412_64/config.h new file mode 100644 index 0000000000..28d9763c31 --- /dev/null +++ b/keyboards/412_64/config.h @@ -0,0 +1,202 @@ + + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xF7E0 +#define PRODUCT_ID 0x0412 +#define DEVICE_VER 0x0000 +#define MANUFACTURER EDI/SCI +#define PRODUCT 412 64 Model 00 +#define DESCRIPTION A compact 60% keyboard inspired by the 4x4x4x4x4 + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 8 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D3, F4, F5, F6, F7, B1, B3, B2 } +#define MATRIX_COL_PINS { B0, D2, D0, D1, D4, C6, D7, E6 } +#define UNUSED_PINS { B4, B5, B6, B7, C7, F0, F1 } + + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN C7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * HD44780 LCD Display Configuration + */ +/* +#define LCD_LINES 2 //< number of visible lines of the display +#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display + +#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode + +#if LCD_IO_MODE +#define LCD_PORT PORTB //< port for the LCD lines +#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0 +#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1 +#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2 +#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3 +#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0 +#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1 +#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2 +#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3 +#define LCD_RS_PORT LCD_PORT //< port for RS line +#define LCD_RS_PIN 3 //< pin for RS line +#define LCD_RW_PORT LCD_PORT //< port for RW line +#define LCD_RW_PIN 2 //< pin for RW line +#define LCD_E_PORT LCD_PORT //< port for Enable line +#define LCD_E_PIN 1 //< pin for Enable line +#endif +*/ + diff --git a/keyboards/412_64/keymaps/default/config.h b/keyboards/412_64/keymaps/default/config.h new file mode 100644 index 0000000000..d533d806c9 --- /dev/null +++ b/keyboards/412_64/keymaps/default/config.h @@ -0,0 +1,5 @@ + + +#pragma once + +// place overrides here diff --git a/keyboards/412_64/keymaps/default/keymap.c b/keyboards/412_64/keymaps/default/keymap.c new file mode 100644 index 0000000000..c098a37e5e --- /dev/null +++ b/keyboards/412_64/keymaps/default/keymap.c @@ -0,0 +1,105 @@ + +#include QMK_KEYBOARD_H + +#define _MAIN 0 +#define _RAISE 1 +#define _LOWER 2 + +// Readability keycodes +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + +/* MAIN + * .-----------------------------------------------------------------------------------------------------------------------------------------------. + * | TAB | Q | W | E | R | T | Y | U | I | O | P | Backsp | Delete | 7 | 8 | 9 | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | PgUp | 4 | 5 | 6 | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER | PgDn | 1 | 2 | 3 | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | PAUS | GUI | ALT | Lower | Space | Space | Raise | Left | Down | Up | Right | Shift | 0 | . | ENTER | + * '-----------------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_MAIN] = LAYOUT_ortho_4x16( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_DEL, KC_KP_7, KC_KP_8, KC_KP_9, + 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_PGUP, KC_KP_4, KC_KP_5, KC_KP_6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_PGDN, KC_KP_1, KC_KP_2, KC_KP_3, + KC_LCTL, KC_PAUS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RSFT, KC_KP_0, KC_KP_DOT, KC_PENT + ), + +/* RAISE + * .-----------------------------------------------------------------------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Insert | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | - | = | [ | ] | \ | Home | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | ISO # | ISO / | | | PScr | End | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | Next | Vol- | Vol+ | Play | | | | | + * '-----------------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_RAISE] = LAYOUT_ortho_4x16( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_INS, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, _______, _______, KC_PSCR, KC_END, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______ + ), + +/* LOWER + * .-----------------------------------------------------------------------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | | | Reset | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | ISO ~ | ISO | | | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | Mute | | | | | + * '-----------------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_LOWER] = LAYOUT_ortho_4x16( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, _______, RESET, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______ + ), + +}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + keyevent_t event = record->event; + (void)event; + + 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) { + +} diff --git a/keyboards/412_64/keymaps/default/rules.mk b/keyboards/412_64/keymaps/default/rules.mk new file mode 100644 index 0000000000..08fdcc0a56 --- /dev/null +++ b/keyboards/412_64/keymaps/default/rules.mk @@ -0,0 +1 @@ +KEY_LOCK_ENABLE = yes # Enable the universal locking key, which lets you do any locking you require. \ No newline at end of file diff --git a/keyboards/412_64/readme.md b/keyboards/412_64/readme.md new file mode 100644 index 0000000000..0811031075 --- /dev/null +++ b/keyboards/412_64/readme.md @@ -0,0 +1,15 @@ +# 412-64 + +![412-64](image_here) + +A compact 60% keyboard designed by Fate Everywhere and sold on a limited basis. Born out of the desire for a Planck with a numpad for technical work. + +Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere) +Hardware Supported: 4x16 T&E Prototype, 412-64 Mk. 0, Mk. 1. +Hardware Availability: Highly limited, contact /u/FateEverywhere on reddit for availability. + +Make example for this keyboard (after setting up your build environment): + + make 412-64:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/412_64/rules.mk b/keyboards/412_64/rules.mk new file mode 100644 index 0000000000..9e74da5d98 --- /dev/null +++ b/keyboards/412_64/rules.mk @@ -0,0 +1,73 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# 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 + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) + +LAYOUTS = ortho_4x16 From 911b2d07565fa0c6edb49a198f4420391f7f33f3 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Daisuke Date: Wed, 22 Aug 2018 23:56:24 +0900 Subject: [PATCH 0087/1763] Docs: Fix descriptions of KC_INT1 and KC_INT3 --- docs/keycodes.md | 4 ++-- docs/keycodes_basic.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/keycodes.md b/docs/keycodes.md index e5d35b2b4a..592b52ec7b 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -141,9 +141,9 @@ This is a reference only. Each group of keys links to the page documenting their |`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock | |`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | |`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | -|`KC_INT1` |`KC_RO` |JIS `\` and | | +|`KC_INT1` |`KC_RO` |JIS `\` and `_` | |`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana | -|`KC_INT3` |`KC_JYEN` |JIS `¥` | +|`KC_INT3` |`KC_JYEN` |JIS `¥` and | | |`KC_INT4` |`KC_HENK` |JIS Henkan | |`KC_INT5` |`KC_MHEN` |JIS Muhenkan | |`KC_INT6` | |JIS Numpad `,` | diff --git a/docs/keycodes_basic.md b/docs/keycodes_basic.md index 82e94aa5e9..ada9cc0e5a 100644 --- a/docs/keycodes_basic.md +++ b/docs/keycodes_basic.md @@ -123,9 +123,9 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07 |Key |Aliases |Description | |----------|---------|-------------------------------| -|`KC_INT1` |`KC_RO` |JIS `\` and || +|`KC_INT1` |`KC_RO` |JIS `\` and `_` | |`KC_INT2` |`KC_KANA`|JIS Katakana/Hiragana | -|`KC_INT3` |`KC_JYEN`|JIS `¥` | +|`KC_INT3` |`KC_JYEN`|JIS `¥` and || |`KC_INT4` |`KC_HENK`|JIS Henkan | |`KC_INT5` |`KC_MHEN`|JIS Muhenkan | |`KC_INT6` | |JIS Numpad `,` | From 991686203c91eca9149e6fe942be73e5172719ba Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Tue, 13 Nov 2018 14:20:42 -0800 Subject: [PATCH 0088/1763] converter/m0110_usb Configurator support and readme cleanup (#4421) * Apple M0110 USB converter: readme cleanup * Apple M0110 USB converter: Configurator support --- keyboards/converter/m0110_usb/README.md | 18 +-- keyboards/converter/m0110_usb/info.json | 172 ++++++++++++++++++++++++ 2 files changed, 181 insertions(+), 9 deletions(-) create mode 100644 keyboards/converter/m0110_usb/info.json diff --git a/keyboards/converter/m0110_usb/README.md b/keyboards/converter/m0110_usb/README.md index 3041eb0b4a..2e8a2eaef1 100644 --- a/keyboards/converter/m0110_usb/README.md +++ b/keyboards/converter/m0110_usb/README.md @@ -1,19 +1,19 @@ -M0110(A) keyboard converter -====================================== +# M0110(A) keyboard converter + This is a port of the original M0110 converter from TMK to QMK. The original converter was designed to work with **ATmega32U2** and **ATmega32U4** based microcontrollers to convert Apple M0110/M0110A keyboards and M0120 numpads to USB. This port has been tested to be compatible with the [**Adafruit Feather 32U4 BLE**](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le). -### Enabling Bluetooth for the Adafruit Feather 32U4 BLE ----------------------------------------------------- +## Enabling Bluetooth for the Adafruit Feather 32U4 BLE + Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` and `DESCRIPTION` values from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name. -### Pins ----- +## Pins + This port utilizes the same pins that the TMK converter used. `PD1` is used for `CLOCK` and `PD0` is used for the `DATA` from the keyboard. These pins can be changed in `config.h`. -### Other important hardware notes from the original TMK converter Readme: +## Other important hardware notes from the original TMK converter Readme: >### Hardware >-------- >You can buy preassembled [TMK converter] or make yourown with AVR dev board like PJRC [Teensy]. @@ -45,7 +45,7 @@ This port utilizes the same pins that the TMK converter used. `PD1` is used for [**View the original TMK converter Repository**](https://github.com/tmk/tmk_keyboard/tree/master/converter/m0110_usb) -### QMK Port Changelog ---------- +## QMK Port Changelog + - 2018/08/01 - Original Release diff --git a/keyboards/converter/m0110_usb/info.json b/keyboards/converter/m0110_usb/info.json new file mode 100644 index 0000000000..6ef6103345 --- /dev/null +++ b/keyboards/converter/m0110_usb/info.json @@ -0,0 +1,172 @@ +{ + "keyboard_name": "M0110(A) keyboard converter", + "url": "", + "maintainer": "qmk", + "width": 19.25, + "height": 5, + "layouts": { + "LAYOUT_ansi": { + "key_count": 78, + "layout": [ + {"label":"`", "x":0, "y":0}, + {"label":"1", "x":1, "y":0}, + {"label":"2", "x":2, "y":0}, + {"label":"3", "x":3, "y":0}, + {"label":"4", "x":4, "y":0}, + {"label":"5", "x":5, "y":0}, + {"label":"6", "x":6, "y":0}, + {"label":"7", "x":7, "y":0}, + {"label":"8", "x":8, "y":0}, + {"label":"9", "x":9, "y":0}, + {"label":"0", "x":10, "y":0}, + {"label":"-", "x":11, "y":0}, + {"label":"=", "x":12, "y":0}, + {"label":"Backspace", "x":13, "y":0, "w":1.5}, + {"label":"Num Lock", "x":15.25, "y":0}, + {"label":"=", "x":16.25, "y":0}, + {"label":"/", "x":17.25, "y":0}, + {"label":"*", "x":18.25, "y":0}, + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":6.5, "y":1}, + {"label":"U", "x":7.5, "y":1}, + {"label":"I", "x":8.5, "y":1}, + {"label":"O", "x":9.5, "y":1}, + {"label":"P", "x":10.5, "y":1}, + {"label":"[", "x":11.5, "y":1}, + {"label":"]", "x":12.5, "y":1}, + {"label":"7", "x":15.25, "y":1}, + {"label":"8", "x":16.25, "y":1}, + {"label":"9", "x":17.25, "y":1}, + {"label":"-", "x":18.25, "y":1}, + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":6.75, "y":2}, + {"label":"J", "x":7.75, "y":2}, + {"label":"K", "x":8.75, "y":2}, + {"label":"L", "x":9.75, "y":2}, + {"label":";", "x":10.75, "y":2}, + {"label":"'", "x":11.75, "y":2}, + {"label":"Enter", "x":12.75, "y":2, "w":1.75}, + {"label":"4", "x":15.25, "y":2}, + {"label":"5", "x":16.25, "y":2}, + {"label":"6", "x":17.25, "y":2}, + {"label":"+", "x":18.25, "y":2}, + {"label":"Shift", "x":0, "y":3, "w":2.25}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + {"label":"N", "x":7.25, "y":3}, + {"label":"M", "x":8.25, "y":3}, + {"label":",", "x":9.25, "y":3}, + {"label":".", "x":10.25, "y":3}, + {"label":"/", "x":11.25, "y":3}, + {"label":"Up", "x":13.5, "y":3}, + {"label":"1", "x":15.25, "y":3}, + {"label":"2", "x":16.25, "y":3}, + {"label":"3", "x":17.25, "y":3}, + {"label":"Enter", "x":18.25, "y":3, "h":2}, + {"label":"Alt", "x":0, "y":4, "w":1.5}, + {"label":"GUI", "x":1.5, "y":4, "w":2}, + {"label":"Space", "x":3.5, "y":4, "w":6}, + {"label":"MO(1)", "x":9.5, "y":4}, + {"label":"\\", "x":10.5, "y":4}, + {"label":"Left", "x":11.5, "y":4}, + {"label":"Right", "x":12.5, "y":4}, + {"label":"Down", "x":13.5, "y":4}, + {"label":"0", "x":15.25, "y":4, "w":2}, + {"label":".", "x":17.25, "y":4} + ] + }, + "LAYOUT_iso": { + "key_count": 75, + "layout": [ + {"label":"`", "x":0, "y":0}, + {"label":"1", "x":1, "y":0}, + {"label":"2", "x":2, "y":0}, + {"label":"3", "x":3, "y":0}, + {"label":"4", "x":4, "y":0}, + {"label":"5", "x":5, "y":0}, + {"label":"6", "x":6, "y":0}, + {"label":"7", "x":7, "y":0}, + {"label":"8", "x":8, "y":0}, + {"label":"9", "x":9, "y":0}, + {"label":"0", "x":10, "y":0}, + {"label":"-", "x":11, "y":0}, + {"label":"=", "x":12, "y":0}, + {"label":"Backspace", "x":13, "y":0, "w":1.5}, + {"label":"Num Lock", "x":15.25, "y":0}, + {"label":"=", "x":16.25, "y":0}, + {"label":"/", "x":17.25, "y":0}, + {"label":"*", "x":18.25, "y":0}, + {"label":"Tab", "x":0, "y":1, "w":1.5}, + {"label":"Q", "x":1.5, "y":1}, + {"label":"W", "x":2.5, "y":1}, + {"label":"E", "x":3.5, "y":1}, + {"label":"R", "x":4.5, "y":1}, + {"label":"T", "x":5.5, "y":1}, + {"label":"Y", "x":6.5, "y":1}, + {"label":"U", "x":7.5, "y":1}, + {"label":"I", "x":8.5, "y":1}, + {"label":"O", "x":9.5, "y":1}, + {"label":"P", "x":10.5, "y":1}, + {"label":"[", "x":11.5, "y":1}, + {"label":"]", "x":12.5, "y":1}, + {"label":"Return", "x":13.75, "y":1, "w":0.75, "h":2}, + {"label":"7", "x":15.25, "y":1}, + {"label":"8", "x":16.25, "y":1}, + {"label":"9", "x":17.25, "y":1}, + {"label":"-", "x":18.25, "y":1}, + {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, + {"label":"A", "x":1.75, "y":2}, + {"label":"S", "x":2.75, "y":2}, + {"label":"D", "x":3.75, "y":2}, + {"label":"F", "x":4.75, "y":2}, + {"label":"G", "x":5.75, "y":2}, + {"label":"H", "x":6.75, "y":2}, + {"label":"J", "x":7.75, "y":2}, + {"label":"K", "x":8.75, "y":2}, + {"label":"L", "x":9.75, "y":2}, + {"label":";", "x":10.75, "y":2}, + {"label":"'", "x":11.75, "y":2}, + {"label":"#", "x":12.75, "y":2}, + {"label":"4", "x":15.25, "y":2}, + {"label":"5", "x":16.25, "y":2}, + {"label":"6", "x":17.25, "y":2}, + {"label":"+", "x":18.25, "y":2}, + {"label":"Shift", "x":0, "y":3, "w":1.25}, + {"label":"\\", "x":1.25, "y":3}, + {"label":"Z", "x":2.25, "y":3}, + {"label":"X", "x":3.25, "y":3}, + {"label":"C", "x":4.25, "y":3}, + {"label":"V", "x":5.25, "y":3}, + {"label":"B", "x":6.25, "y":3}, + {"label":"N", "x":7.25, "y":3}, + {"label":"M", "x":8.25, "y":3}, + {"label":",", "x":9.25, "y":3}, + {"label":".", "x":10.25, "y":3}, + {"label":"/", "x":11.25, "y":3}, + {"label":"1", "x":15.25, "y":3}, + {"label":"2", "x":16.25, "y":3}, + {"label":"3", "x":17.25, "y":3}, + {"label":"Enter", "x":18.25, "y":3, "h":2}, + {"label":"Option", "x":1, "y":4}, + {"label":"GUI", "x":2, "y":4, "w":1.5}, + {"label":"Space", "x":3.5, "y":4, "w":7.5}, + {"label":"Enter", "x":11, "y":4, "w":1.5}, + {"label":"0", "x":15.25, "y":4, "w":2}, + {"label":".", "x":17.25, "y":4} + ] + } + } +} From e10a602e7b1ac8d7f2ff027ae41570fe1a2ba57d Mon Sep 17 00:00:00 2001 From: FiNeXdesign Date: Tue, 13 Nov 2018 23:44:50 +0100 Subject: [PATCH 0089/1763] Keymap: Finex Redox keymap (#4418) * Added FiNeX custom Redox Layout, first commit. * updated readme * removed old code --- keyboards/redox/keymaps/finex/config.h | 36 +++++ keyboards/redox/keymaps/finex/keymap.c | 188 ++++++++++++++++++++++++ keyboards/redox/keymaps/finex/readme.md | 35 +++++ keyboards/redox/keymaps/finex/rules.mk | 3 + 4 files changed, 262 insertions(+) create mode 100644 keyboards/redox/keymaps/finex/config.h create mode 100644 keyboards/redox/keymaps/finex/keymap.c create mode 100644 keyboards/redox/keymaps/finex/readme.md create mode 100644 keyboards/redox/keymaps/finex/rules.mk diff --git a/keyboards/redox/keymaps/finex/config.h b/keyboards/redox/keymaps/finex/config.h new file mode 100644 index 0000000000..9adbcedf49 --- /dev/null +++ b/keyboards/redox/keymaps/finex/config.h @@ -0,0 +1,36 @@ +/* +Copyright 2018 Leonardo (FiNeX) Finetti + +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 . +*/ + +#pragma once + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 14 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/redox/keymaps/finex/keymap.c b/keyboards/redox/keymaps/finex/keymap.c new file mode 100644 index 0000000000..8b8f5f1839 --- /dev/null +++ b/keyboards/redox/keymaps/finex/keymap.c @@ -0,0 +1,188 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Layer names +#define _QWERTY 0 +#define _COLEMAKDHMK 1 +#define _QWERTY_MAC 2 +#define _COLEMAKDHMK_MAC 3 +#define _SYMB 4 +#define _ADJUST 5 + +// Custom keycodes +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAKDHMK, + QWERTY_MAC, + COLEMAKDHMK_MAC, + SYMB, + ADJUST, + ASC_SAR, + ASC_DAR, + ASC_SQT, + ASC_DQT, + ASC_HAP, + ASC_SAD +}; + +// Shortcut to make keymap more readable +#define KC_SYQT LT(_SYMB, KC_QUOT) +#define KC_SYGR LT(_SYMB, KC_GRV) +#define KC_SYSP LT(_SYMB, KC_SPC) +#define KC_ADEN LT(_ADJUST, KC_END) +#define KC_ADPU LT(_ADJUST, KC_PGUP) +#define KC_CESC LCTL_T(KC_ESC) +#define KC_CBSP LCTL_T(KC_BSPC) +#define KC_CMIN RCTL_T(KC_MINUS) +#define KC_GBSP LGUI_T(KC_BSPC) +#define KC_ADEL LALT_T(KC_DEL) +#define KC_APLS RALT_T(KC_PPLS) +#define KC_LSEN LSFT_T(KC_ENT) +#define KC_RSEN RSFT_T(KC_ENT) +#define FN1 QWERTY +#define FN2 COLEMAKDHMK +#define FN3 QWERTY_MAC +#define FN4 COLEMAKDHMK_MAC + +// Send custom strings or change default base layer +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case ASC_SAR: + SEND_STRING("->"); + return false; + case ASC_DAR: + SEND_STRING("=>"); + return false; + case ASC_SQT: + // SS_RALT(): Avoid sending dead key on software intl layouts + SEND_STRING(SS_RALT("'")); + return false; + case ASC_DQT: + // SS_RALT(SS_LSFT()): Avoid sending dead key on software intl layouts + SEND_STRING(SS_RALT(SS_LSFT("\""))); + return false; + case ASC_HAP: + SEND_STRING(":-) "); + return false; + case ASC_SAD: + SEND_STRING(":-( "); + return false; + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAKDHMK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAKDHMK); + } + return false; + break; + case QWERTY_MAC: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY_MAC); + } + return false; + break; + case COLEMAKDHMK_MAC: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAKDHMK_MAC); + } + return false; + break; + } + } + return true; +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_DEL , KC_BSPC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_CESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_CMIN , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI , KC_ADEL , KC_CBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_COLEMAKDHMK] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_B ,KC_DEL , KC_BSPC ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_EQL , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_CESC ,KC_A ,KC_R ,KC_S ,KC_T ,KC_G ,KC_LBRC , KC_RBRC ,KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,KC_CMIN , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_D ,KC_V ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_K ,KC_H ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI , KC_ADEL , KC_CBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_QWERTY_MAC] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_DEL , KC_BSPC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_CESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_CMIN , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL , KC_ADEL , KC_GBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_COLEMAKDHMK_MAC] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_B ,KC_DEL , KC_BSPC ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_EQL , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_CESC ,KC_A ,KC_R ,KC_S ,KC_T ,KC_G ,KC_LBRC , KC_RBRC ,KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,KC_CMIN , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_D ,KC_V ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_K ,KC_H ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL , KC_ADEL , KC_GBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_SYMB] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_CIRC ,KC_BSLS ,KC_PMNS ,KC_UNDS ,XXXXXXX ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,KC_F11 ,KC_APP , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_PAST ,KC_PIPE ,ASC_SQT ,KC_TILD ,KC_QUOT ,ASC_SAR , ASC_DAR ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,KC_F12 ,KC_PSCR , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + _______ ,KC_HASH ,KC_AMPR ,KC_AT ,ASC_DQT ,KC_GRV ,ASC_SAD ,ASC_HAP , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,KC_UP ,_______ , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_PDOT ,KC_LEFT ,KC_DOWN ,KC_RGHT + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ), + + [_ADJUST] = LAYOUT( + //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐ + XXXXXXX ,FN1 ,FN2 ,FN3 ,FN4 ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,RGB_M_B ,RGB_M_R ,RGB_M_SW,RGB_M_SN,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,RGB_M_K ,RGB_M_X ,RGB_M_G ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , + //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ + XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX + //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ + ) + +}; diff --git a/keyboards/redox/keymaps/finex/readme.md b/keyboards/redox/keymaps/finex/readme.md new file mode 100644 index 0000000000..f1b6fa7c7b --- /dev/null +++ b/keyboards/redox/keymaps/finex/readme.md @@ -0,0 +1,35 @@ +# Customized keymap for Redox by Leonardo (FiNeX) Finetti. + + +## Features + +- Enabled USE_SERIAL for Falba.Tech Redox keyboards. +- PC Layouts: QWERTY, Colemak Mod DH-MK. +- Mac Layouts: same as above with CTRL-GUI keys inverted on the bottom row. +- Added redundant "Space", "Esc" and "Ctrl" keys. +- Added macro to print "->" and "=>" strings. +- Added macro to print ":-( " and ":-) " strings. +- Added more arrows. +- Added "(" and ")" on Shifts keys. +- Added Shift on both ) "Enter" keys. +- Removed Mouse and media support. +- Added missing "Print Screen" and "Menu" keys. +- Added missing "F11" and "F12" keys. + + +## Layers + +This keymap use the default one with some minor improvements to suit my needs. + +## Changelog + +- 2018/11/13 + First public release + + +## TODO + +- Bring back mouse and multimedia keys. +- Add default Colemak Mod DH layout. +- Improve top corner keys. +- Improve bottom row keys (mostly KC_BSLS and KC_QUOT). diff --git a/keyboards/redox/keymaps/finex/rules.mk b/keyboards/redox/keymaps/finex/rules.mk new file mode 100644 index 0000000000..21550e9fe1 --- /dev/null +++ b/keyboards/redox/keymaps/finex/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = yes + +COMMAND_ENABLE = no From f7fcba329dbd659a4bb37acdf7e2dc24204a81c8 Mon Sep 17 00:00:00 2001 From: James Osborn Date: Wed, 14 Nov 2018 15:33:46 +0000 Subject: [PATCH 0090/1763] Fixed Unicode Support heading (#4425) Previously, Unicode Support heading appeared as the last row in the Swap Hands table. --- docs/keycodes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/keycodes.md b/docs/keycodes.md index 592b52ec7b..30fe60278f 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -459,6 +459,7 @@ This is a reference only. Each group of keys links to the page documenting their |`SH_MOFF` |Momentarily turns off swap. | |`SH_TG` |Toggles swap on and off with every key press. | |`SH_TT` |Toggles with a tap; momentary when held. | + ## [Unicode Support](feature_unicode.md) |Key |Aliases| | From 0cda2f43e2c95fe5dd440e6391ae807f508b040b Mon Sep 17 00:00:00 2001 From: Phillip Tennen Date: Wed, 14 Nov 2018 16:45:46 +0100 Subject: [PATCH 0091/1763] Backlight status functions (#4259) * add functions to set specific backlight state * add function to query backlight state * update documentation with new backlight functions * Update tmk_core/common/backlight.c Co-Authored-By: codyd51 * Update tmk_core/common/backlight.h Co-Authored-By: codyd51 * update docs for is_backlight_enabled() name change --- docs/feature_backlight.md | 19 ++++++++------ tmk_core/common/backlight.c | 51 ++++++++++++++++++++++++++++++++----- tmk_core/common/backlight.h | 4 +++ 3 files changed, 60 insertions(+), 14 deletions(-) diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md index 7bb7e03a89..f7a35406c7 100644 --- a/docs/feature_backlight.md +++ b/docs/feature_backlight.md @@ -54,14 +54,17 @@ In this handler, the value of an incrementing counter is mapped onto a precomput ## Backlight Functions -|Function |Description | -|----------|----------------------------------------------------------| -|`backlight_toggle()` |Turn the backlight on or off | -|`backlight_step()` |Cycle through backlight levels | -|`backlight_increase()` |Increase the backlight level | -|`backlight_decrease()` |Decrease the backlight level | -|`backlight_level(x)` |Sets the backlight level to specified level | -|`get_backlight_level()`|Return the current backlight level | +|Function |Description | +|----------|-----------------------------------------------------------| +|`backlight_toggle()` |Turn the backlight on or off | +|`backlight_enable()` |Turn the backlight on | +|`backlight_disable()` |Turn the backlight off | +|`backlight_step()` |Cycle through backlight levels | +|`backlight_increase()` |Increase the backlight level | +|`backlight_decrease()` |Decrease the backlight level | +|`backlight_level(x)` |Sets the backlight level to specified level | +|`get_backlight_level()` |Return the current backlight level | +|`is_backlight_enabled()`|Return whether the backlight is currently on | ### Backlight Breathing Functions diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c index 3e29aacc49..8ddacd98b6 100644 --- a/tmk_core/common/backlight.c +++ b/tmk_core/common/backlight.c @@ -76,12 +76,51 @@ void backlight_decrease(void) */ void backlight_toggle(void) { - backlight_config.enable ^= 1; - if (backlight_config.raw == 1) // enabled but level = 0 - backlight_config.level = 1; - eeconfig_update_backlight(backlight_config.raw); - dprintf("backlight toggle: %u\n", backlight_config.enable); - backlight_set(backlight_config.enable ? backlight_config.level : 0); + bool enabled = backlight_config.enable; + dprintf("backlight toggle: %u\n", enabled); + if (enabled) + backlight_disable(); + else + backlight_enable(); +} + +/** \brief Enable backlight + * + * FIXME: needs doc + */ +void backlight_enable(void) +{ + if (backlight_config.enable) return; // do nothing if backlight is already on + + backlight_config.enable = true; + if (backlight_config.raw == 1) // enabled but level == 0 + backlight_config.level = 1; + eeconfig_update_backlight(backlight_config.raw); + dprintf("backlight enable\n"); + backlight_set(backlight_config.level); +} + +/** /brief Disable backlight + * + * FIXME: needs doc + */ +void backlight_disable(void) +{ + if (!backlight_config.enable) return; // do nothing if backlight is already off + + backlight_config.enable = false; + eeconfig_update_backlight(backlight_config.raw); + dprintf("backlight disable\n"); + backlight_set(0); +} + +/** /brief Get the backlight status + * + * FIXME: needs doc + */ +bool is_backlight_enabled(void) +{ + return backlight_config.enable; } /** \brief Backlight step through levels diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h index ef8ab9b2be..420c9d19ed 100644 --- a/tmk_core/common/backlight.h +++ b/tmk_core/common/backlight.h @@ -32,7 +32,11 @@ void backlight_init(void); void backlight_increase(void); void backlight_decrease(void); void backlight_toggle(void); +void backlight_enable(void); +void backlight_disable(void); +bool is_backlight_enabled(void); void backlight_step(void); void backlight_set(uint8_t level); void backlight_level(uint8_t level); uint8_t get_backlight_level(void); + From a034602651c86424bc2197ee61bea0ff584b3be1 Mon Sep 17 00:00:00 2001 From: ishtob Date: Wed, 14 Nov 2018 12:22:16 -0500 Subject: [PATCH 0092/1763] adding block def to ishtob's userspace (#4427) --- keyboards/planck/keymaps/ishtob/keymap.c | 34 ++--- users/ishtob/ishtob.h | 165 +++++++++++++++++++++++ 2 files changed, 182 insertions(+), 17 deletions(-) diff --git a/keyboards/planck/keymaps/ishtob/keymap.c b/keyboards/planck/keymaps/ishtob/keymap.c index 86c5555da3..082257b895 100644 --- a/keyboards/planck/keymaps/ishtob/keymap.c +++ b/keyboards/planck/keymaps/ishtob/keymap.c @@ -25,9 +25,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = LAYOUT_planck_grid( - LT_FN(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_MC(KC_SCLN), CTL_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LT_RAI(KC_MINS), + LT_FN(KC_TAB), _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC, + KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, CTL_ENT, + KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, LT_RAI(KC_MINS), KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL ), @@ -43,10 +43,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_COLEMAK] = LAYOUT_planck_grid( - LT_FN(KC_TAB), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, - KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O), KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, LT_RAI(KC_MINS), - KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL + LT_FN(KC_TAB), _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC, + KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT, + KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, LT_RAI(KC_MINS), + KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL ), /* Dvorak @@ -61,10 +61,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_DVORAK] = LAYOUT_planck_grid( - LT_FN(KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, - KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, LT_MC(KC_S), KC_ENT, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, LT_RAI(KC_MINS), - KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL + LT_FN(KC_TAB), _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC, + KC_LCTL, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_ENT, + KC_LSFT, _________________DVORAK_L3_________________, _________________DVORAK_R3_________________, LT_RAI(KC_MINS), + KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL ), /* Lower @@ -79,9 +79,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = LAYOUT_planck_grid( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_BSLS, - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, + ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_GRV, KC_BSLS, + _______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, + _______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), @@ -97,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_RAISE] = LAYOUT_planck_grid( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS, + ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_PLUS, KC_BSLS, _______, KC_A, KC_UP, KC_D, KC_PSCR, KC_VOLU, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT, _______, KC_LEFT, KC_DOWN, KC_RIGHT,KC__MUTE, KC_VOLD, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______, _______, _______, _______, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NLCK @@ -135,8 +135,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FNLAYER] = LAYOUT_planck_grid( _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, + _______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, + _______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ), diff --git a/users/ishtob/ishtob.h b/users/ishtob/ishtob.h index 2c47fce791..3e4d4ffbcb 100644 --- a/users/ishtob/ishtob.h +++ b/users/ishtob/ishtob.h @@ -71,6 +71,171 @@ enum userspace_layers { }; */ +/* +Since our quirky block definitions are basically a list of comma separated +arguments, we need a wrapper in order for these definitions to be +expanded before being used as arguments to the LAYOUT_xxx macro. +*/ +#if (!defined(LAYOUT) && defined(KEYMAP)) +#define LAYOUT KEYMAP +#endif + +#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__) +#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__) +#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) +#define LAYOUT_planck_grid(...) LAYOUT_planck_grid(__VA_ARGS__) + +/* +Blocks for each of the four major keyboard layouts +Organized so we can quickly adapt and modify all of them +at once, rather than for each keyboard, one at a time. +And this allows for much cleaner blocks in the keymaps. +For instance Tap/Hold for Control on all of the layouts + +NOTE: These are all the same length. If you do a search/replace + then you need to add/remove underscores to keep the + lengths consistent. +*/ + +#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T +#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G +#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P +#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, LT_MC(KC_SCLN) +#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH + + +#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G +#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D +#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN +#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O) +#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH + +#define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B +#define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G +#define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V + +#define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN +#define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, LT_MC(KC_O) +#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH + + +#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y +#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I +#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X + +#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L +#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, LT_MC(KC_S) +#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z + + +#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B +#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G +#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V + +#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN +#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, LT_MC(KC_I) +#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH + + +#define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K +#define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G +#define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN +#define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, LT_MC(KC_U) +#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH + + +#define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B +#define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F +#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM + +#define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L +#define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, LT_MC(KC_R) +#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X + + +#define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q +#define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U +#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W + +#define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P +#define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, LT_MC(KC_N) +#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN + + +#define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W +#define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R +#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X + +#define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J +#define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, LT_MC(KC_SCLN) +#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH + + +#define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W +#define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R +#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J + +#define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN +#define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, LT_MC(KC_H) +#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH + + +#define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W +#define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R +#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J + +#define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN +#define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, LT_MC(KC_H) +#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH + + +#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0 +#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 + +#define __________________LONG_FUNC_LEFT___________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 +#define __________________LONG_FUNC_RIGHT__________________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 + +#define ___________________BLANK___________________ _______, _______, _______, _______, _______ + + +#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC +#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________ +#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________ + +#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN +#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR +#define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + + + +#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________ +#define _________________RAISE_L2__________________ ___________________BLANK___________________ +#define _________________RAISE_L3__________________ ___________________BLANK___________________ + +#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________ +#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC +#define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END + + + +#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG +#define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM +#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T + +#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5 +#define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN +#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT + #endif // !USERSPACE \ No newline at end of file From d8f090e5592fd5b6fde35ae36e36f2473c716312 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 14 Nov 2018 18:32:28 -0800 Subject: [PATCH 0093/1763] Docs: Supporting a keyboard in the QMK Configurator (#4396) * Docs: Configurator Support * Minor updates * Updated keyboard.h example to use #pragma once per @drashna https://github.com/qmk/qmk_firmware/pull/4396#discussion_r232140934 * Add link to doc under Reference section Added to _sidebar.md and _summary.md * Changed doc title; minor tweaks Re-titled the doc as "Supporting Your Keyboard in QMK Configurator". Made some minor changes to the keyboard.h examples. * Added tags object to JSON example --- docs/_sidebar.md | 1 + docs/_summary.md | 1 + docs/reference_configurator_support.md | 195 +++++++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 docs/reference_configurator_support.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 67e81422a1..1fb5398d93 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -39,6 +39,7 @@ * [Glossary](reference_glossary.md) * [Unit Testing](unit_testing.md) * [Useful Functions](ref_functions.md) + * [Configurator Support](reference_configurator_support.md) * [Features](features.md) * [Basic Keycodes](keycodes_basic.md) diff --git a/docs/_summary.md b/docs/_summary.md index 67e81422a1..1fb5398d93 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -39,6 +39,7 @@ * [Glossary](reference_glossary.md) * [Unit Testing](unit_testing.md) * [Useful Functions](ref_functions.md) + * [Configurator Support](reference_configurator_support.md) * [Features](features.md) * [Basic Keycodes](keycodes_basic.md) diff --git a/docs/reference_configurator_support.md b/docs/reference_configurator_support.md new file mode 100644 index 0000000000..a20a6c9adb --- /dev/null +++ b/docs/reference_configurator_support.md @@ -0,0 +1,195 @@ +# Supporting Your Keyboard in QMK Configurator + +This page covers how to properly support keyboards in the [QMK Configurator](https://config.qmk.fm/). + + +## How the Configurator Understands Keyboards + +To understand how the Configurator understands keyboards, first one must understand layout macros. For this exercise, we're going to imagine a 17-key numpad PCB, which we're going to call `numpad`. + +``` +┌───┬───┬───┬───┐ +│NLk│ / │ * │ - │ +├───┼───┼───┼───┤ +│7 │8 │9 │ + │ +├───┼───┼───┤ │ +│4 │5 │6 │ │ +├───┼───┼───┼───┤ +│1 │2 │3 │Ent│ +├───┴───┼───┤ │ +│0 │ . │ │ +└───────┴───┴───┘ +``` + +?> For more on layout macros, see [Understanding QMK: Matrix Scanning](understanding_qmk.md?id=matrix-scanning) and [Understanding QMK: Matrix to Physical Layout Map](understanding_qmk.md?id=matrix-to-physical-layout-map). + +The Configurator's API reads the keyboard's `.h` file from `qmk_firmware/keyboards//.h`. For our numpad, this file would be `qmk_firmware/keyboards/numpad/numpad.h`: + +```c +#pragma once + +#define LAYOUT( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, k33, \ + k40, k42 \ + ) { \ + { k00, k01, k02, k03 }, \ + { k10, k11, k12, k13 }, \ + { k20, k21, k22, KC_NO }, \ + { k30, k31, k32, k33 }, \ + { k40, KC_NO, k42, KC_NO } \ +} +``` + +QMK uses `KC_NO` to designate places in the switch matrix where there is no switch. Sometimes, `XXX`, `___` or `____` are used as shorthand to make this section easier to read if it needs to be debugged. This is usually defined near the beginning of the `.h` file: + +```c +#pragma once + +#define XXX KC_NO + +#define LAYOUT( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, k33, \ + k40, k42 \ + ) { \ + { k00, k01, k02, k03 }, \ + { k10, k11, k12, k13 }, \ + { k20, k21, k22, XXX }, \ + { k30, k31, k32, k33 }, \ + { k40, XXX, k42, XXX } \ +} +``` + +!> This usage differs from that of keymap macros, which almost always use `XXXXXXX` (seven capital X's) for `KC_NO` and `_______` (seven underscores) for `KC_TRNS`. + +!> To prevent user confusion, using `KC_NO` is preferred. + +The layout macro tells the Configurator that our keyboard has 17 keys, arranged in five rows of four columns each. Our switch positions are named `k`, counting from 0. The names themselves actually don't matter, as long as they match between the top section, which receives the keycodes from the keymap, and the bottom half which designates where each key is in the matrix. + +To display our keyboard in a way that resembles the physical keyboard, we need to build a JSON file that tells the Configurator how to tie the physical locations and sizes of our keys to our switch matrix. + +## Building the JSON file + +To build the JSON file, the easiest way is to build the layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/) ("KLE"), from which we'll feed the Raw Data into a QMK tool that converts this data into a JSON the Configurator will read and use. Since KLE opens by default with a numpad layout, we're just going to remove the Getting Started instructions, and use what's left. + +Once the layout is as desired, move to the Raw Data tab in KLE, and copy the contents: + +``` +["Num Lock","/","*","-"], +["7\nHome","8\n↑","9\nPgUp",{h:2},"+"], +["4\n←","5","6\n→"], +["1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"], +[{w:2},"0\nIns",".\nDel"] +``` + +To convert this data into our JSON, go to the [QMK KLE-JSON Converter](https://qmk.fm/converter/), paste the Raw Data into the Input field, and click the Convert button. After a moment, our JSON data will appear in the Output field. Copy the contents to a new text document, and name the document `info.json`, saving it in the same folder that contains `numpad.h`. + +Use the `keyboard_name` object to set the name of the keyboard. The `bootloader` object is deprecated, so it can be deleted. For instruction purposes, we will put each key's object on its own line. This is only to make the file more human-readable, and does not affect the Configurator's functionality. + +```json +{ + "keyboard_name": "Numpad", + "url": "", + "maintainer": "qmk", + "tags": { + "form_factor": "numpad" + }, + "width": 4, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"Num Lock", "x":0, "y":0}, + {"label":"/", "x":1, "y":0}, + {"label":"*", "x":2, "y":0}, + {"label":"-", "x":3, "y":0}, + {"label":"7", "x":0, "y":1}, + {"label":"8", "x":1, "y":1}, + {"label":"9", "x":2, "y":1}, + {"label":"+", "x":3, "y":1, "h":2}, + {"label":"4", "x":0, "y":2}, + {"label":"5", "x":1, "y":2}, + {"label":"6", "x":2, "y":2}, + {"label":"1", "x":0, "y":3}, + {"label":"2", "x":1, "y":3}, + {"label":"3", "x":2, "y":3}, + {"label":"Enter", "x":3, "y":3, "h":2}, + {"label":"0", "x":0, "y":4, "w":2}, + {"label":".", "x":2, "y":4} + ] + } + } +} +``` + +The `layouts` object contains the data that represents the physical layout of the keyboard. It has an object `LAYOUT`, which needs to match the name of our layout macro from `numpad.h`. The `LAYOUT` object itself has an object named `layout`, which contains one JSON object for each physical key on our keyboard, formatted as follows: + +``` + ┌ The name of the key. Not displayed in the Configurator. + │ ┌ The key's X-axis location, in key units from the + │ │ keyboard's left edge. + │ │ ┌ The key's Y-axis location, in key units from + │ │ │ the keyboard's top (rear-facing) edge. + ↓ ↓ ↓ +{"label":"Num Lock", "x":0, "y":0}, +``` + +Some objects will also have `"w"` and `"h"` keys, which represent a key's width and height, respectively. + +?> For more on the `info.json` files, see [QMK Keyboard Guidelines: Keyboard Metadata](hardware_keyboard_guidelines.md?id=keyboard-metadata) + + +## How the Configurator Programs Keys + +The Configurator's API uses the layout macro and the JSON file we've given it to create a visual representation of the keyboard that has each visual object tied to a specific key, in sequence: + +key in layout macro | JSON object used +:---: | :---- +k00 | {"label":"Num Lock", "x":0, "y":0} +k01 | {"label":"/", "x":1, "y":0} +k02 | {"label":"*", "x":2, "y":0} +k03 | {"label":"-", "x":3, "y":0} +k10 | {"label":"7", "x":0, "y":1} +k11 | {"label":"8", "x":1, "y":1} +k12 | {"label":"9", "x":2, "y":1} +k13 | {"label":"+", "x":3, "y":1, "h":2} +k20 | {"label":"4", "x":0, "y":2} +k21 | {"label":"5", "x":1, "y":2} +k22 | {"label":"6", "x":2, "y":2} +k30 | {"label":"1", "x":0, "y":3} +k31 | {"label":"2", "x":1, "y":3} +k32 | {"label":"3", "x":2, "y":3} +k33 | {"label":"Enter", "x":3, "y":3, "h":2} +k40 | {"label":"0", "x":0, "y":4, "w":2} +k42 | {"label":".", "x":2, "y":4} + +When a user selects the top-left key in the Configurator, and assigns Num Lock to it, the Configurator builds a keymap file with `KC_NLCK` as the first key, and so on as the keymap is built. The `label` keys are not used; they are only for the user's reference in identifying specific keys when debugging the `info.json` file. + + +## Issues and Hazards + +Currently, the Configurator does not support key rotation or non-rectangular key shapes like ISO Enter. Additionally, keys that are vertically-offset from their "row" — the arrow keys on 1800-layouts like the [TKC1800](https://github.com/qmk/qmk_firmware/tree/4ac48a61a66206beaf2fdd5f2939d8bbedd0004c/keyboards/tkc1800/) being a prominent example — confuse the KLE-to-JSON Converter, if not adjusted for by the contributor of the `info.json` file. + +### Workarounds + +#### Non-rectangular keys + +For ISO Enter keys, QMK custom is to display it as a rectangular key, 1.25u wide and 2u high, aligned so its right edge is aligned with the right edge of the alphanumeric key block. + +![](https://i.imgur.com/JKngtTw.png) +*A 60% keyboard in standard ISO layout, as rendered by QMK Configurator.* + +#### Vertically-offset keys + +For vertically-offset keys, place them in KLE as if they were not offset, then edit the Y-values as needed in the converted JSON file + +![](https://i.imgur.com/fmDvDzR.png) +*An 1800-layout keyboard as rendered in Keyboard Layout Editor, without the vertical offset applied to the arrow keys.* + +![](https://i.imgur.com/8beYMBR.png) +*A Unix diff file, showing the changes needed to vertically-offset the arrow keys in our keyboard's JSON file.* From daf08f40f2aeb815322d65d14a90ae56ea22953c Mon Sep 17 00:00:00 2001 From: Pekaso Date: Thu, 15 Nov 2018 11:36:53 +0900 Subject: [PATCH 0094/1763] serial.c update (#4423) --- keyboards/fortitude60/serial.c | 290 +++++++++++++++++++------- keyboards/fortitude60/serial.h | 59 +++--- keyboards/fortitude60/serial_config.h | 8 +- 3 files changed, 254 insertions(+), 103 deletions(-) diff --git a/keyboards/fortitude60/serial.c b/keyboards/fortitude60/serial.c index cea1a5f6ca..6006ebf1bd 100644 --- a/keyboards/fortitude60/serial.c +++ b/keyboards/fortitude60/serial.c @@ -1,5 +1,10 @@ /* * WARNING: be careful changing this code, it is very timing dependent + * + * 2018-10-28 checked + * avr-gcc 4.9.2 + * avr-gcc 5.4.0 + * avr-gcc 7.3.0 */ #ifndef F_CPU @@ -14,10 +19,60 @@ #include "serial.h" //#include -#ifdef USE_SERIAL +#ifdef SOFT_SERIAL_PIN -#ifndef SERIAL_USE_MULTI_TRANSACTION -/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ +#ifdef __AVR_ATmega32U4__ + // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial. + #ifdef USE_I2C + #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1 + #error Using ATmega32U4 I2C, so can not use PD0, PD1 + #endif + #endif + + #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3 + #define SERIAL_PIN_DDR DDRD + #define SERIAL_PIN_PORT PORTD + #define SERIAL_PIN_INPUT PIND + #if SOFT_SERIAL_PIN == D0 + #define SERIAL_PIN_MASK _BV(PD0) + #define EIMSK_BIT _BV(INT0) + #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01))) + #define SERIAL_PIN_INTERRUPT INT0_vect + #elif SOFT_SERIAL_PIN == D1 + #define SERIAL_PIN_MASK _BV(PD1) + #define EIMSK_BIT _BV(INT1) + #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11))) + #define SERIAL_PIN_INTERRUPT INT1_vect + #elif SOFT_SERIAL_PIN == D2 + #define SERIAL_PIN_MASK _BV(PD2) + #define EIMSK_BIT _BV(INT2) + #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21))) + #define SERIAL_PIN_INTERRUPT INT2_vect + #elif SOFT_SERIAL_PIN == D3 + #define SERIAL_PIN_MASK _BV(PD3) + #define EIMSK_BIT _BV(INT3) + #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31))) + #define SERIAL_PIN_INTERRUPT INT3_vect + #endif + #elif SOFT_SERIAL_PIN == E6 + #define SERIAL_PIN_DDR DDRE + #define SERIAL_PIN_PORT PORTE + #define SERIAL_PIN_INPUT PINE + #define SERIAL_PIN_MASK _BV(PE6) + #define EIMSK_BIT _BV(INT6) + #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61))) + #define SERIAL_PIN_INTERRUPT INT6_vect + #else + #error invalid SOFT_SERIAL_PIN value + #endif + +#else + #error serial.c now support ATmega32U4 only +#endif + +//////////////// for backward compatibility //////////////////////////////// +#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION) +/* --- USE OLD API (compatible with let's split serial.c) */ #if SERIAL_SLAVE_BUFFER_LENGTH > 0 uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; #endif @@ -42,56 +97,118 @@ SSTD_t transactions[] = { }; void serial_master_init(void) -{ soft_serial_initiator_init(transactions); } +{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } void serial_slave_init(void) -{ soft_serial_target_init(transactions); } +{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); } // 0 => no error // 1 => slave did not respond // 2 => checksum error int serial_update_buffers() -{ return soft_serial_transaction(); } +{ + int result; + result = soft_serial_transaction(); + return result; +} -#endif // Simple API (OLD API, compatible with let's split serial.c) +#endif // end of OLD API (compatible with let's split serial.c) +//////////////////////////////////////////////////////////////////////////// #define ALWAYS_INLINE __attribute__((always_inline)) #define NO_INLINE __attribute__((noinline)) #define _delay_sub_us(x) __builtin_avr_delay_cycles(x) -// Serial pulse period in microseconds. -#define TID_SEND_ADJUST 14 +// parity check +#define ODD_PARITY 1 +#define EVEN_PARITY 0 +#define PARITY EVEN_PARITY + +#ifdef SERIAL_DELAY + // custom setup in config.h + // #define TID_SEND_ADJUST 2 + // #define SERIAL_DELAY 6 // micro sec + // #define READ_WRITE_START_ADJUST 30 // cycles + // #define READ_WRITE_WIDTH_ADJUST 8 // cycles +#else +// ============ Standard setups ============ + +#ifndef SELECT_SOFT_SERIAL_SPEED +#define SELECT_SOFT_SERIAL_SPEED 1 +// 0: about 189kbps +// 1: about 137kbps (default) +// 2: about 75kbps +// 3: about 39kbps +// 4: about 26kbps +// 5: about 20kbps +#endif -#define SELECT_SERIAL_SPEED 1 -#if SELECT_SERIAL_SPEED == 0 +#if __GNUC__ < 6 + #define TID_SEND_ADJUST 14 +#else + #define TID_SEND_ADJUST 2 +#endif + +#if SELECT_SOFT_SERIAL_SPEED == 0 // Very High speed #define SERIAL_DELAY 4 // micro sec - #define READ_WRITE_START_ADJUST 33 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 1 + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 34 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 1 // High speed #define SERIAL_DELAY 6 // micro sec - #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 2 + #if __GNUC__ < 6 + #define READ_WRITE_START_ADJUST 30 // cycles + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_START_ADJUST 33 // cycles + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 2 // Middle speed #define SERIAL_DELAY 12 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 3 + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 3 // Low speed #define SERIAL_DELAY 24 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles -#elif SELECT_SERIAL_SPEED == 4 + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 4 // Very Low speed - #define SERIAL_DELAY 50 // micro sec + #define SERIAL_DELAY 36 // micro sec #define READ_WRITE_START_ADJUST 30 // cycles - #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif +#elif SELECT_SOFT_SERIAL_SPEED == 5 + // Ultra Low speed + #define SERIAL_DELAY 48 // micro sec + #define READ_WRITE_START_ADJUST 30 // cycles + #if __GNUC__ < 6 + #define READ_WRITE_WIDTH_ADJUST 3 // cycles + #else + #define READ_WRITE_WIDTH_ADJUST 7 // cycles + #endif #else -#error Illegal Serial Speed -#endif - +#error invalid SELECT_SOFT_SERIAL_SPEED value +#endif /* SELECT_SOFT_SERIAL_SPEED */ +#endif /* SERIAL_DELAY */ #define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) #define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) @@ -105,17 +222,21 @@ int serial_update_buffers() #endif static SSTD_t *Transaction_table = NULL; +static uint8_t Transaction_table_size = 0; +inline static void serial_delay(void) ALWAYS_INLINE; inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); } +inline static void serial_delay_half1(void) ALWAYS_INLINE; inline static void serial_delay_half1(void) { _delay_us(SERIAL_DELAY_HALF1); } +inline static void serial_delay_half2(void) ALWAYS_INLINE; inline static void serial_delay_half2(void) { _delay_us(SERIAL_DELAY_HALF2); @@ -135,6 +256,7 @@ void serial_input_with_pullup(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } +inline static uint8_t serial_read_pin(void) ALWAYS_INLINE; inline static uint8_t serial_read_pin(void) { return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); @@ -152,30 +274,28 @@ void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } -void soft_serial_initiator_init(SSTD_t *sstd_table) +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_output(); serial_high(); } -void soft_serial_target_init(SSTD_t *sstd_table) +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size) { Transaction_table = sstd_table; + Transaction_table_size = (uint8_t)sstd_table_size; serial_input_with_pullup(); -#if SERIAL_PIN_MASK == _BV(PD0) - // Enable INT0 - EIMSK |= _BV(INT0); - // Trigger on falling edge of INT0 - EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -#elif SERIAL_PIN_MASK == _BV(PD2) - // Enable INT2 - EIMSK |= _BV(INT2); - // Trigger on falling edge of INT2 - EICRA &= ~(_BV(ISC20) | _BV(ISC21)); + // Enable INT0-INT3,INT6 + EIMSK |= EIMSK_BIT; +#if SERIAL_PIN_MASK == _BV(PE6) + // Trigger on falling edge of INT6 + EICRB &= EICRx_BIT; #else - #error unknown SERIAL_PIN_MASK value + // Trigger on falling edge of INT0-INT3 + EICRA &= EICRx_BIT; #endif } @@ -191,7 +311,7 @@ void sync_recv(void) { } // Used by the reciver to send a synchronization signal to the sender. -static void sync_send(void)NO_INLINE; +static void sync_send(void) NO_INLINE; static void sync_send(void) { serial_low(); @@ -205,12 +325,12 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { uint8_t byte, i, p, pb; _delay_sub_us(READ_WRITE_START_ADJUST); - for( i = 0, byte = 0, p = 0; i < bit; i++ ) { + for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) { serial_delay_half1(); // read the middle of pulses if( serial_read_pin() ) { - byte = (byte << 1) | 1; p ^= 1; + byte = (byte << 1) | 1; p ^= 1; } else { - byte = (byte << 1) | 0; p ^= 0; + byte = (byte << 1) | 0; p ^= 0; } _delay_sub_us(READ_WRITE_WIDTH_ADJUST); serial_delay_half2(); @@ -230,13 +350,13 @@ static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE; void serial_write_chunk(uint8_t data, uint8_t bit) { uint8_t b, p; - for( p = 0, b = 1<<(bit-1); b ; b >>= 1) { - if(data & b) { - serial_high(); p ^= 1; - } else { - serial_low(); p ^= 0; - } - serial_delay(); + for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) { + if(data & b) { + serial_high(); p ^= 1; + } else { + serial_low(); p ^= 0; + } + serial_delay(); } /* send parity bit */ if(p & 1) { serial_high(); } @@ -288,6 +408,13 @@ void change_reciver2sender(void) { serial_delay_half1(); //4 } +static inline uint8_t nibble_bits_count(uint8_t bits) +{ + bits = (bits & 0x5) + (bits >> 1 & 0x5); + bits = (bits & 0x3) + (bits >> 2 & 0x3); + return bits; +} + // interrupt handle to be used by the target device ISR(SERIAL_PIN_INTERRUPT) { @@ -297,12 +424,15 @@ ISR(SERIAL_PIN_INTERRUPT) { SSTD_t *trans = Transaction_table; #else // recive transaction table index - uint8_t tid; + uint8_t tid, bits; uint8_t pecount = 0; sync_recv(); - tid = serial_read_chunk(&pecount,4); - if(pecount> 0) + bits = serial_read_chunk(&pecount,7); + tid = bits>>3; + bits = (bits&7) != nibble_bits_count(tid); + if( bits || pecount> 0 || tid > Transaction_table_size ) { return; + } serial_delay_half1(); serial_high(); // response step1 low->high @@ -315,17 +445,17 @@ ISR(SERIAL_PIN_INTERRUPT) { // target send phase if( trans->target2initiator_buffer_size > 0 ) serial_send_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size); + trans->target2initiator_buffer_size); // target switch to input change_sender2reciver(); // target recive phase if( trans->initiator2target_buffer_size > 0 ) { if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size) ) { - *trans->status = TRANSACTION_ACCEPTED; + trans->initiator2target_buffer_size) ) { + *trans->status = TRANSACTION_ACCEPTED; } else { - *trans->status = TRANSACTION_DATA_ERROR; + *trans->status = TRANSACTION_DATA_ERROR; } } else { *trans->status = TRANSACTION_ACCEPTED; @@ -349,6 +479,8 @@ int soft_serial_transaction(void) { SSTD_t *trans = Transaction_table; #else int soft_serial_transaction(int sstd_index) { + if( sstd_index > Transaction_table_size ) + return TRANSACTION_TYPE_ERROR; SSTD_t *trans = &Transaction_table[sstd_index]; #endif cli(); @@ -375,9 +507,10 @@ int soft_serial_transaction(int sstd_index) { #else // send transaction table index + int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index)); sync_send(); _delay_sub_us(TID_SEND_ADJUST); - serial_write_chunk(sstd_index, 4); + serial_write_chunk(tid, 7); serial_delay_half1(); // wait for the target response (step1 low->high) @@ -389,12 +522,12 @@ int soft_serial_transaction(int sstd_index) { // check if the target is present (step2 high->low) for( int i = 0; serial_read_pin(); i++ ) { if (i > SLAVE_INT_ACK_WIDTH + 1) { - // slave failed to pull the line low, assume not present - serial_output(); - serial_high(); - *trans->status = TRANSACTION_NO_RESPONSE; - sei(); - return TRANSACTION_NO_RESPONSE; + // slave failed to pull the line low, assume not present + serial_output(); + serial_high(); + *trans->status = TRANSACTION_NO_RESPONSE; + sei(); + return TRANSACTION_NO_RESPONSE; } _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT); } @@ -404,12 +537,12 @@ int soft_serial_transaction(int sstd_index) { // if the target is present syncronize with it if( trans->target2initiator_buffer_size > 0 ) { if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer, - trans->target2initiator_buffer_size) ) { - serial_output(); - serial_high(); - *trans->status = TRANSACTION_DATA_ERROR; - sei(); - return TRANSACTION_DATA_ERROR; + trans->target2initiator_buffer_size) ) { + serial_output(); + serial_high(); + *trans->status = TRANSACTION_DATA_ERROR; + sei(); + return TRANSACTION_DATA_ERROR; } } @@ -419,7 +552,7 @@ int soft_serial_transaction(int sstd_index) { // initiator send phase if( trans->initiator2target_buffer_size > 0 ) { serial_send_packet((uint8_t *)trans->initiator2target_buffer, - trans->initiator2target_buffer_size); + trans->initiator2target_buffer_size); } // always, release the line when not in use @@ -441,4 +574,17 @@ int soft_serial_get_and_clean_status(int sstd_index) { } #endif -#endif \ No newline at end of file +#endif + +// Helix serial.c history +// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc) +// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4) +// (adjusted with avr-gcc 4.9.2) +// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78) +// (adjusted with avr-gcc 4.9.2) +// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae) +// (adjusted with avr-gcc 4.9.2) +// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff) +// (adjusted with avr-gcc 7.3.0) +// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66) +// (adjusted with avr-gcc 5.4.0, 7.3.0) diff --git a/keyboards/fortitude60/serial.h b/keyboards/fortitude60/serial.h index d008980556..2e53928df2 100644 --- a/keyboards/fortitude60/serial.h +++ b/keyboards/fortitude60/serial.h @@ -4,40 +4,47 @@ #include // ///////////////////////////////////////////////////////////////// -// Need Soft Serial defines in serial_config.h +// Need Soft Serial defines in config.h // ///////////////////////////////////////////////////////////////// // ex. -// #define SERIAL_PIN_DDR DDRD -// #define SERIAL_PIN_PORT PORTD -// #define SERIAL_PIN_INPUT PIND -// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2 -// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2 +// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6 +// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5 +// // 1: about 137kbps (default) +// // 2: about 75kbps +// // 3: about 39kbps +// // 4: about 26kbps +// // 5: about 20kbps // -// //// USE Simple API (OLD API, compatible with let's split serial.c) +// //// USE OLD API (compatible with let's split serial.c) // ex. // #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 // #define SERIAL_MASTER_BUFFER_LENGTH 1 // -// //// USE flexible API (using multi-type transaction function) -// #define SERIAL_USE_MULTI_TRANSACTION +// //// USE NEW API +// //// USE simple API (using signle-type transaction function) +// #define SERIAL_USE_SINGLE_TRANSACTION +// //// USE flexible API (using multi-type transaction function) +// #define SERIAL_USE_MULTI_TRANSACTION // // ///////////////////////////////////////////////////////////////// -#ifndef SERIAL_USE_MULTI_TRANSACTION -/* --- USE Simple API (OLD API, compatible with let's split serial.c) */ -#if SERIAL_SLAVE_BUFFER_LENGTH > 0 -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -#endif -#if SERIAL_MASTER_BUFFER_LENGTH > 0 -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; -#endif +//////////////// for backward compatibility //////////////////////////////// +#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION) +/* --- USE OLD API (compatible with let's split serial.c) */ + #if SERIAL_SLAVE_BUFFER_LENGTH > 0 + extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; + #endif + #if SERIAL_MASTER_BUFFER_LENGTH > 0 + extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + #endif -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); + void serial_master_init(void); + void serial_slave_init(void); + int serial_update_buffers(void); -#endif // USE Simple API +#endif // end of USE OLD API +//////////////////////////////////////////////////////////////////////////// // Soft Serial Transaction Descriptor typedef struct _SSTD_t { @@ -47,16 +54,18 @@ typedef struct _SSTD_t { uint8_t target2initiator_buffer_size; uint8_t *target2initiator_buffer; } SSTD_t; +#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t)) // initiator is transaction start side -void soft_serial_initiator_init(SSTD_t *sstd_table); +void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size); // target is interrupt accept side -void soft_serial_target_init(SSTD_t *sstd_table); +void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size); // initiator resullt #define TRANSACTION_END 0 #define TRANSACTION_NO_RESPONSE 0x1 #define TRANSACTION_DATA_ERROR 0x2 +#define TRANSACTION_TYPE_ERROR 0x4 #ifndef SERIAL_USE_MULTI_TRANSACTION int soft_serial_transaction(void); #else @@ -72,9 +81,9 @@ int soft_serial_transaction(int sstd_index); // target: // TRANSACTION_DATA_ERROR // or TRANSACTION_ACCEPTED -#define TRANSACTION_ACCEPTED 0x4 +#define TRANSACTION_ACCEPTED 0x8 #ifdef SERIAL_USE_MULTI_TRANSACTION int soft_serial_get_and_clean_status(int sstd_index); #endif -#endif /* SOFT_SERIAL_H */ \ No newline at end of file +#endif /* SOFT_SERIAL_H */ diff --git a/keyboards/fortitude60/serial_config.h b/keyboards/fortitude60/serial_config.h index 96a54afbd8..d4a42bce38 100644 --- a/keyboards/fortitude60/serial_config.h +++ b/keyboards/fortitude60/serial_config.h @@ -2,13 +2,9 @@ #define SOFT_SERIAL_CONFIG_H /* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect +#define SOFT_SERIAL_PIN D2 #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 #define SERIAL_MASTER_BUFFER_LENGTH 1 -#endif /* SOFT_SERIAL_CONFIG_H */ \ No newline at end of file +#endif /* SOFT_SERIAL_CONFIG_H */ From 46cf8cc9b33a3c8bdbb0ce7df7f48f28e4d979a5 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 14 Nov 2018 18:37:53 -0800 Subject: [PATCH 0095/1763] Configurator support for Octagon V2 75_ansi (#4426) --- keyboards/duck/octagon/v2/info.json | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/keyboards/duck/octagon/v2/info.json b/keyboards/duck/octagon/v2/info.json index 7bc0c6ef90..11bde45a5d 100644 --- a/keyboards/duck/octagon/v2/info.json +++ b/keyboards/duck/octagon/v2/info.json @@ -1,12 +1,16 @@ { - "keyboard_name": "Octagon V2", - "url": "", - "maintainer": "qmk", - "width": 16, - "height": 6, + "keyboard_name": "Octagon V2", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 6, "layouts": { "LAYOUT": { "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}] + }, + + "LAYOUT_75_ansi": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1, "w":2}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":6.5, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}, {"x":9.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2, "w":1.5}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.75}, {"x":1.75, "y":3}, {"x":2.75, "y":3}, {"x":3.75, "y":3}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3, "w":2.25}, {"x":15, "y":3}, {"x":0, "y":4, "w":2.25}, {"x":2.25, "y":4}, {"x":3.25, "y":4}, {"x":4.25, "y":4}, {"x":5.25, "y":4}, {"x":6.25, "y":4}, {"x":7.25, "y":4}, {"x":8.25, "y":4}, {"x":9.25, "y":4}, {"x":10.25, "y":4}, {"x":11.25, "y":4}, {"x":12.25, "y":4, "w":1.75}, {"x":14, "y":4}, {"x":15, "y":4}, {"x":0, "y":5, "w":1.25}, {"x":1.25, "y":5, "w":1.25}, {"x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"x":10, "y":5}, {"x":11, "y":5}, {"x":12, "y":5}, {"x":13, "y":5}, {"x":14, "y":5}, {"x":15, "y":5}] } } } From 39bd760faf2666e91d6dc5b199f02fa3206c6acd Mon Sep 17 00:00:00 2001 From: James Laird-Wah Date: Fri, 16 Nov 2018 17:22:05 +1100 Subject: [PATCH 0096/1763] Use a single endpoint for HID reports (#3951) * Unify multiple HID interfaces into one This reduces the number of USB endpoints required, which frees them up for other things. NKRO and EXTRAKEY always use the shared endpoint. By default, MOUSEKEY also uses it. This means it won't work as a Boot Procotol mouse in some BIOSes, etc. If you really think your keyboard needs to work as a mouse in your BIOS, set MOUSE_SHARED_EP = no in your rules.mk. By default, the core keyboard does not use the shared endpoint, as not all BIOSes are standards compliant and that's one place you don't want to find out your keyboard doesn't work.. If you are really confident, you can set KEYBOARD_SHARED_EP = yes to use the shared endpoint here too. * unify endpoints: ChibiOS protocol implementation * fixup: missing #ifdef EXTRAKEY_ENABLEs broke build on AVR with EXTRAKEY disabled * endpoints: restore error when too many endpoints required * lufa: wait up to 10ms to send keyboard input This avoids packets being dropped when two reports are sent in quick succession (eg. releasing a dual role key). * endpoints: fix compile on ARM_ATSAM * endpoint: ARM_ATSAM fixes No longer use wrong or unexpected endpoint IDs * endpoints: accommodate VUSB protocol V-USB has its own, understandably simple ideas about the report formats. It already blasts the mouse and extrakeys through one endpoint with report IDs. We just stay out of its way. * endpoints: document new endpoint configuration options * endpoints: respect keyboard_report->mods in NKRO The caller(s) of host_keyboard_send expect to be able to just drop modifiers in the mods field and not worry about whether NKRO is in use. This is a good thing. So we just shift it over if needs be. * endpoints: report.c: update for new keyboard_report format --- docs/config_options.md | 29 +++ tmk_core/common.mk | 21 ++ tmk_core/common/host.c | 22 ++ tmk_core/common/report.c | 21 +- tmk_core/common/report.h | 46 ++-- tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c | 5 +- tmk_core/protocol/chibios/usb_main.c | 176 +++++++-------- tmk_core/protocol/chibios/usb_main.h | 11 +- tmk_core/protocol/lufa/lufa.c | 92 ++++---- tmk_core/protocol/usb_descriptor.c | 213 ++++++++---------- tmk_core/protocol/usb_descriptor.h | 170 ++++++-------- 11 files changed, 426 insertions(+), 380 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index c4921c21d7..b811fa877d 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -261,3 +261,32 @@ Use these to enable or disable building certain features. The more you have enab * Forces the keyboard to wait for a USB connection to be established before it starts up * `NO_USB_STARTUP_CHECK` * Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master. + +## USB Endpoint Limitations + +In order to provide services over USB, QMK has to use USB endpoints. +These are a finite resource: each microcontroller has only a certain number. +This limits what features can be enabled together. +If the available endpoints are exceeded, a build error is thrown. + +The following features can require separate endpoints: + +* `MOUSEKEY_ENABLE` +* `EXTRAKEY_ENABLE` +* `CONSOLE_ENABLE` +* `NKRO_ENABLE` +* `MIDI_ENABLE` +* `RAW_ENABLE` +* `VIRTSER_ENABLE` + +In order to improve utilisation of the endpoints, the HID features can be combined to use a single endpoint. +By default, `MOUSEKEY`, `EXTRAKEY`, and `NKRO` are combined into a single endpoint. + +The base keyboard functionality can also be combined into the endpoint, +by setting `KEYBOARD_SHARED_EP = yes`. +This frees up one more endpoint, +but it can prevent the keyboard working in some BIOSes, +as they do not implement Boot Keyboard protocol switching. + +Combining the mouse also breaks Boot Mouse compatibility. +The mouse can be uncombined by setting `MOUSE_SHARED_EP = no` if this functionality is required. diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 8eac1734f4..063115acb1 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -82,15 +82,31 @@ else TMK_COMMON_SRC += $(COMMON_DIR)/magic.c endif +SHARED_EP_ENABLE = no +MOUSE_SHARED_EP ?= yes +ifeq ($(strip $(KEYBOARD_SHARED_EP)), yes) + TMK_COMMON_DEFS += -DKEYBOARD_SHARED_EP + SHARED_EP_ENABLE = yes + # With the current usb_descriptor.c code, + # you can't share kbd without sharing mouse; + # that would be a very unexpected use case anyway + MOUSE_SHARED_EP = yes +endif ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) TMK_COMMON_SRC += $(COMMON_DIR)/mousekey.c TMK_COMMON_DEFS += -DMOUSEKEY_ENABLE TMK_COMMON_DEFS += -DMOUSE_ENABLE + + ifeq ($(strip $(MOUSE_SHARED_EP)), yes) + TMK_COMMON_DEFS += -DMOUSE_SHARED_EP + SHARED_EP_ENABLE = yes + endif endif ifeq ($(strip $(EXTRAKEY_ENABLE)), yes) TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE + SHARED_EP_ENABLE = yes endif ifeq ($(strip $(RAW_ENABLE)), yes) @@ -111,6 +127,7 @@ endif ifeq ($(strip $(NKRO_ENABLE)), yes) TMK_COMMON_DEFS += -DNKRO_ENABLE + SHARED_EP_ENABLE = yes endif ifeq ($(strip $(USB_6KRO_ENABLE)), yes) @@ -182,6 +199,10 @@ ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) endif endif +ifeq ($(strip $(SHARED_EP_ENABLE)), yes) + TMK_COMMON_DEFS += -DSHARED_EP_ENABLE +endif + # Bootloader address ifdef STM32_BOOTLOADER_ADDRESS TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS) diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c index e12b622165..f5d0416996 100644 --- a/tmk_core/common/host.c +++ b/tmk_core/common/host.c @@ -22,6 +22,11 @@ along with this program. If not, see . #include "util.h" #include "debug.h" +#ifdef NKRO_ENABLE + #include "keycode_config.h" + extern keymap_config_t keymap_config; +#endif + static host_driver_t *driver; static uint16_t last_system_report = 0; static uint16_t last_consumer_report = 0; @@ -46,6 +51,20 @@ uint8_t host_keyboard_leds(void) void host_keyboard_send(report_keyboard_t *report) { if (!driver) return; +#if defined(NKRO_ENABLE) && defined(NKRO_SHARED_EP) + if (keyboard_protocol && keymap_config.nkro) { + /* The callers of this function assume that report->mods is where mods go in. + * But report->nkro.mods can be at a different offset if core keyboard does not have a report ID. + */ + report->nkro.mods = report->mods; + report->nkro.report_id = REPORT_ID_NKRO; + } else +#endif + { +#ifdef KEYBOARD_SHARED_EP + report->report_id = REPORT_ID_KEYBOARD; +#endif + } (*driver->send_keyboard)(report); if (debug_keyboard) { @@ -60,6 +79,9 @@ void host_keyboard_send(report_keyboard_t *report) void host_mouse_send(report_mouse_t *report) { if (!driver) return; +#ifdef MOUSE_SHARED_EP + report->report_id = REPORT_ID_MOUSE; +#endif (*driver->send_mouse)(report); } diff --git a/tmk_core/common/report.c b/tmk_core/common/report.c index eb3b44312f..6a06b70c60 100644 --- a/tmk_core/common/report.c +++ b/tmk_core/common/report.c @@ -19,6 +19,7 @@ #include "keycode_config.h" #include "debug.h" #include "util.h" +#include /** \brief has_anykey * @@ -27,8 +28,16 @@ uint8_t has_anykey(report_keyboard_t* keyboard_report) { uint8_t cnt = 0; - for (uint8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) { - if (keyboard_report->raw[i]) + uint8_t *p = keyboard_report->keys; + uint8_t lp = sizeof(keyboard_report->keys); +#ifdef NKRO_ENABLE + if (keyboard_protocol && keymap_config.nkro) { + p = keyboard_report->nkro.bits; + lp = sizeof(keyboard_report->nkro.bits); + } +#endif + while (lp--) { + if (*p++) cnt++; } return cnt; @@ -237,7 +246,11 @@ void del_key_from_report(report_keyboard_t* keyboard_report, uint8_t key) void clear_keys_from_report(report_keyboard_t* keyboard_report) { // not clear mods - for (int8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) { - keyboard_report->raw[i] = 0; +#ifdef NKRO_ENABLE + if (keyboard_protocol && keymap_config.nkro) { + memset(keyboard_report->nkro.bits, 0, sizeof(keyboard_report->nkro.bits)); + return; } +#endif + memset(keyboard_report->keys, 0, sizeof(keyboard_report->keys)); } diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 167f382751..5a1a6b19c7 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -23,9 +23,11 @@ along with this program. If not, see . /* report id */ -#define REPORT_ID_MOUSE 1 -#define REPORT_ID_SYSTEM 2 -#define REPORT_ID_CONSUMER 3 +#define REPORT_ID_KEYBOARD 1 +#define REPORT_ID_MOUSE 2 +#define REPORT_ID_SYSTEM 3 +#define REPORT_ID_CONSUMER 4 +#define REPORT_ID_NKRO 5 /* mouse buttons */ #define MOUSE_BTN1 (1<<0) @@ -72,32 +74,35 @@ along with this program. If not, see . #define SYSTEM_WAKE_UP 0x0083 +#define NKRO_SHARED_EP /* key report size(NKRO or boot mode) */ #if defined(NKRO_ENABLE) - #if defined(PROTOCOL_PJRC) - #include "usb.h" - #define KEYBOARD_REPORT_SIZE KBD2_SIZE - #define KEYBOARD_REPORT_KEYS (KBD2_SIZE - 2) - #define KEYBOARD_REPORT_BITS (KBD2_SIZE - 1) - #elif defined(PROTOCOL_LUFA) || defined(PROTOCOL_CHIBIOS) + #if defined(PROTOCOL_LUFA) || defined(PROTOCOL_CHIBIOS) #include "protocol/usb_descriptor.h" - #define KEYBOARD_REPORT_SIZE NKRO_EPSIZE - #define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2) - #define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1) + #define KEYBOARD_REPORT_BITS (SHARED_EPSIZE - 2) #elif defined(PROTOCOL_ARM_ATSAM) #include "protocol/arm_atsam/usb/udi_device_epsize.h" - #define KEYBOARD_REPORT_SIZE NKRO_EPSIZE - #define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2) #define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1) + #undef NKRO_SHARED_EP + #undef MOUSE_SHARED_EP #else #error "NKRO not supported with this protocol" + #endif #endif +#ifdef KEYBOARD_SHARED_EP +# define KEYBOARD_REPORT_SIZE 9 #else # define KEYBOARD_REPORT_SIZE 8 -# define KEYBOARD_REPORT_KEYS 6 #endif +#define KEYBOARD_REPORT_KEYS 6 + +/* VUSB hardcodes keyboard and mouse+extrakey only */ +#if defined(PROTOCOL_VUSB) + #undef KEYBOARD_SHARED_EP + #undef MOUSE_SHARED_EP +#endif #ifdef __cplusplus extern "C" { @@ -126,12 +131,18 @@ extern "C" { typedef union { uint8_t raw[KEYBOARD_REPORT_SIZE]; struct { +#ifdef KEYBOARD_SHARED_EP + uint8_t report_id; +#endif uint8_t mods; uint8_t reserved; uint8_t keys[KEYBOARD_REPORT_KEYS]; }; #ifdef NKRO_ENABLE - struct { + struct nkro_report { +#ifdef NKRO_SHARED_EP + uint8_t report_id; +#endif uint8_t mods; uint8_t bits[KEYBOARD_REPORT_BITS]; } nkro; @@ -139,6 +150,9 @@ typedef union { } __attribute__ ((packed)) report_keyboard_t; typedef struct { +#ifdef MOUSE_SHARED_EP + uint8_t report_id; +#endif uint8_t buttons; int8_t x; int8_t y; diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c index 18f9784ae6..c263ac4aa1 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c @@ -54,6 +54,7 @@ #include "udi_hid.h" #include "udi_hid_kbd.h" #include +#include "report.h" //*************************************************************************** // KBD @@ -430,7 +431,7 @@ UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = { 0x05, 0x01, // Usage Page (Generic Desktop), 0x09, 0x80, // Usage (System Control), 0xA1, 0x01, // Collection (Application), - 0x85, 0x02, // Report ID (2) (System), + 0x85, REPORT_ID_SYSTEM, // Report ID (2) (System), 0x16, 0x01, 0x00, // Logical Minimum (1), 0x26, 0x03, 0x00, // Logical Maximum (3), 0x1A, 0x81, 0x00, // Usage Minimum (81) (System Power Down), @@ -445,7 +446,7 @@ UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = { 0x05, 0x0C, // Usage Page (Consumer), 0x09, 0x01, // Usage (Consumer Control), 0xA1, 0x01, // Collection (Application), - 0x85, 0x03, // Report ID (3) (Consumer), + 0x85, REPORT_ID_CONSUMER, // Report ID (3) (Consumer), 0x16, 0x01, 0x00, // Logical Minimum (1), 0x26, 0x9C, 0x02, // Logical Maximum (668), 0x1A, 0x01, 0x00, // Usage Minimum (1), diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 71892c4f49..3028e7ea2a 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -95,6 +95,7 @@ static const USBDescriptor *usb_get_descriptor_cb(USBDriver *usbp, uint8_t dtype return &desc; } +#ifndef KEYBOARD_SHARED_EP /* keyboard endpoint state structure */ static USBInEndpointState kbd_ep_state; /* keyboard endpoint initialization structure (IN) */ @@ -110,8 +111,9 @@ static const USBEndpointConfig kbd_ep_config = { 2, /* IN multiplier */ NULL /* SETUP buffer (not a SETUP endpoint) */ }; +#endif -#ifdef MOUSE_ENABLE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) /* mouse endpoint state structure */ static USBInEndpointState mouse_ep_state; @@ -128,45 +130,26 @@ static const USBEndpointConfig mouse_ep_config = { 2, /* IN multiplier */ NULL /* SETUP buffer (not a SETUP endpoint) */ }; -#endif /* MOUSE_ENABLE */ - -#ifdef EXTRAKEY_ENABLE -/* extrakey endpoint state structure */ -static USBInEndpointState extra_ep_state; - -/* extrakey endpoint initialization structure (IN) */ -static const USBEndpointConfig extra_ep_config = { - USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ - NULL, /* SETUP packet notification callback */ - extra_in_cb, /* IN notification callback */ - NULL, /* OUT notification callback */ - EXTRAKEY_EPSIZE, /* IN maximum packet size */ - 0, /* OUT maximum packet size */ - &extra_ep_state, /* IN Endpoint state */ - NULL, /* OUT endpoint state */ - 2, /* IN multiplier */ - NULL /* SETUP buffer (not a SETUP endpoint) */ -}; -#endif /* EXTRAKEY_ENABLE */ +#endif -#ifdef NKRO_ENABLE -/* nkro endpoint state structure */ -static USBInEndpointState nkro_ep_state; +#ifdef SHARED_EP_ENABLE +/* shared endpoint state structure */ +static USBInEndpointState shared_ep_state; -/* nkro endpoint initialization structure (IN) */ -static const USBEndpointConfig nkro_ep_config = { +/* shared endpoint initialization structure (IN) */ +static const USBEndpointConfig shared_ep_config = { USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ NULL, /* SETUP packet notification callback */ - nkro_in_cb, /* IN notification callback */ + shared_in_cb, /* IN notification callback */ NULL, /* OUT notification callback */ - NKRO_EPSIZE, /* IN maximum packet size */ + SHARED_EPSIZE, /* IN maximum packet size */ 0, /* OUT maximum packet size */ - &nkro_ep_state, /* IN Endpoint state */ + &shared_ep_state, /* IN Endpoint state */ NULL, /* OUT endpoint state */ 2, /* IN multiplier */ NULL /* SETUP buffer (not a SETUP endpoint) */ }; -#endif /* NKRO_ENABLE */ +#endif typedef struct { size_t queue_capacity_in; @@ -309,16 +292,15 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) { case USB_EVENT_CONFIGURED: osalSysLockFromISR(); /* Enable the endpoints specified into the configuration. */ +#ifndef KEYBOARD_SHARED_EP usbInitEndpointI(usbp, KEYBOARD_IN_EPNUM, &kbd_ep_config); -#ifdef MOUSE_ENABLE +#endif +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) usbInitEndpointI(usbp, MOUSE_IN_EPNUM, &mouse_ep_config); -#endif /* MOUSE_ENABLE */ -#ifdef EXTRAKEY_ENABLE - usbInitEndpointI(usbp, EXTRAKEY_IN_EPNUM, &extra_ep_config); -#endif /* EXTRAKEY_ENABLE */ -#ifdef NKRO_ENABLE - usbInitEndpointI(usbp, NKRO_IN_EPNUM, &nkro_ep_config); -#endif /* NKRO_ENABLE */ +#endif +#ifdef SHARED_EP_ENABLE + usbInitEndpointI(usbp, SHARED_IN_EPNUM, &shared_ep_config); +#endif for (int i=0;isetup fields: * 0: bmRequestType (bitmask) @@ -409,42 +402,16 @@ static bool usb_request_hook_cb(USBDriver *usbp) { case HID_GET_REPORT: switch(usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */ case KEYBOARD_INTERFACE: -#ifdef NKRO_ENABLE - case NKRO_INTERFACE: -#endif /* NKRO_ENABLE */ usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL); return TRUE; break; -#ifdef MOUSE_ENABLE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) case MOUSE_INTERFACE: usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL); return TRUE; break; -#endif /* MOUSE_ENABLE */ - -#ifdef EXTRAKEY_ENABLE - case EXTRAKEY_INTERFACE: - if(usbp->setup[3] == 1) { /* MSB(wValue) [Report Type] == 1 [Input Report] */ - switch(usbp->setup[2]) { /* LSB(wValue) [Report ID] */ - case REPORT_ID_SYSTEM: - extra_report_blank[0] = REPORT_ID_SYSTEM; - usbSetupTransfer(usbp, (uint8_t *)extra_report_blank, sizeof(extra_report_blank), NULL); - return TRUE; - break; - case REPORT_ID_CONSUMER: - extra_report_blank[0] = REPORT_ID_CONSUMER; - usbSetupTransfer(usbp, (uint8_t *)extra_report_blank, sizeof(extra_report_blank), NULL); - return TRUE; - break; - default: - return FALSE; - } - } else { - return FALSE; - } - break; -#endif /* EXTRAKEY_ENABLE */ +#endif default: usbSetupTransfer(usbp, NULL, 0, NULL); @@ -472,12 +439,25 @@ static bool usb_request_hook_cb(USBDriver *usbp) { case HID_SET_REPORT: switch(usbp->setup[4]) { /* LSB(wIndex) (check MSB==0 and wLength==1?) */ case KEYBOARD_INTERFACE: -#ifdef NKRO_ENABLE - case NKRO_INTERFACE: -#endif /* NKRO_ENABLE */ +#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) + case SHARED_INTERFACE: +#endif /* keyboard_led_stats = * keyboard_led_stats needs be word (or dword), otherwise we get an exception on F0 */ - usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL); + has_report_id = 0; +#if defined(SHARED_EP_ENABLE) + if (usbp->setup[4] == SHARED_INTERFACE) { + has_report_id = 1; + } +#endif + if (usbp->setup[4] == KEYBOARD_INTERFACE && !keyboard_protocol) { + has_report_id = 0; + } + if (has_report_id) { + usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb); + } else { + usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL); + } return TRUE; break; } @@ -591,20 +571,13 @@ void init_usb_driver(USBDriver *usbp) { * --------------------------------------------------------- */ /* keyboard IN callback hander (a kbd report has made it IN) */ +#ifndef KEYBOARD_SHARED_EP void kbd_in_cb(USBDriver *usbp, usbep_t ep) { /* STUB */ (void)usbp; (void)ep; } - -#ifdef NKRO_ENABLE -/* nkro IN callback hander (a nkro report has made it IN) */ -void nkro_in_cb(USBDriver *usbp, usbep_t ep) { - /* STUB */ - (void)usbp; - (void)ep; -} -#endif /* NKRO_ENABLE */ +#endif /* start-of-frame handler * TODO: i guess it would be better to re-implement using timers, @@ -628,9 +601,9 @@ static void keyboard_idle_timer_cb(void *arg) { } #ifdef NKRO_ENABLE - if(!keymap_config.nkro && keyboard_idle) { + if(!keymap_config.nkro && keyboard_idle && keyboard_protocol) { #else /* NKRO_ENABLE */ - if(keyboard_idle) { + if(keyboard_idle && keyboard_protocol) { #endif /* NKRO_ENABLE */ /* TODO: are we sure we want the KBD_ENDPOINT? */ if(!usbGetTransmitStatusI(usbp, KEYBOARD_IN_EPNUM)) { @@ -661,25 +634,25 @@ void send_keyboard(report_keyboard_t *report) { osalSysUnlock(); #ifdef NKRO_ENABLE - if(keymap_config.nkro) { /* NKRO protocol */ + if(keymap_config.nkro && keyboard_protocol) { /* NKRO protocol */ /* need to wait until the previous packet has made it through */ /* can rewrite this using the synchronous API, then would wait * until *after* the packet has been transmitted. I think * this is more efficient */ /* busy wait, should be short and not very common */ osalSysLock(); - if(usbGetTransmitStatusI(&USB_DRIVER, NKRO_IN_EPNUM)) { + if(usbGetTransmitStatusI(&USB_DRIVER, SHARED_IN_EPNUM)) { /* Need to either suspend, or loop and call unlock/lock during * every iteration - otherwise the system will remain locked, * no interrupts served, so USB not going through as well. * Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */ - osalThreadSuspendS(&(&USB_DRIVER)->epc[NKRO_IN_EPNUM]->in_state->thread); + osalThreadSuspendS(&(&USB_DRIVER)->epc[SHARED_IN_EPNUM]->in_state->thread); } - usbStartTransmitI(&USB_DRIVER, NKRO_IN_EPNUM, (uint8_t *)report, sizeof(report_keyboard_t)); + usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)report, sizeof(struct nkro_report)); osalSysUnlock(); } else #endif /* NKRO_ENABLE */ - { /* boot protocol */ + { /* regular protocol */ /* need to wait until the previous packet has made it through */ /* busy wait, should be short and not very common */ osalSysLock(); @@ -690,7 +663,15 @@ void send_keyboard(report_keyboard_t *report) { * Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */ osalThreadSuspendS(&(&USB_DRIVER)->epc[KEYBOARD_IN_EPNUM]->in_state->thread); } - usbStartTransmitI(&USB_DRIVER, KEYBOARD_IN_EPNUM, (uint8_t *)report, KEYBOARD_EPSIZE); + uint8_t *data, size; + if (keyboard_protocol) { + data = (uint8_t*)report; + size = KEYBOARD_REPORT_SIZE; + } else { /* boot protocol */ + data = &report->mods; + size = 8; + } + usbStartTransmitI(&USB_DRIVER, KEYBOARD_IN_EPNUM, data, size); osalSysUnlock(); } keyboard_report_sent = *report; @@ -703,11 +684,13 @@ void send_keyboard(report_keyboard_t *report) { #ifdef MOUSE_ENABLE +#ifndef MOUSE_SHARED_EP /* mouse IN callback hander (a mouse report has made it IN) */ void mouse_in_cb(USBDriver *usbp, usbep_t ep) { (void)usbp; (void)ep; } +#endif void send_mouse(report_mouse_t *report) { osalSysLock(); @@ -737,19 +720,24 @@ void send_mouse(report_mouse_t *report) { #endif /* MOUSE_ENABLE */ /* --------------------------------------------------------- - * Extrakey functions + * Shared EP functions * --------------------------------------------------------- */ - -#ifdef EXTRAKEY_ENABLE - -/* extrakey IN callback hander */ -void extra_in_cb(USBDriver *usbp, usbep_t ep) { +#ifdef SHARED_EP_ENABLE +/* shared IN callback hander */ +void shared_in_cb(USBDriver *usbp, usbep_t ep) { /* STUB */ (void)usbp; (void)ep; } +#endif + +/* --------------------------------------------------------- + * Extrakey functions + * --------------------------------------------------------- + */ +#ifdef EXTRAKEY_ENABLE static void send_extra_report(uint8_t report_id, uint16_t data) { osalSysLock(); if(usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) { @@ -762,7 +750,7 @@ static void send_extra_report(uint8_t report_id, uint16_t data) { .usage = data }; - usbStartTransmitI(&USB_DRIVER, EXTRAKEY_IN_EPNUM, (uint8_t *)&report, sizeof(report_extra_t)); + usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)&report, sizeof(report_extra_t)); osalSysUnlock(); } diff --git a/tmk_core/protocol/chibios/usb_main.h b/tmk_core/protocol/chibios/usb_main.h index 1f7eb12f8d..55e8882cc4 100644 --- a/tmk_core/protocol/chibios/usb_main.h +++ b/tmk_core/protocol/chibios/usb_main.h @@ -65,6 +65,14 @@ void nkro_in_cb(USBDriver *usbp, usbep_t ep); void mouse_in_cb(USBDriver *usbp, usbep_t ep); #endif /* MOUSE_ENABLE */ +/* --------------- + * Shared EP header + * --------------- + */ + +/* shared IN request callback handler */ +void shared_in_cb(USBDriver *usbp, usbep_t ep); + /* --------------- * Extrakey header * --------------- @@ -72,9 +80,6 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep); #ifdef EXTRAKEY_ENABLE -/* extrakey IN request callback handler */ -void extra_in_cb(USBDriver *usbp, usbep_t ep); - /* extra report structure */ typedef struct { uint8_t report_id; diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 95e0b95b2f..e88e6f34aa 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -409,19 +409,21 @@ void EVENT_USB_Device_ConfigurationChanged(void) bool ConfigSuccess = true; /* Setup Keyboard HID Report Endpoints */ +#ifndef KEYBOARD_SHARED_EP ConfigSuccess &= ENDPOINT_CONFIG(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, KEYBOARD_EPSIZE, ENDPOINT_BANK_SINGLE); +#endif -#ifdef MOUSE_ENABLE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) /* Setup Mouse HID Report Endpoint */ ConfigSuccess &= ENDPOINT_CONFIG(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, MOUSE_EPSIZE, ENDPOINT_BANK_SINGLE); #endif -#ifdef EXTRAKEY_ENABLE - /* Setup Extra HID Report Endpoint */ - ConfigSuccess &= ENDPOINT_CONFIG(EXTRAKEY_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, - EXTRAKEY_EPSIZE, ENDPOINT_BANK_SINGLE); +#ifdef SHARED_EP_ENABLE + /* Setup Shared HID Report Endpoint */ + ConfigSuccess &= ENDPOINT_CONFIG(SHARED_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, + SHARED_EPSIZE, ENDPOINT_BANK_SINGLE); #endif #ifdef RAW_ENABLE @@ -442,12 +444,6 @@ void EVENT_USB_Device_ConfigurationChanged(void) #endif #endif -#ifdef NKRO_ENABLE - /* Setup NKRO HID Report Endpoints */ - ConfigSuccess &= ENDPOINT_CONFIG(NKRO_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, - NKRO_EPSIZE, ENDPOINT_BANK_SINGLE); -#endif - #ifdef MIDI_ENABLE ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); @@ -512,8 +508,8 @@ void EVENT_USB_Device_ControlRequest(void) // Interface switch (USB_ControlRequest.wIndex) { case KEYBOARD_INTERFACE: -#ifdef NKRO_ENABLE - case NKRO_INTERFACE: +#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP) + case SHARED_INTERFACE: #endif Endpoint_ClearSETUP(); @@ -521,7 +517,17 @@ void EVENT_USB_Device_ControlRequest(void) if (USB_DeviceState == DEVICE_STATE_Unattached) return; } +#if defined(SHARED_EP_ENABLE) + uint8_t report_id = REPORT_ID_KEYBOARD; + if (keyboard_protocol) { + report_id = Endpoint_Read_8(); + } + if (report_id == REPORT_ID_KEYBOARD || report_id == REPORT_ID_NKRO) { + keyboard_led_stats = Endpoint_Read_8(); + } +#else keyboard_led_stats = Endpoint_Read_8(); +#endif Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); @@ -612,16 +618,20 @@ static void send_keyboard(report_keyboard_t *report) #ifdef MODULE_ADAFRUIT_BLE adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys)); #elif MODULE_RN42 - bluefruit_serial_send(0xFD); - bluefruit_serial_send(0x09); - bluefruit_serial_send(0x01); - for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { - bluefruit_serial_send(report->raw[i]); - } + bluefruit_serial_send(0xFD); + bluefruit_serial_send(0x09); + bluefruit_serial_send(0x01); + bluefruit_serial_send(report->mods); + bluefruit_serial_send(report->reserved); + for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { + bluefruit_serial_send(report->keys[i]); + } #else bluefruit_serial_send(0xFD); - for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { - bluefruit_serial_send(report->raw[i]); + bluefruit_serial_send(report->mods); + bluefruit_serial_send(report->reserved); + for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { + bluefruit_serial_send(report->keys[i]); } #endif } @@ -632,30 +642,24 @@ static void send_keyboard(report_keyboard_t *report) } /* Select the Keyboard Report Endpoint */ + uint8_t ep = KEYBOARD_IN_EPNUM; + uint8_t size = KEYBOARD_REPORT_SIZE; #ifdef NKRO_ENABLE if (keyboard_protocol && keymap_config.nkro) { - /* Report protocol - NKRO */ - Endpoint_SelectEndpoint(NKRO_IN_EPNUM); - - /* Check if write ready for a polling interval around 1ms */ - while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4); - if (!Endpoint_IsReadWriteAllowed()) return; - - /* Write Keyboard Report Data */ - Endpoint_Write_Stream_LE(report, NKRO_EPSIZE, NULL); + ep = SHARED_IN_EPNUM; + size = sizeof(struct nkro_report); } - else #endif - { - /* Boot protocol */ - Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM); - - /* Check if write ready for a polling interval around 10ms */ - while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); - if (!Endpoint_IsReadWriteAllowed()) return; + Endpoint_SelectEndpoint(ep); + /* Check if write ready for a polling interval around 10ms */ + while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); + if (!Endpoint_IsReadWriteAllowed()) return; - /* Write Keyboard Report Data */ - Endpoint_Write_Stream_LE(report, KEYBOARD_EPSIZE, NULL); + /* If we're in Boot Protocol, don't send any report ID or other funky fields */ + if (!keyboard_protocol) { + Endpoint_Write_Stream_LE(&report->mods, 8, NULL); + } else { + Endpoint_Write_Stream_LE(report, size, NULL); } /* Finalize the stream transfer to send the last packet */ @@ -718,6 +722,7 @@ static void send_mouse(report_mouse_t *report) */ static void send_system(uint16_t data) { +#ifdef EXTRAKEY_ENABLE uint8_t timeout = 255; if (USB_DeviceState != DEVICE_STATE_Configured) @@ -727,7 +732,7 @@ static void send_system(uint16_t data) .report_id = REPORT_ID_SYSTEM, .usage = data - SYSTEM_POWER_DOWN + 1 }; - Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM); + Endpoint_SelectEndpoint(SHARED_IN_EPNUM); /* Check if write ready for a polling interval around 10ms */ while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); @@ -735,6 +740,7 @@ static void send_system(uint16_t data) Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL); Endpoint_ClearIN(); +#endif } /** \brief Send Consumer @@ -743,6 +749,7 @@ static void send_system(uint16_t data) */ static void send_consumer(uint16_t data) { +#ifdef EXTRAKEY_ENABLE uint8_t timeout = 255; uint8_t where = where_to_send(); @@ -786,7 +793,7 @@ static void send_consumer(uint16_t data) .report_id = REPORT_ID_CONSUMER, .usage = data }; - Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM); + Endpoint_SelectEndpoint(SHARED_IN_EPNUM); /* Check if write ready for a polling interval around 10ms */ while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40); @@ -794,6 +801,7 @@ static void send_consumer(uint16_t data) Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL); Endpoint_ClearIN(); +#endif } diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index cab3446752..589ad23cdd 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -47,11 +47,18 @@ /******************************************************************************* * HID Report Descriptors ******************************************************************************/ -const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = -{ +#ifdef KEYBOARD_SHARED_EP +const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { +#define SHARED_REPORT_STARTED +#else +const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = { +#endif HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ HID_RI_USAGE(8, 0x06), /* Keyboard */ HID_RI_COLLECTION(8, 0x01), /* Application */ +# ifdef KEYBOARD_SHARED_EP + HID_RI_REPORT_ID(8, REPORT_ID_KEYBOARD), +# endif HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ @@ -84,14 +91,25 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = HID_RI_REPORT_SIZE(8, 0x08), HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_RI_END_COLLECTION(0), + +#ifndef KEYBOARD_SHARED_EP }; +#endif -#ifdef MOUSE_ENABLE -const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = -{ +#if defined(MOUSE_ENABLE) + +# if !defined(MOUSE_SHARED_EP) +const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = { +# elif !defined(SHARED_REPORT_STARTED) +const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { +#define SHARED_REPORT_STARTED +# endif HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ HID_RI_USAGE(8, 0x02), /* Mouse */ HID_RI_COLLECTION(8, 0x01), /* Application */ +# ifdef MOUSE_SHARED_EP + HID_RI_REPORT_ID(8, REPORT_ID_MOUSE), +# endif HID_RI_USAGE(8, 0x01), /* Pointer */ HID_RI_COLLECTION(8, 0x00), /* Physical */ @@ -133,12 +151,15 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = HID_RI_END_COLLECTION(0), HID_RI_END_COLLECTION(0), +# ifndef MOUSE_SHARED_EP }; +# endif #endif -#ifdef EXTRAKEY_ENABLE -const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] = -{ +#if defined(SHARED_EP_ENABLE) && !defined(SHARED_REPORT_STARTED) +const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { +#endif +# ifdef EXTRAKEY_ENABLE HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ HID_RI_USAGE(8, 0x80), /* System Control */ HID_RI_COLLECTION(8, 0x01), /* Application */ @@ -164,6 +185,43 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] = HID_RI_REPORT_COUNT(8, 1), HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), HID_RI_END_COLLECTION(0), +# endif + +# ifdef NKRO_ENABLE + HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ + HID_RI_USAGE(8, 0x06), /* Keyboard */ + HID_RI_COLLECTION(8, 0x01), /* Application */ + HID_RI_REPORT_ID(8, REPORT_ID_NKRO), + HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ + HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ + HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(8, 0x01), + HID_RI_REPORT_COUNT(8, 0x08), + HID_RI_REPORT_SIZE(8, 0x01), + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + + HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ + HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ + HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ + HID_RI_REPORT_COUNT(8, 0x05), + HID_RI_REPORT_SIZE(8, 0x01), + HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), + HID_RI_REPORT_COUNT(8, 0x01), + HID_RI_REPORT_SIZE(8, 0x03), + HID_RI_OUTPUT(8, HID_IOF_CONSTANT), + + HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ + HID_RI_USAGE_MINIMUM(8, 0x00), /* Keyboard 0 */ + HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS*8-1), + HID_RI_LOGICAL_MINIMUM(8, 0x00), + HID_RI_LOGICAL_MAXIMUM(8, 0x01), + HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS*8), + HID_RI_REPORT_SIZE(8, 0x01), + HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), + HID_RI_END_COLLECTION(0), +# endif +#ifdef SHARED_EP_ENABLE }; #endif @@ -211,42 +269,6 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = }; #endif -#ifdef NKRO_ENABLE -const USB_Descriptor_HIDReport_Datatype_t PROGMEM NKROReport[] = -{ - HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ - HID_RI_USAGE(8, 0x06), /* Keyboard */ - HID_RI_COLLECTION(8, 0x01), /* Application */ - HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ - HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ - HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ - HID_RI_LOGICAL_MINIMUM(8, 0x00), - HID_RI_LOGICAL_MAXIMUM(8, 0x01), - HID_RI_REPORT_COUNT(8, 0x08), - HID_RI_REPORT_SIZE(8, 0x01), - HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - - HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ - HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ - HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ - HID_RI_REPORT_COUNT(8, 0x05), - HID_RI_REPORT_SIZE(8, 0x01), - HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), - HID_RI_REPORT_COUNT(8, 0x01), - HID_RI_REPORT_SIZE(8, 0x03), - HID_RI_OUTPUT(8, HID_IOF_CONSTANT), - - HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ - HID_RI_USAGE_MINIMUM(8, 0x00), /* Keyboard 0 */ - HID_RI_USAGE_MAXIMUM(8, (NKRO_EPSIZE-1)*8-1), /* Keyboard Right GUI */ - HID_RI_LOGICAL_MINIMUM(8, 0x00), - HID_RI_LOGICAL_MAXIMUM(8, 0x01), - HID_RI_REPORT_COUNT(8, (NKRO_EPSIZE-1)*8), - HID_RI_REPORT_SIZE(8, 0x01), - HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), - HID_RI_END_COLLECTION(0), -}; -#endif /******************************************************************************* * Device Descriptors @@ -303,6 +325,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = /* * Keyboard */ +#ifndef KEYBOARD_SHARED_EP .Keyboard_Interface = { .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, @@ -339,11 +362,12 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .EndpointSize = KEYBOARD_EPSIZE, .PollingIntervalMS = 0x0A }, +#endif /* * Mouse */ -#ifdef MOUSE_ENABLE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) .Mouse_Interface = { .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, @@ -383,26 +407,31 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = #endif /* - * Extra + * Shared */ -#ifdef EXTRAKEY_ENABLE - .Extrakey_Interface = +#ifdef SHARED_EP_ENABLE + .Shared_Interface = { .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, - .InterfaceNumber = EXTRAKEY_INTERFACE, + .InterfaceNumber = SHARED_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 1, .Class = HID_CSCP_HIDClass, +# ifdef KEYBOARD_SHARED_EP + .SubClass = HID_CSCP_BootSubclass, + .Protocol = HID_CSCP_KeyboardBootProtocol, +# else .SubClass = HID_CSCP_NonBootSubclass, .Protocol = HID_CSCP_NonBootProtocol, +#endif .InterfaceStrIndex = NO_DESCRIPTOR }, - .Extrakey_HID = + .Shared_HID = { .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, @@ -410,16 +439,16 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, - .HIDReportLength = sizeof(ExtrakeyReport) + .HIDReportLength = sizeof(SharedReport) }, - .Extrakey_INEndpoint = + .Shared_INEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - .EndpointAddress = (ENDPOINT_DIR_IN | EXTRAKEY_IN_EPNUM), + .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), - .EndpointSize = EXTRAKEY_EPSIZE, + .EndpointSize = SHARED_EPSIZE, .PollingIntervalMS = 0x0A }, #endif @@ -528,48 +557,6 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = }, #endif - /* - * NKRO - */ -#ifdef NKRO_ENABLE - .NKRO_Interface = - { - .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, - - .InterfaceNumber = NKRO_INTERFACE, - .AlternateSetting = 0x00, - - .TotalEndpoints = 1, - - .Class = HID_CSCP_HIDClass, - .SubClass = HID_CSCP_NonBootSubclass, - .Protocol = HID_CSCP_NonBootProtocol, - - .InterfaceStrIndex = NO_DESCRIPTOR - }, - - .NKRO_HID = - { - .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, - - .HIDSpec = VERSION_BCD(1,1,1), - .CountryCode = 0x00, - .TotalReportDescriptors = 1, - .HIDReportType = HID_DTYPE_Report, - .HIDReportLength = sizeof(NKROReport) - }, - - .NKRO_INEndpoint = - { - .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - - .EndpointAddress = (ENDPOINT_DIR_IN | NKRO_IN_EPNUM), - .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), - .EndpointSize = NKRO_EPSIZE, - .PollingIntervalMS = 0x01 - }, -#endif - #ifdef MIDI_ENABLE .Audio_Interface_Association = { @@ -936,19 +923,21 @@ uint16_t get_usb_descriptor(const uint16_t wValue, break; case HID_DTYPE_HID: switch (wIndex) { +#ifndef KEYBOARD_SHARED_EP case KEYBOARD_INTERFACE: Address = &ConfigurationDescriptor.Keyboard_HID; Size = sizeof(USB_HID_Descriptor_HID_t); break; -#ifdef MOUSE_ENABLE +#endif +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) case MOUSE_INTERFACE: Address = &ConfigurationDescriptor.Mouse_HID; Size = sizeof(USB_HID_Descriptor_HID_t); break; #endif -#ifdef EXTRAKEY_ENABLE - case EXTRAKEY_INTERFACE: - Address = &ConfigurationDescriptor.Extrakey_HID; +#ifdef SHARED_EP_ENABLE + case SHARED_INTERFACE: + Address = &ConfigurationDescriptor.Shared_HID; Size = sizeof(USB_HID_Descriptor_HID_t); break; #endif @@ -963,31 +952,27 @@ uint16_t get_usb_descriptor(const uint16_t wValue, Address = &ConfigurationDescriptor.Console_HID; Size = sizeof(USB_HID_Descriptor_HID_t); break; -#endif -#ifdef NKRO_ENABLE - case NKRO_INTERFACE: - Address = &ConfigurationDescriptor.NKRO_HID; - Size = sizeof(USB_HID_Descriptor_HID_t); - break; #endif } break; case HID_DTYPE_Report: switch (wIndex) { +#ifndef KEYBOARD_SHARED_EP case KEYBOARD_INTERFACE: Address = &KeyboardReport; Size = sizeof(KeyboardReport); break; -#ifdef MOUSE_ENABLE +#endif +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) case MOUSE_INTERFACE: Address = &MouseReport; Size = sizeof(MouseReport); break; #endif -#ifdef EXTRAKEY_ENABLE - case EXTRAKEY_INTERFACE: - Address = &ExtrakeyReport; - Size = sizeof(ExtrakeyReport); +#ifdef SHARED_EP_ENABLE + case SHARED_INTERFACE: + Address = &SharedReport; + Size = sizeof(SharedReport); break; #endif #ifdef RAW_ENABLE @@ -1001,12 +986,6 @@ uint16_t get_usb_descriptor(const uint16_t wValue, Address = &ConsoleReport; Size = sizeof(ConsoleReport); break; -#endif -#ifdef NKRO_ENABLE - case NKRO_INTERFACE: - Address = &NKROReport; - Size = sizeof(NKROReport); - break; #endif } break; diff --git a/tmk_core/protocol/usb_descriptor.h b/tmk_core/protocol/usb_descriptor.h index 586d07df62..3ca0c00b34 100644 --- a/tmk_core/protocol/usb_descriptor.h +++ b/tmk_core/protocol/usb_descriptor.h @@ -53,26 +53,27 @@ typedef struct { USB_Descriptor_Configuration_Header_t Config; +#ifndef KEYBOARD_SHARED_EP // Keyboard HID Interface USB_Descriptor_Interface_t Keyboard_Interface; USB_HID_Descriptor_HID_t Keyboard_HID; USB_Descriptor_Endpoint_t Keyboard_INEndpoint; +#endif -#ifdef MOUSE_ENABLE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) // Mouse HID Interface USB_Descriptor_Interface_t Mouse_Interface; USB_HID_Descriptor_HID_t Mouse_HID; USB_Descriptor_Endpoint_t Mouse_INEndpoint; #endif -#ifdef EXTRAKEY_ENABLE - // Extrakey HID Interface - USB_Descriptor_Interface_t Extrakey_Interface; - USB_HID_Descriptor_HID_t Extrakey_HID; - USB_Descriptor_Endpoint_t Extrakey_INEndpoint; +#if defined(SHARED_EP_ENABLE) + USB_Descriptor_Interface_t Shared_Interface; + USB_HID_Descriptor_HID_t Shared_HID; + USB_Descriptor_Endpoint_t Shared_INEndpoint; #endif -#ifdef RAW_ENABLE +#if defined(RAW_ENABLE) // Raw HID Interface USB_Descriptor_Interface_t Raw_Interface; USB_HID_Descriptor_HID_t Raw_HID; @@ -88,13 +89,6 @@ typedef struct USB_Descriptor_Endpoint_t Console_OUTEndpoint; #endif -#ifdef NKRO_ENABLE - // NKRO HID Interface - USB_Descriptor_Interface_t NKRO_Interface; - USB_HID_Descriptor_HID_t NKRO_HID; - USB_Descriptor_Endpoint_t NKRO_INEndpoint; -#endif - #ifdef MIDI_ENABLE USB_Descriptor_Interface_Association_t Audio_Interface_Association; // MIDI Audio Control Interface @@ -133,133 +127,105 @@ typedef struct /* index of interface */ -#define KEYBOARD_INTERFACE 0 - +enum usb_interfaces { +#if !defined(KEYBOARD_SHARED_EP) + KEYBOARD_INTERFACE, +#else +# define KEYBOARD_INTERFACE SHARED_INTERFACE +#endif // It is important that the Raw HID interface is at a constant // interface number, to support Linux/OSX platforms and chrome.hid // If Raw HID is enabled, let it be always 1. -#ifdef RAW_ENABLE -# define RAW_INTERFACE (KEYBOARD_INTERFACE + 1) -#else -# define RAW_INTERFACE KEYBOARD_INTERFACE +#if defined(RAW_ENABLE) + RAW_INTERFACE, #endif - -#ifdef MOUSE_ENABLE -# define MOUSE_INTERFACE (RAW_INTERFACE + 1) -#else -# define MOUSE_INTERFACE RAW_INTERFACE +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) + MOUSE_INTERFACE, #endif - -#ifdef EXTRAKEY_ENABLE -# define EXTRAKEY_INTERFACE (MOUSE_INTERFACE + 1) -#else -# define EXTRAKEY_INTERFACE MOUSE_INTERFACE +#if defined(SHARED_EP_ENABLE) + SHARED_INTERFACE, #endif - -#ifdef CONSOLE_ENABLE -# define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1) -#else -# define CONSOLE_INTERFACE EXTRAKEY_INTERFACE -#endif - -#ifdef NKRO_ENABLE -# define NKRO_INTERFACE (CONSOLE_INTERFACE + 1) -#else -# define NKRO_INTERFACE CONSOLE_INTERFACE +#if defined(CONSOLE_ENABLE) + CONSOLE_INTERFACE, #endif - -#ifdef MIDI_ENABLE -# define AC_INTERFACE (NKRO_INTERFACE + 1) -# define AS_INTERFACE (NKRO_INTERFACE + 2) -#else -# define AS_INTERFACE NKRO_INTERFACE +#if defined(MIDI_ENABLE) + AC_INTERFACE, + AS_INTERFACE, #endif - -#ifdef VIRTSER_ENABLE -# define CCI_INTERFACE (AS_INTERFACE + 1) -# define CDI_INTERFACE (AS_INTERFACE + 2) -#else -# define CDI_INTERFACE AS_INTERFACE +#if defined(VIRTSER_ENABLE) + CCI_INTERFACE, + CDI_INTERFACE, #endif + TOTAL_INTERFACES +}; -/* nubmer of interfaces */ -#define TOTAL_INTERFACES (CDI_INTERFACE + 1) - +#define NEXT_EPNUM __COUNTER__ -// Endopoint number and size -#define KEYBOARD_IN_EPNUM 1 - -#ifdef MOUSE_ENABLE -# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1) +enum usb_endpoints { + __unused_epnum__ = NEXT_EPNUM, /* EP numbering starts at 1 */ +#if !defined(KEYBOARD_SHARED_EP) + KEYBOARD_IN_EPNUM = NEXT_EPNUM, #else -# define MOUSE_IN_EPNUM KEYBOARD_IN_EPNUM +# define KEYBOARD_IN_EPNUM SHARED_IN_EPNUM #endif - -#ifdef EXTRAKEY_ENABLE -# define EXTRAKEY_IN_EPNUM (MOUSE_IN_EPNUM + 1) +#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) + MOUSE_IN_EPNUM = NEXT_EPNUM, #else -# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM +# define MOUSE_IN_EPNUM SHARED_IN_EPNUM #endif - -#ifdef RAW_ENABLE -# define RAW_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1) -# define RAW_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2) -#else -# define RAW_OUT_EPNUM EXTRAKEY_IN_EPNUM +#if defined(RAW_ENABLE) + RAW_IN_EPNUM = NEXT_EPNUM, + RAW_OUT_EPNUM = NEXT_EPNUM, #endif - -#ifdef CONSOLE_ENABLE -# define CONSOLE_IN_EPNUM (RAW_OUT_EPNUM + 1) +#if defined(SHARED_EP_ENABLE) + SHARED_IN_EPNUM = NEXT_EPNUM, +#endif +#if defined(CONSOLE_ENABLE) + CONSOLE_IN_EPNUM = NEXT_EPNUM, #ifdef PROTOCOL_CHIBIOS // ChibiOS has enough memory and descriptor to actually enable the endpoint // It could use the same endpoint numbers, as that's supported by ChibiOS // But the QMK code currently assumes that the endpoint numbers are different -# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 2) + CONSOLE_OUT_EPNUM = NEXT_EPNUM, #else -# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 1) +#define CONSOLE_OUT_EPNUM CONSOLE_IN_EPNUM #endif -#else -# define CONSOLE_OUT_EPNUM RAW_OUT_EPNUM #endif - -#ifdef NKRO_ENABLE -# define NKRO_IN_EPNUM (CONSOLE_OUT_EPNUM + 1) -#else -# define NKRO_IN_EPNUM CONSOLE_OUT_EPNUM -#endif - #ifdef MIDI_ENABLE -# define MIDI_STREAM_IN_EPNUM (NKRO_IN_EPNUM + 1) -// # define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 1) -# define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 2) + MIDI_STREAM_IN_EPNUM = NEXT_EPNUM, + MIDI_STREAM_OUT_EPNUM = NEXT_EPNUM, # define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM) # define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM) -#else -# define MIDI_STREAM_OUT_EPNUM NKRO_IN_EPNUM #endif - #ifdef VIRTSER_ENABLE -# define CDC_NOTIFICATION_EPNUM (MIDI_STREAM_OUT_EPNUM + 1) -# define CDC_IN_EPNUM (MIDI_STREAM_OUT_EPNUM + 2) -# define CDC_OUT_EPNUM (MIDI_STREAM_OUT_EPNUM + 3) + CDC_NOTIFICATION_EPNUM = NEXT_EPNUM, + CDC_IN_EPNUM = NEXT_EPNUM, + CDC_OUT_EPNUM = NEXT_EPNUM, # define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM) # define CDC_IN_EPADDR (ENDPOINT_DIR_IN | CDC_IN_EPNUM) # define CDC_OUT_EPADDR (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM) -#else -# define CDC_OUT_EPNUM MIDI_STREAM_OUT_EPNUM #endif +}; + +#if defined(PROTOCOL_LUFA) +/* LUFA tells us total endpoints including control */ +#define MAX_ENDPOINTS (ENDPOINT_TOTAL_ENDPOINTS - 1) +#elif defined(PROTOCOL_CHIBIOS) +/* ChibiOS gives us number of available user endpoints, not control */ +#define MAX_ENDPOINTS USB_MAX_ENDPOINTS +#endif +/* TODO - ARM_ATSAM */ + -#if (defined(PROTOCOL_LUFA) && CDC_OUT_EPNUM > (ENDPOINT_TOTAL_ENDPOINTS - 1)) || \ - (defined(PROTOCOL_CHIBIOS) && CDC_OUT_EPNUM > USB_MAX_ENDPOINTS) -# error "There are not enough available endpoints to support all functions. Remove some in the rules.mk file.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL, STENO)" +#if (NEXT_EPNUM - 1) > MAX_ENDPOINTS +# error There are not enough available endpoints to support all functions. Remove some in the rules.mk file. (MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL, STENO) #endif #define KEYBOARD_EPSIZE 8 +#define SHARED_EPSIZE 32 #define MOUSE_EPSIZE 8 -#define EXTRAKEY_EPSIZE 8 #define RAW_EPSIZE 32 #define CONSOLE_EPSIZE 32 -#define NKRO_EPSIZE 32 #define MIDI_STREAM_EPSIZE 64 #define CDC_NOTIFICATION_EPSIZE 8 #define CDC_EPSIZE 16 From 09813793bedd74c0bb109c6e87e3682bb864479a Mon Sep 17 00:00:00 2001 From: zvecr Date: Fri, 16 Nov 2018 15:37:15 +0000 Subject: [PATCH 0097/1763] Add configurator support for luddite (#4434) --- keyboards/40percentclub/luddite/info.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 keyboards/40percentclub/luddite/info.json diff --git a/keyboards/40percentclub/luddite/info.json b/keyboards/40percentclub/luddite/info.json new file mode 100644 index 0000000000..51d71ec772 --- /dev/null +++ b/keyboards/40percentclub/luddite/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "foobar", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT_60_ansi": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + } + } +} From b49f37dce97b1f84659146e7bbe4a55804407072 Mon Sep 17 00:00:00 2001 From: zvecr Date: Fri, 16 Nov 2018 16:35:04 +0000 Subject: [PATCH 0098/1763] Unify 68keys with mf68 (#4435) * Move 68keys keymap to mf68 folder * Remove 68keys keyboard now its been migrated to mf68 keymap * Migrate 68keys build config to mf68 keymap overrides --- .../mf68/keymaps/68keys/config.h | 15 ++++ .../mf68/keymaps/68keys/keymap.c | 11 +++ .../mf68/keymaps/68keys/readme.md} | 8 +- .../mf68/keymaps/68keys/rules.mk | 5 ++ keyboards/68keys/68keys.c | 6 -- keyboards/68keys/68keys.h | 20 ----- keyboards/68keys/config.h | 42 ---------- keyboards/68keys/info.json | 81 ------------------- keyboards/68keys/keymaps/default/keymap.c | 10 --- keyboards/68keys/rules.mk | 22 ----- 10 files changed, 35 insertions(+), 185 deletions(-) create mode 100644 keyboards/40percentclub/mf68/keymaps/68keys/config.h create mode 100644 keyboards/40percentclub/mf68/keymaps/68keys/keymap.c rename keyboards/{68keys/README.md => 40percentclub/mf68/keymaps/68keys/readme.md} (79%) create mode 100644 keyboards/40percentclub/mf68/keymaps/68keys/rules.mk delete mode 100644 keyboards/68keys/68keys.c delete mode 100644 keyboards/68keys/68keys.h delete mode 100644 keyboards/68keys/config.h delete mode 100644 keyboards/68keys/info.json delete mode 100644 keyboards/68keys/keymaps/default/keymap.c delete mode 100644 keyboards/68keys/rules.mk diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/config.h b/keyboards/40percentclub/mf68/keymaps/68keys/config.h new file mode 100644 index 0000000000..a0a576b7bf --- /dev/null +++ b/keyboards/40percentclub/mf68/keymaps/68keys/config.h @@ -0,0 +1,15 @@ +#pragma once + +/* USB Device descriptor parameter */ +#undef VENDOR_ID +#undef PRODUCT_ID +#undef DEVICE_VER +#undef MANUFACTURER +#undef PRODUCT +#undef DESCRIPTION +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0A0C +#define DEVICE_VER 0x0068 +#define MANUFACTURER 68Keys.io +#define PRODUCT The 68Keys.io Keyboard +#define DESCRIPTION A 68 keys mechanical keyboard diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c b/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c new file mode 100644 index 0000000000..3778ea21e7 --- /dev/null +++ b/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c @@ -0,0 +1,11 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_68_ansi( + 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_ESC, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + KC_CAPSLOCK, 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_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; diff --git a/keyboards/68keys/README.md b/keyboards/40percentclub/mf68/keymaps/68keys/readme.md similarity index 79% rename from keyboards/68keys/README.md rename to keyboards/40percentclub/mf68/keymaps/68keys/readme.md index 082a47a755..4b7cdf1259 100644 --- a/keyboards/68keys/README.md +++ b/keyboards/40percentclub/mf68/keymaps/68keys/readme.md @@ -2,22 +2,22 @@ Custom [68Keys.io](https://68keys.io) DIY keyboard. -Keyboard Maintainer: [sbstjn](https://sbstjn.com) -Hardware Supported: Pro Micro +Keymap Maintainer: [sbstjn](https://sbstjn.com) +Hardware Supported: mf68 Hardware Availability: [DIY Guide](https://68keys.io) Make example for this keyboard (after setting up your build environment): ```bash $ > cd qmk_firmware/ -$ > make 68keys:default +$ > make 40percentclub/mf68:68keys ``` Example of flashing this keyboard: ```bash $ > cd qmk_firmware/ -$ > make 68keys:default:avrdude +$ > make 40percentclub/mf68:68keys:avrdude ``` See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk b/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk new file mode 100644 index 0000000000..96ce13fe73 --- /dev/null +++ b/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk @@ -0,0 +1,5 @@ +BOOTLOADER = atmel-dfu + +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = no +BACKLIGHT_ENABLE = no diff --git a/keyboards/68keys/68keys.c b/keyboards/68keys/68keys.c deleted file mode 100644 index dcf04e6a3d..0000000000 --- a/keyboards/68keys/68keys.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "68keys.h" - -void matrix_init_kb(void) -{ - matrix_init_user(); -} diff --git a/keyboards/68keys/68keys.h b/keyboards/68keys/68keys.h deleted file mode 100644 index e8a2c4aeed..0000000000 --- a/keyboards/68keys/68keys.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "quantum.h" - -#define LAYOUT_68_ansi( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \ - K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \ - K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \ - K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, \ - K64, K65, K66, K67, K68, K70, K71, K72, K73, K74) \ - { \ - {K00, K01, K02, K03, K04, K05, K06, K07, K08}, \ - {K10, K11, K12, K13, K14, K15, K16, K17, K18}, \ - {K20, K21, K22, K23, K24, K25, K26, K27, K28}, \ - {K30, K31, K32, K33, K34, K35, K36, K37, K38}, \ - {K40, K41, K42, K43, K44, K45, K46, K47, K48}, \ - {K50, K51, K52, K53, K54, K55, K56, K57, K58}, \ - {K60, K61, K62, K63, K64, K65, K66, K67, K68}, \ - { \ - K70, K71, K72, K73, K74 \ - } \ - } diff --git a/keyboards/68keys/config.h b/keyboards/68keys/config.h deleted file mode 100644 index 07c87563d3..0000000000 --- a/keyboards/68keys/config.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x0A0C -#define DEVICE_VER 0x0068 -#define MANUFACTURER 68Keys.io -#define PRODUCT The 68Keys.io Keyboard -#define DESCRIPTION A 68 keys mechanical keyboard - -/* key matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 9 - -#define MATRIX_ROW_PINS \ - { \ - B6, B2, B3, B1, F7, F6, F5, F4 \ - } -#define MATRIX_COL_PINS \ - { \ - D3, D2, D1, D0, D4, C6, D7, E6, B4 \ - } -#define UNUSED_PINS - -#define DIODE_DIRECTION COL2ROW - -#define BACKLIGHT_PIN B5 -#define BACKLIGHT_BREATHING -#define BACKLIGHT_LEVELS 3 - -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -#define LOCKING_RESYNC_ENABLE - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) diff --git a/keyboards/68keys/info.json b/keyboards/68keys/info.json deleted file mode 100644 index b24e22b0a1..0000000000 --- a/keyboards/68keys/info.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "keyboard_name": "68Keys.io", - "url": "https://68keys.io", - "maintainer": "qmk", - "width": 17.25, - "height": 5, - "layouts": { - "LAYOUT_68_ansi": { - "layout": [ - { "label": "~", "x": 0, "y": 0 }, - { "label": "!", "x": 1, "y": 0 }, - { "label": "@", "x": 2, "y": 0 }, - { "label": "#", "x": 3, "y": 0 }, - { "label": "$", "x": 4, "y": 0 }, - { "label": "%", "x": 5, "y": 0 }, - { "label": "^", "x": 6, "y": 0 }, - { "label": "&", "x": 7, "y": 0 }, - { "label": "*", "x": 8, "y": 0 }, - { "label": "(", "x": 9, "y": 0 }, - { "label": ")", "x": 10, "y": 0 }, - { "label": "_", "x": 11, "y": 0 }, - { "label": "+", "x": 12, "y": 0 }, - { "label": "Backspace", "x": 13, "y": 0, "w": 2 }, - { "label": "ESC", "x": 15.25, "y": 0 }, - { "label": "PGUP", "x": 16.25, "y": 0 }, - { "label": "Tab", "x": 0, "y": 1, "w": 1.5 }, - { "label": "Q", "x": 1.5, "y": 1 }, - { "label": "W", "x": 2.5, "y": 1 }, - { "label": "E", "x": 3.5, "y": 1 }, - { "label": "R", "x": 4.5, "y": 1 }, - { "label": "T", "x": 5.5, "y": 1 }, - { "label": "Y", "x": 6.5, "y": 1 }, - { "label": "U", "x": 7.5, "y": 1 }, - { "label": "I", "x": 8.5, "y": 1 }, - { "label": "O", "x": 9.5, "y": 1 }, - { "label": "P", "x": 10.5, "y": 1 }, - { "label": "{", "x": 11.5, "y": 1 }, - { "label": "}", "x": 12.5, "y": 1 }, - { "label": "|", "x": 13.5, "y": 1, "w": 1.5 }, - { "label": "DEL", "x": 15.25, "y": 1 }, - { "label": "PGDN", "x": 16.25, "y": 1 }, - { "label": "Caps Lock", "x": 0, "y": 2, "w": 1.75 }, - { "label": "A", "x": 1.75, "y": 2 }, - { "label": "S", "x": 2.75, "y": 2 }, - { "label": "D", "x": 3.75, "y": 2 }, - { "label": "F", "x": 4.75, "y": 2 }, - { "label": "G", "x": 5.75, "y": 2 }, - { "label": "H", "x": 6.75, "y": 2 }, - { "label": "J", "x": 7.75, "y": 2 }, - { "label": "K", "x": 8.75, "y": 2 }, - { "label": "L", "x": 9.75, "y": 2 }, - { "label": ":", "x": 10.75, "y": 2 }, - { "label": "\"", "x": 11.75, "y": 2 }, - { "label": "Enter", "x": 12.75, "y": 2, "w": 2.25 }, - { "label": "Shift", "x": 0, "y": 3, "w": 2.25 }, - { "label": "Z", "x": 2.25, "y": 3 }, - { "label": "X", "x": 3.25, "y": 3 }, - { "label": "C", "x": 4.25, "y": 3 }, - { "label": "V", "x": 5.25, "y": 3 }, - { "label": "B", "x": 6.25, "y": 3 }, - { "label": "N", "x": 7.25, "y": 3 }, - { "label": "M", "x": 8.25, "y": 3 }, - { "label": "<", "x": 9.25, "y": 3 }, - { "label": ">", "x": 10.25, "y": 3 }, - { "label": "?", "x": 11.25, "y": 3 }, - { "label": "Shift", "x": 12.25, "y": 3, "w": 2.75 }, - { "x": 15.25, "y": 3 }, - { "label": "CTRL", "x": 0, "y": 4, "w": 1.25 }, - { "label": "ALT", "x": 1.25, "y": 4, "w": 1.25 }, - { "label": "GUI", "x": 2.5, "y": 4, "w": 1.25 }, - { "x": 3.75, "y": 4, "w": 6.25 }, - { "label": "GUI", "x": 10, "y": 4, "w": 1.25 }, - { "label": "ALT", "x": 11.25, "y": 4, "w": 1.25 }, - { "label": "CTRL", "x": 12.5, "y": 4, "w": 1.25 }, - { "x": 14.25, "y": 4 }, - { "x": 15.25, "y": 4 }, - { "x": 16.25, "y": 4 } - ] - } - } -} diff --git a/keyboards/68keys/keymaps/default/keymap.c b/keyboards/68keys/keymaps/default/keymap.c deleted file mode 100644 index 8f23d22462..0000000000 --- a/keyboards/68keys/keymaps/default/keymap.c +++ /dev/null @@ -1,10 +0,0 @@ -#include QMK_KEYBOARD_H -#include "68keys.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_68_ansi( - 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_ESC, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, - KC_CAPSLOCK, 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_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)}; diff --git a/keyboards/68keys/rules.mk b/keyboards/68keys/rules.mk deleted file mode 100644 index f1a56d496d..0000000000 --- a/keyboards/68keys/rules.mk +++ /dev/null @@ -1,22 +0,0 @@ -LAYOUTS = 68_ansi - -MCU = atmega32u4 -F_CPU = 16000000 -ARCH = AVR8 -F_USB = $(F_CPU) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT -BOOTLOADER = atmel-dfu - -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 -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -NKRO_ENABLE = no # USB Nkey Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default -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 - From defcfb4953d49a0fc72ecf49faeac0534aafc190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Fri, 16 Nov 2018 17:55:37 +0100 Subject: [PATCH 0099/1763] Update whitefox/konstantin keymap (#4436) * Add more spacing in keymaps * Enable link-time optimization * Disable deprecated TMK actions, change spacing in config.h * Remove unrelated rules.mk options --- .../whitefox/keymaps/konstantin/config.h | 19 +++++++----- .../whitefox/keymaps/konstantin/keymap.c | 30 +++++++++---------- .../whitefox/keymaps/konstantin/rules.mk | 6 ++-- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h index d1c3002d27..ee30dbece1 100644 --- a/keyboards/whitefox/keymaps/konstantin/config.h +++ b/keyboards/whitefox/keymaps/konstantin/config.h @@ -5,15 +5,18 @@ #undef IS_COMMAND #define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL))) -#define MAGIC_KEY_LAYER0_ALT1 BSLS -#define MAGIC_KEY_BOOTLOADER ESC +#define MAGIC_KEY_LAYER0_ALT1 BSLS +#define MAGIC_KEY_BOOTLOADER ESC -#define MOUSEKEY_DELAY 50 -#define MOUSEKEY_INTERVAL 15 -#define MOUSEKEY_MAX_SPEED 4 -#define MOUSEKEY_TIME_TO_MAX 50 -#define MOUSEKEY_WHEEL_MAX_SPEED 1 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 +#define MOUSEKEY_DELAY 50 +#define MOUSEKEY_INTERVAL 15 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 50 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 50 + +#define NO_ACTION_FUNCTION +#define NO_ACTION_MACRO #define PERMISSIVE_HOLD #define TAPPING_TERM 200 diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c index 6732d9a01e..55db5ca6b8 100644 --- a/keyboards/whitefox/keymaps/konstantin/keymap.c +++ b/keyboards/whitefox/keymaps/konstantin/keymap.c @@ -151,11 +151,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_BASE] = LAYOUT_truefox( \ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_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_DEL, \ - FN_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGUP, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,RCT_RSF, KC_UP, KC_PGDN, \ - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, RAL_RGU,FN_FNLK, KC_LEFT,KC_DOWN,KC_RGHT \ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_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_DEL, \ + FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RCT_RSF, KC_UP, KC_PGDN, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT \ ), /* Function layer @@ -172,11 +172,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_FN] = LAYOUT_truefox( \ - _______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK,KC_PAUS, \ - KC_BTN4,KC_BTN2,KC_MS_U,KC_BTN1,KC_BTN3,KC_BTN5,_______,_______,_______,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \ - _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,_______,_______,_______,_______,_______,_______, _______, TOP, \ - _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_APP, KC_PGUP,BOTTOM, \ - _______,DESKTOP,DSKTP_L, KC_WH_D, DSKTP_R,_______, KC_HOME,KC_PGDN,KC_END \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK, KC_PAUS, \ + KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS, \ + _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, TOP, \ + _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP, KC_PGUP, BOTTOM, \ + _______, DESKTOP, DSKTP_L, KC_WH_D, DSKTP_R, _______, KC_HOME, KC_PGDN, KC_END \ ), /* Numpad layer @@ -193,10 +193,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ */ [L_NUMPAD] = LAYOUT_truefox( \ - NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,MINUS, EQUALS, NUMPAD, _______,_______, \ - _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,L_PAREN,R_PAREN,_______, _______, \ - _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,TIMES, KC_PENT, _______, \ - _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, COMMA, KC_PDOT,KC_PSLS,DIVIDE, _______,_______, \ - _______,_______,_______, _______, _______,_______, _______,_______,_______ \ + NUMPAD, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______, \ + _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ), }; diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk index 8fbc1f3af4..96722d1d5b 100644 --- a/keyboards/whitefox/keymaps/konstantin/rules.mk +++ b/keyboards/whitefox/keymaps/konstantin/rules.mk @@ -1,15 +1,13 @@ -AUDIO_ENABLE = no BACKLIGHT_ENABLE = no -BLUETOOTH_ENABLE = no BOOTMAGIC_ENABLE = no COMMAND_ENABLE = yes CONSOLE_ENABLE = yes EXTRAKEY_ENABLE = yes -MIDI_ENABLE = no MOUSEKEY_ENABLE = yes NKRO_ENABLE = yes -RGBLIGHT_ENABLE = no SLEEP_LED_ENABLE = no TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes VISUALIZER_ENABLE = no + +EXTRAFLAGS += -flto From 774bee642685b6349e00603a9fd8a94432a7e893 Mon Sep 17 00:00:00 2001 From: Elliot Powell <32494740+e11i0t23@users.noreply.github.com> Date: Fri, 16 Nov 2018 19:31:44 +0000 Subject: [PATCH 0100/1763] Moved ep40 to ep/40 for easier adding of next ep keyboard (#4439) * add initial ep40 files * fixed issues * updated keymap * Added media control * Update keyboards/handwired/ep40/rules.mk Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> * Fixed requested changes * Fixed more requested changes * Added delete key to layor 1 * Updated defualt keympap to have a Backspace mod del key * removed place holder Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> * removed obsolete code Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com> * Moved ep40 to ep/40 * Fixed file names for moved code * Fixed readme --- keyboards/{handwired/ep40/ep40.c => ep/40/40.c} | 2 +- keyboards/{handwired/ep40/ep40.h => ep/40/40.h} | 0 keyboards/{handwired/ep40 => ep/40}/config.h | 0 keyboards/{handwired/ep40 => ep/40}/info.json | 0 keyboards/{handwired/ep40 => ep/40}/keymaps/default/keymap.c | 0 keyboards/{handwired/ep40 => ep/40}/keymaps/default/readme.md | 0 keyboards/{handwired/ep40 => ep/40}/readme.md | 4 ++-- keyboards/{handwired/ep40 => ep/40}/rules.mk | 0 8 files changed, 3 insertions(+), 3 deletions(-) rename keyboards/{handwired/ep40/ep40.c => ep/40/40.c} (98%) rename keyboards/{handwired/ep40/ep40.h => ep/40/40.h} (100%) rename keyboards/{handwired/ep40 => ep/40}/config.h (100%) rename keyboards/{handwired/ep40 => ep/40}/info.json (100%) rename keyboards/{handwired/ep40 => ep/40}/keymaps/default/keymap.c (100%) rename keyboards/{handwired/ep40 => ep/40}/keymaps/default/readme.md (100%) rename keyboards/{handwired/ep40 => ep/40}/readme.md (77%) rename keyboards/{handwired/ep40 => ep/40}/rules.mk (100%) diff --git a/keyboards/handwired/ep40/ep40.c b/keyboards/ep/40/40.c similarity index 98% rename from keyboards/handwired/ep40/ep40.c rename to keyboards/ep/40/40.c index 257f9fa807..7c235f3ce5 100644 --- a/keyboards/handwired/ep40/ep40.c +++ b/keyboards/ep/40/40.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "ep40.h" +#include "40.h" void matrix_init_kb(void) { // put your keyboard start-up code here diff --git a/keyboards/handwired/ep40/ep40.h b/keyboards/ep/40/40.h similarity index 100% rename from keyboards/handwired/ep40/ep40.h rename to keyboards/ep/40/40.h diff --git a/keyboards/handwired/ep40/config.h b/keyboards/ep/40/config.h similarity index 100% rename from keyboards/handwired/ep40/config.h rename to keyboards/ep/40/config.h diff --git a/keyboards/handwired/ep40/info.json b/keyboards/ep/40/info.json similarity index 100% rename from keyboards/handwired/ep40/info.json rename to keyboards/ep/40/info.json diff --git a/keyboards/handwired/ep40/keymaps/default/keymap.c b/keyboards/ep/40/keymaps/default/keymap.c similarity index 100% rename from keyboards/handwired/ep40/keymaps/default/keymap.c rename to keyboards/ep/40/keymaps/default/keymap.c diff --git a/keyboards/handwired/ep40/keymaps/default/readme.md b/keyboards/ep/40/keymaps/default/readme.md similarity index 100% rename from keyboards/handwired/ep40/keymaps/default/readme.md rename to keyboards/ep/40/keymaps/default/readme.md diff --git a/keyboards/handwired/ep40/readme.md b/keyboards/ep/40/readme.md similarity index 77% rename from keyboards/handwired/ep40/readme.md rename to keyboards/ep/40/readme.md index 5acd8892dd..647842bade 100644 --- a/keyboards/handwired/ep40/readme.md +++ b/keyboards/ep/40/readme.md @@ -4,12 +4,12 @@ A simple 40% keyboard -Keyboard Maintainer: [Elliot Powell](https://reddit.com/u/e11i0t23, https://github.com/e11i0t23) +Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23 on reddit](https://reddit.com/u/e11i0t23) Hardware Supported: EP40 PCB Hardware Availability: None at the moment Make example for this keyboard (after setting up your build environment): - make ep40:default + make ep/40:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/handwired/ep40/rules.mk b/keyboards/ep/40/rules.mk similarity index 100% rename from keyboards/handwired/ep40/rules.mk rename to keyboards/ep/40/rules.mk From d9453a93f34a71f5dd5bf8cd2ef75fe21a2dcc7b Mon Sep 17 00:00:00 2001 From: Boy_314 <32818287+Boy-314@users.noreply.github.com> Date: Fri, 16 Nov 2018 17:47:06 -0500 Subject: [PATCH 0101/1763] Updating Boy_314's XD75 Layout (#4440) * fixed arrow keys and left control * added right shift * latest version * reverted arrow keys * edited readme * added osu layer * updated osu layout * updated osu layout * added full arrow keys to osu layout * in case i mess up creating macros * added the best meme key in the world * added plover steno layer * updated boy314 layout * removed unused layers * added boy314 xd75 layout, inspired by preonic layout * added boy314 xd75 layout, inspired by preonic layout * version 2 of boy314's xd75 layout * added readme notes * updated readme for boy314 xd75 layout * qwerty support, brackets on bottom row, caps lock underglow * fixed readme/ * small changes to allow merging * minor changes to format * fixed up default readme * added numpad and tweaked bottom row --- keyboards/xd75/keymaps/boy_314/keymap.c | 73 ++++++++++++++----------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/keyboards/xd75/keymaps/boy_314/keymap.c b/keyboards/xd75/keymaps/boy_314/keymap.c index 8658fde6e4..d807d1d861 100644 --- a/keyboards/xd75/keymaps/boy_314/keymap.c +++ b/keyboards/xd75/keymaps/boy_314/keymap.c @@ -3,9 +3,9 @@ // Layer shorthand #define _DV 0 #define _QW 1 -#define _FN1 2 -#define _FN2 3 -#define _NP 4 +#define _NP 2 +#define _FN1 3 +#define _FN2 4 #define RGBLIGHT_LIGHT_VAL 255 const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {10, 10, 10}; @@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------| * | LSHIFT | ; | Q | J | K | X | END | UP | PG DN | M | W | W | V | Z | RSHIFT | * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | [ | ] | { | } | + * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | LEFT | DOWN | UP | RIGHT | * '--------------------------------------------------------------------------------------------------------------------------------------' */ @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LBRC, KC_BSLS, KC_RBRC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH }, { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_HOME, KC_DEL, KC_PGUP, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT }, { KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_END, KC_UP, KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC }, - { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR }, + { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT }, }, /* QWERTY @@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------| * | LSHIFT | Z | X | C | V | B | END | UP | PG DN | N | M | , | . | / | RSHIFT | * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------| - * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | [ | ] | { | } | + * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | LEFT | DOWN | UP | RIGHT | * '--------------------------------------------------------------------------------------------------------------------------------------' */ @@ -54,9 +54,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT }, { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, { KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_UP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC }, - { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR }, + { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT }, }, +/* NUMPAD + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | / | * | - | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | 7 | 8 | 9 | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | 4 | 5 | 6 | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | 1 | 2 | 3 | | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | + | 0 | . | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_NP] = { /* NUMPAD */ + { _______, _______, _______, _______, _______, _______, KC_SLSH, KC_ASTR, KC_MINS, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, KC_PLUS, KC_0, KC_DOT, _______, _______, _______, _______, _______, _______ }, + }, + /* FUNCTION1 * .--------------------------------------------------------------------------------------------------------------------------------------. * | ` | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | BACKSP | @@ -84,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * .--------------------------------------------------------------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | BACKSP | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | ` | | | UP | | | RESET |RGB HUE-|RGB HUE+| | | | | | | + * | ` | | | UP | | | RESET |RGB HUE-|RGB HUE+| NUMPAD | | | | | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | DEL | | LEFT | DOWN | RIGHT | | |RGB SAT-|RGB SAT+| DVORAK | - | = | [ | ] | \ | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| @@ -96,32 +118,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN2] = { /* FUNCTION2 */ { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC }, - { KC_GRV, _______, _______, KC_UP, _______, _______, RESET, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, KC_DEL }, - { KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_SAI, TO(_DV), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, - { _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, TO(_QW), _______, _______, KC_PGDN, KC_PGUP, _______ }, + { KC_GRV, _______, _______, KC_UP, _______, _______, RESET, RGB_HUD, RGB_HUI, TG(_NP), _______, _______, _______, _______, KC_DEL }, + { KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_SAI, TG(_DV), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, + { _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, TG(_QW), _______, _______, KC_PGDN, KC_PGUP, _______ }, { _______, _______, _______, _______, _______, _______, _______,RGB_RMOD, RGB_MOD, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY }, - }, - -/* NUMPAD - * .--------------------------------------------------------------------------------------------------------------------------------------. - * | | | | | | / | * | - | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | 7 | 8 | 9 | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | 4 | 5 | 6 | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | 1 | 2 | 3 | | | | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | 0 | 0 | . | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_NP] = { /* NUMPAD */ - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, } }; @@ -149,6 +149,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; +void matrix_init_user(void) { + if (!(host_keyboard_leds() & (1< Date: Sun, 18 Nov 2018 16:52:14 +0100 Subject: [PATCH 0102/1763] Update to my keymaps and userspace (#4447) * fix to prime o keymap * changed ortho keymaps * added some symbols to lower layer * set lower to be a higher layer than raise * added split layout option with center numpad to prime_o keymap * added some gaming functionality * added alt f4 ortho keymaps and userspace * fixed small error --- .../niu_mini/keymaps/spacebarracecar/keymap.c | 27 +- .../planck/keymaps/spacebarracecar/keymap.c | 25 +- .../prime_o/keymaps/spacebarracecar/keymap.c | 346 ++++++++++++------ .../prime_o/keymaps/spacebarracecar/readme.md | 2 +- users/spacebarracecar/spacebarracecar.h | 2 + 5 files changed, 280 insertions(+), 122 deletions(-) diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c index c3f6fb09a1..9bee87f38f 100644 --- a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c +++ b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c @@ -6,8 +6,8 @@ enum layers { _BASE, - _LOWER, - _RAISE + _RAISE, + _LOWER }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = LAYOUT_ortho_4x12( DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, - _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = LAYOUT_ortho_4x12( CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -89,21 +89,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Navigation ,-----------------------------------------------------------------------------------------------------------------------. -|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|RESET | | | | | | | | | | |Game | +|RESET |ESCT | | | | | | | | | |Game | `-----------------------------------------------------------------------------------------------------------------------' */ [_NAV] = LAYOUT_ortho_4x12( - CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, RGB_M_P, KC_ENT, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, RGB_TOG, RGB_MOD, RGB_HUI, CU_RGBV, _______, - RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME + RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME ) }; @@ -121,6 +121,17 @@ switch (keycode) { } else { return true; } + case KC_LALT: + if (game) { + if (record->event.pressed){ + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + } else { + return true; + } default: return true; } diff --git a/keyboards/planck/keymaps/spacebarracecar/keymap.c b/keyboards/planck/keymaps/spacebarracecar/keymap.c index db91231bf7..b1c0e3148a 100644 --- a/keyboards/planck/keymaps/spacebarracecar/keymap.c +++ b/keyboards/planck/keymaps/spacebarracecar/keymap.c @@ -6,8 +6,8 @@ enum layers { _BASE, - _LOWER, _RAISE, + _LOWER, _MUSICMODE }; @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = LAYOUT_ortho_4x12( DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, - _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = LAYOUT_ortho_4x12( CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), @@ -97,21 +97,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Navigation ,-----------------------------------------------------------------------------------------------------------------------. -|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|RESET | | | | | | | | | | |Game | +|RESET |ESCT | | | | | | | | | |Game | `-----------------------------------------------------------------------------------------------------------------------' */ [_NAV] = LAYOUT_ortho_4x12( - CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, MU_ON, XXXXXXX, XXXXXXX, XXXXXXX, _______, - RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME + RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME ) }; @@ -129,6 +129,17 @@ switch (keycode) { } else { return true; } + case KC_LALT: + if (game) { + if (record->event.pressed){ + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + } else { + return true; + } case MU_ON: if(record->event.pressed) { layer_off(_LOWER); diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c index d38ff0d1d6..6e2011770f 100644 --- a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c @@ -8,122 +8,244 @@ enum layers { _BASE, - _LOWER, _RAISE, + _LOWER, _GAME = _NAV+1 }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -#ifndef LEFTNUM +#ifdef LEFTNUM + /* Base ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ |Numlock |/ |* |= | +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|7 |8 |9 |- | +|+ |7 |8 |9 |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 |Esc/Nav |A |S |D |F |G |H |J |K |L |; |' | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |4 |5 |6 |+ | +|Enter |1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_BASE] = LAYOUT( + KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, + KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, + CU_EQL, KC_P4, KC_P5, KC_P6, CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, + KC_PENT, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, + KC_BSPC, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL +), + +/* Lower +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Enter | +|+ |7 |8 |9 |~ |! |" |# |$ |% |^ |& |* |( |) | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Tab | +|Enter |1 |2 |3 | |? | | | | | | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | | | | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, + _______, _______, _______, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, + _______, _______, _______, _______, _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Raise +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | | | | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, + _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, + _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), + +/* Deadkey +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock | | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 | | | | | | | |Ü | |Ö | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |Ä |ß | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | | | | | | | | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 | | | | | |" |" | | | | | | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_DEADKEY] = LAYOUT( + _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, + _______, _______, _______, _______, KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, + _______, _______, _______, _______, _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, + _______, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______ +), + +/* Navigation +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|- |* |/ |Numlock |Escape | | | | | | | | | | | | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|+ |7 |8 |9 |ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|= |4 |5 |6 | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Enter |1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | +|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Backspace|. |0 |00 |RESET |ESCT | | | | | | | | | |Game | +`---------------------------------------------------------------------------------------------------------------------------------------------------------------' +*/ + +[_NAV] = LAYOUT( + _______, _______, _______, _______, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, + _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, _______, _______, _______, RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME +), + +// Can be used to place macros on the numpad +[_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) + +#elif defined CENTERNUM + +/* Base +,---------------------------------------------------------------------------------------------------------------------------------------------------------------. +|` |1 |2 |3 |4 |5 |Numlock |/ |* |= |6 |7 |8 |9 |0 |\ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Tab |Q |W |E |R |T |7 |8 |9 |- |Z |U |I |O |P |Backspace| +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|Esc/Nav |A |S |D |F |G |4 |5 |6 |+ |H |J |K |L |; |' | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|(/LShift |Y |X |C |V |B |1 |2 |3 |Enter |N |M |, |. |/ |)/RShift | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|RCtrl | |Alt |Win |Lower |Space |00 |0 |. |Tab |Enter |Raise |Win |AltGr | |LCtrl | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_BASE] = LAYOUT( - CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS, - CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, KC_P4, KC_P5, KC_P6, KC_PEQL, - CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_TAB + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, + KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_P7, KC_P8, KC_P9, KC_PPLS, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, + CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, KC_P4, KC_P5, KC_P6, CU_EQL, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, + CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, KC_P1, KC_P2, KC_P3, KC_PENT, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P00, KC_P0, KC_PDOT, KC_TAB, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL ), /* Lower ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | +|` |1 |2 |3 |4 |5 |Numlock |/ |* |- |6 |7 |8 |9 |0 | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|~ |! |" |# |$ |% |^ |& |* |( |) | |7 |8 |9 |+ | +|~ |! |" |# |$ |% |7 |8 |9 |+ |^ |& |* |( |) | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |4 |5 |6 |= | +| |@ |Strg+X |Strg+C |Strg+V | |4 |5 |6 |= | |_ |+ |{ |} || | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |? | | | | | | | | | | |1 |2 |3 |Enter | +| |? | | | | |1 |2 |3 |Enter | | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | | | | | | |00 |0 |. |Tab | +| | | | | | |00 |0 |. |Tab | | | | | | | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_LOWER] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, _______, _______, _______, - _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, _______, _______, _______, _______, - _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, + DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, _______, _______, _______, _______, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, + _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, _______, _______, _______, _______, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Raise ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | +|` |1 |2 |3 |4 |5 |Numlock |/ |* |- |6 |7 |8 |9 |0 | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |7 |8 |9 |+ | +|` |1 |2 |3 |4 |5 |7 |8 |9 |+ |6 |7 |8 |9 |0 | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |4 |5 |6 |= | +| |F1 |F2 |F3 |F4 |F5 |4 |5 |6 |= |F6 |- |= |[ |] |\ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Enter | +| |F7 |F8 |F9 |F10 |F11 |1 |2 |3 |Enter |F12 | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | | | | | | |00 |0 |. |Tab | +| | | | | | |00 |0 |. |Tab | | | | | | | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_RAISE] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, _______, _______, _______, - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, _______, _______, _______, _______, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, _______, _______, _______, _______, CU_6, CU_7, CU_8, CU_9, CU_0, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, KC_F12, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Deadkey ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -| | | | | | | | | | | | |Numlock |/ |* |- | +| | | | | | |Numlock |/ |* |- | | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | |Ü | |Ö | | |7 |8 |9 |+ | +| | | | | | |7 |8 |9 |+ | |Ü | |Ö | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |Ä |ß | | | | | | | | | |4 |5 |6 |= | +| |Ä |ß | | | |4 |5 |6 |= | | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | | | | | | | | |1 |2 |3 |Enter | +| | | | | | |1 |2 |3 |Enter | | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| | | | | |" |" | | | | | |00 |0 |. |Tab | +| | | | | |" |00 |0 |. |Tab |" | | | | | | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_DEADKEY] = LAYOUT( - CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, - KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, _______, _______, _______, _______, - _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, _______, _______, _______, _______, - _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______, _______, _______, _______, _______ + CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, + KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, + _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, + _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, + _______, _______, _______, _______, _______, CU_DDQ, _______, _______, _______, _______, CU_DDQ, _______, _______, _______, _______, _______ ), /* Navigation ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|Escape | | | | | | | | | | | |Numlock |/ |* |- | +|Escape | | | | | |Numlock |/ |* |- | | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |7 |8 |9 |+ | +|ALT F4 |PageDown |Up |PageUp |Home | |7 |8 |9 |+ | | |Win+Up | | |Del | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |4 |5 |6 |= | +| |Left |Down |Right |End | |4 |5 |6 |= | |Win+Left |Win+Down |Win+Right| |Enter | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Enter | +| |Prev |Pause |Next |LowerVol |RaiseVol |1 |2 |3 |Enter |Mute | | | | | | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|RESET | | | | | | | | | | |Game |00 |0 |. |Tab | +|RESET |ESCT | | | | |00 |0 |. |Tab | | | | | |Game | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_NAV] = LAYOUT( - KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, - CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, _______, _______, _______, - _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, - RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______ + KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, _______, _______, _______, _______, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, + _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, _______, _______, _______, _______, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + RESET, CU_ESCT, _______, _______, _______, KC_SPC, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, CU_GAME ), // Can be used to place macros on the numpad @@ -134,117 +256,117 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) -#endif -#ifdef LEFTNUM +#else + /* Base ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ | +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ |Numlock |/ |* |= | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|+ |7 |8 |9 |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace| -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|= |4 |5 |6 |Esc/Nav |A |S |D |F |G |H |J |K |L |; |' | +|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|7 |8 |9 |- | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Enter |1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Backspace|. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl | +|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |4 |5 |6 |+ | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Tab | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_BASE] = LAYOUT( - KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, - KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, - KC_PEQL, KC_P4, KC_P5, KC_P6, CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, - KC_PENT, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, - KC_BSPC, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS, + CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, KC_P4, KC_P5, KC_P6, CU_EQL, + CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_TAB ), /* Lower ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|+ |7 |8 |9 |~ |! |" |# |$ |% |^ |& |* |( |) | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|= |4 |5 |6 | |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || | +|~ |! |" |# |$ |% |^ |& |* |( |) | |7 |8 |9 |+ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Enter |1 |2 |3 | |? | | | | | | | | | | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Backspace|. |0 |00 | | | | | | | | | | | | | +| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |? | | | | | | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |00 |0 |. |Tab | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_LOWER] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, - _______, _______, _______, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, - _______, _______, _______, _______, _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, _______, _______, _______, + _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, _______, _______, _______, _______, + _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Raise ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|+ |7 |8 |9 |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|= |4 |5 |6 | |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ | +|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |7 |8 |9 |+ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Enter |1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Backspace|. |0 |00 | | | | | | | | | | | | | +| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |00 |0 |. |Tab | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_RAISE] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, - _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, - _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, _______, _______, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Deadkey ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|- |* |/ |Numlock | | | | | | | | | | | | | +| | | | | | | | | | | | |Numlock |/ |* |- | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|+ |7 |8 |9 | | | | | | | |Ü | |Ö | | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|= |4 |5 |6 | |Ä |ß | | | | | | | | | | +| | | | | | | |Ü | |Ö | | |7 |8 |9 |+ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Enter |1 |2 |3 | | | | | | | | | | | | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Backspace|. |0 |00 | | | | | |" |" | | | | | | +| |Ä |ß | | | | | | | | | |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | | | | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| | | | | |" |" | | | | | |00 |0 |. |Tab | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_DEADKEY] = LAYOUT( - _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, - _______, _______, _______, _______, KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, - _______, _______, _______, _______, _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, - _______, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______ + CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, + KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, _______, _______, _______, _______, + _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, _______, _______, _______, _______, + _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* Navigation ,---------------------------------------------------------------------------------------------------------------------------------------------------------------. -|- |* |/ |Numlock |Escape | | | | | | | | | | | | +|Escape | | | | | | | | | | | |Numlock |/ |* |- | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|+ |7 |8 |9 |ESCT |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|= |4 |5 |6 | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter | +|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |7 |8 |9 |+ | |---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Enter |1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | | -|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| -|Backspace|. |0 |00 |RESET | | | | | | | | | | |Game | +| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |4 |5 |6 |= | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Enter | +|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------| +|RESET |ESCT | | | | | | | | | |Game |00 |0 |. |Tab | `---------------------------------------------------------------------------------------------------------------------------------------------------------------' */ [_NAV] = LAYOUT( - _______, _______, _______, _______, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - _______, _______, _______, _______, CU_ESCT, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, - _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, - _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, - _______, _______, _______, _______, RESET, _______, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME + KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, _______, _______, _______, + _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, + RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______ ), // Can be used to place macros on the numpad @@ -255,6 +377,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ) + #endif }; @@ -272,6 +395,17 @@ switch (keycode) { } else { return true; } + case KC_LALT: + if (game) { + if (record->event.pressed){ + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + } else { + return true; + } case CU_GAME: if(record->event.pressed) { if (game) diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md index eb8da3fa78..7e78330f07 100644 --- a/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md +++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md @@ -3,4 +3,4 @@ This keymap emulates most keys of the US-International layout on PCs that have German set as input language. This allows the use of the keyboard on any PC in Germany without the need to change any settings. The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß. -Righthand Numpad is enabled by default, enable lefthand Numpad with #define LEFTNUM. +Righthand numpad is enabled by default, enable lefthand numpad with #define LEFTNUM and center numpad with #define CENTERNUM. diff --git a/users/spacebarracecar/spacebarracecar.h b/users/spacebarracecar/spacebarracecar.h index 1e18253510..035c1ac790 100644 --- a/users/spacebarracecar/spacebarracecar.h +++ b/users/spacebarracecar/spacebarracecar.h @@ -81,6 +81,8 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record); #define CTRLC LCTL(KC_C) #define CTRLV LCTL(KC_V) +#define ALTF4 LALT(KC_F4) + #define GUIU LGUI(KC_UP) #define GUID LGUI(KC_DOWN) #define GUIL LGUI(KC_LEFT) From 9ee2991c3db72fbd4074f2b83185ef830d53cba4 Mon Sep 17 00:00:00 2001 From: Charlie McMackin Date: Sun, 18 Nov 2018 09:52:53 -0600 Subject: [PATCH 0103/1763] Default JIS TKL keymap for Pegasus Hoof (#4446) * Add TKL JIS layout for Pegasus Hoof Tested with a JIS Majestouch 2 TKL * Add default_jis keymap for Pegasus Hoof * Remove unnecessary keycode definition * Remove legacy fn_actions in favor of MO(1) * Remove unnecessary build directive --- .../pegasushoof/keymaps/default_jis/keymap.c | 54 +++++++++++++++++++ .../pegasushoof/keymaps/default_jis/rules.mk | 17 ++++++ keyboards/bpiphany/pegasushoof/pegasushoof.h | 18 +++++++ 3 files changed, 89 insertions(+) create mode 100644 keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c create mode 100644 keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c new file mode 100644 index 0000000000..a774741822 --- /dev/null +++ b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c @@ -0,0 +1,54 @@ +/* +Copyright 2016 Daniel Svensson + 2018 Charlie McMackin + +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 . +*/ + +#include QMK_KEYBOARD_H + +#define KM_JIS 0 +#define KM_MEDIA 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = + { + /* Layer 0: Standard JIS layer */ + [KM_JIS] = LAYOUT_tkl_jis(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_JYEN, 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_DEL, KC_END, KC_PGDN, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_BSLS,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_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_HENK,KC_KANA,KC_RALT,MO(1), KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT), + /* Layer 1: Function layer */ + [KM_MEDIA] = LAYOUT_tkl_jis(_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MPLY, \ + _______,_______,_______,_______, _______, _______,_______,_______,_______,RESET , KC_MPRV,KC_MSTP,KC_MNXT) + }; + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + ph_caps_led_on(); + } else { + ph_caps_led_off(); + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + ph_sclk_led_on(); + } else { + ph_sclk_led_off(); + } +} diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk new file mode 100644 index 0000000000..8254a83891 --- /dev/null +++ b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk @@ -0,0 +1,17 @@ +# 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 = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42 +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. diff --git a/keyboards/bpiphany/pegasushoof/pegasushoof.h b/keyboards/bpiphany/pegasushoof/pegasushoof.h index d031e3ed25..939a854cd4 100644 --- a/keyboards/bpiphany/pegasushoof/pegasushoof.h +++ b/keyboards/bpiphany/pegasushoof/pegasushoof.h @@ -41,6 +41,24 @@ along with this program. If not, see . /* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \ } +#define LAYOUT_tkl_jis( \ + KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \ + KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO7, KO2, KR4, KC4, KE4, \ + KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KQ4, KC5, KE5, \ + KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1, \ + KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \ + KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \ + ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \ + /* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , KG0 , KH0 , KI0 , KJ0 , KK0 , KL0 , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \ + /* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \ + /* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \ + /* 3 */ { ___ , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \ + /* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \ + /* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \ + /* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , ___ , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \ + /* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KO7 , KP7 , ___ , ___ }, \ +} + inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); } inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); } From 31298be2b17a1b9f203c8fd1d7bae8f923557cc0 Mon Sep 17 00:00:00 2001 From: zvecr Date: Sun, 18 Nov 2018 15:53:33 +0000 Subject: [PATCH 0104/1763] Add personal zvecr dz60 keymap (#4443) * Add Configurator support for dz60 ansi split space * Add keymap and fix layout macro --- keyboards/dz60/dz60.h | 27 ++++++++++++++++++ keyboards/dz60/info.json | 4 +++ keyboards/dz60/keymaps/zvecr/keymap.c | 40 +++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 keyboards/dz60/keymaps/zvecr/keymap.c diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index 2cf2eec7a0..62f6338cd4 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -170,6 +170,33 @@ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ } +/* LAYOUT_60_ansi_split + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ + * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │40 │41 │43 │44 │46 │48 │4a │4b │4d │4e │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ +*/ +#define LAYOUT_60_ansi_split( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \ + k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \ + k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k43, k44, k46, k48, k4a, k4b, k4d, k4e \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \ + { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \ + { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \ + { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \ + { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \ +} + /* LAYOUT_60_iso * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │ diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index a163cc6a46..9ec7274531 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -25,6 +25,10 @@ "key_count": 61, "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] }, + "LAYOUT_60_ansi_split": { + "key_count": 61, + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + }, "LAYOUT_60_iso": { "key_count": 62, "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] diff --git a/keyboards/dz60/keymaps/zvecr/keymap.c b/keyboards/dz60/keymaps/zvecr/keymap.c new file mode 100644 index 0000000000..9127fa0a7e --- /dev/null +++ b/keyboards/dz60/keymaps/zvecr/keymap.c @@ -0,0 +1,40 @@ +#include QMK_KEYBOARD_H + +/* +* Each layer gets a name for readability. +* The underscores don't mean anything - you can +* have a layer called STUFF or any other name. +* Layer names don't all need to be of the same +* length, and you can also skip them entirely +* and just use numbers. +* +*/ +#define BL 0 // Base Layer +#define FL 1 // Function Layer +#define ML 2 // Macro Layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [BL] = LAYOUT_60_ansi_split( + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(FL), KC_SPC, KC_RALT, KC_RGUI, MO(ML), KC_RCTL), + + [FL] = LAYOUT_60_ansi_split( + 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, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, + _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, KC_DEL, KC_END, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + + [ML] = LAYOUT_60_ansi_split( + _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + +}; From de173e344e89ee356cfd0be75742122afac766d0 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Sun, 18 Nov 2018 08:23:51 -0800 Subject: [PATCH 0105/1763] Satan: add LAYOUT_60_ansi_split_rshift to info.json (#4441) --- keyboards/satan/info.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboards/satan/info.json b/keyboards/satan/info.json index d0beb723b7..2b2e96ed19 100644 --- a/keyboards/satan/info.json +++ b/keyboards/satan/info.json @@ -20,8 +20,11 @@ "LAYOUT_60_iso_split_bs_rshift": { "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}, {"label":"k09", "x":9, "y":0}, {"label":"k0a", "x":10, "y":0}, {"label":"k0b", "x":11, "y":0}, {"label":"k0c", "x":12, "y":0}, {"label":"k0d", "x":13, "y":0}, {"label":"k49", "x":14, "y":0}, {"label":"k10", "x":0, "y":1, "w":1.5}, {"label":"k11", "x":1.5, "y":1}, {"label":"k12", "x":2.5, "y":1}, {"label":"k13", "x":3.5, "y":1}, {"label":"k14", "x":4.5, "y":1}, {"label":"k15", "x":5.5, "y":1}, {"label":"k16", "x":6.5, "y":1}, {"label":"k17", "x":7.5, "y":1}, {"label":"k18", "x":8.5, "y":1}, {"label":"k19", "x":9.5, "y":1}, {"label":"k1a", "x":10.5, "y":1}, {"label":"k1b", "x":11.5, "y":1}, {"label":"k1c", "x":12.5, "y":1}, {"label":"k20", "x":0, "y":2, "w":1.75}, {"label":"k21", "x":1.75, "y":2}, {"label":"k22", "x":2.75, "y":2}, {"label":"k23", "x":3.75, "y":2}, {"label":"k24", "x":4.75, "y":2}, {"label":"k25", "x":5.75, "y":2}, {"label":"k26", "x":6.75, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"k30", "x":0, "y":3, "w":1.25}, {"label":"k31", "x":1.25, "y":3}, {"label":"k32", "x":2.25, "y":3}, {"label":"k33", "x":3.25, "y":3}, {"label":"k34", "x":4.25, "y":3}, {"label":"k35", "x":5.25, "y":3}, {"label":"k36", "x":6.25, "y":3}, {"label":"k37", "x":7.25, "y":3}, {"label":"k38", "x":8.25, "y":3}, {"label":"k39", "x":9.25, "y":3}, {"label":"k3a", "x":10.25, "y":3}, {"label":"k3b", "x":11.25, "y":3}, {"label":"k3d", "x":12.25, "y":3, "w":1.75}, {"label":"k3c", "x":14, "y":3}, {"label":"k40", "x":0, "y":4, "w":1.5}, {"label":"k41", "x":1.5, "y":4}, {"label":"k42", "x":2.5, "y":4, "w":1.5}, {"label":"k45", "x":4, "y":4, "w":6}, {"label":"k4a", "x":10, "y":4, "w":1.5}, {"label":"k4b", "x":11.5, "y":4}, {"label":"k4c", "x":12.5, "y":4}, {"label":"k4d", "x":13.5, "y":4, "w":1.5}] }, + "LAYOUT_60_ansi_split_rshift": { + "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}, {"label":"k09", "x":9, "y":0}, {"label":"k0a", "x":10, "y":0}, {"label":"k0b", "x":11, "y":0}, {"label":"k0c", "x":12, "y":0}, {"label":"k0d", "x":13, "y":0, "w":2}, {"label":"k10", "x":0, "y":1, "w":1.5}, {"label":"k11", "x":1.5, "y":1}, {"label":"k12", "x":2.5, "y":1}, {"label":"k13", "x":3.5, "y":1}, {"label":"k14", "x":4.5, "y":1}, {"label":"k15", "x":5.5, "y":1}, {"label":"k16", "x":6.5, "y":1}, {"label":"k17", "x":7.5, "y":1}, {"label":"k18", "x":8.5, "y":1}, {"label":"k19", "x":9.5, "y":1}, {"label":"k1a", "x":10.5, "y":1}, {"label":"k1b", "x":11.5, "y":1}, {"label":"k1c", "x":12.5, "y":1}, {"label":"k1d", "x":13.5, "y":1, "w":1.5}, {"label":"k20", "x":0, "y":2, "w":1.75}, {"label":"k21", "x":1.75, "y":2}, {"label":"k22", "x":2.75, "y":2}, {"label":"k23", "x":3.75, "y":2}, {"label":"k24", "x":4.75, "y":2}, {"label":"k25", "x":5.75, "y":2}, {"label":"k26", "x":6.75, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2d", "x":12.75, "y":2, "w":2.25}, {"label":"k30", "x":0, "y":3, "w":2.25}, {"label":"k32", "x":2.25, "y":3}, {"label":"k33", "x":3.25, "y":3}, {"label":"k34", "x":4.25, "y":3}, {"label":"k35", "x":5.25, "y":3}, {"label":"k36", "x":6.25, "y":3}, {"label":"k37", "x":7.25, "y":3}, {"label":"k38", "x":8.25, "y":3}, {"label":"k39", "x":9.25, "y":3}, {"label":"k3a", "x":10.25, "y":3}, {"label":"k3b", "x":11.25, "y":3}, {"label":"k3d", "x":12.25, "y":3, "w":1.75}, {"label":"k3c", "x":14, "y":3}, {"label":"k40", "x":0, "y":4, "w":1.25}, {"label":"k41", "x":1.25, "y":4, "w":1.25}, {"label":"k42", "x":2.5, "y":4, "w":1.25}, {"label":"k45", "x":3.75, "y":4, "w":6.25}, {"label":"k4a", "x":10, "y":4, "w":1.25}, {"label":"k4b", "x":11.25, "y":4, "w":1.25}, {"label":"k4c", "x":12.5, "y":4, "w":1.25}, {"label":"k4d", "x":13.75, "y":4, "w":1.25}] + }, "LAYOUT_60_iso_split_rshift": { "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}, {"label":"k09", "x":9, "y":0}, {"label":"k0a", "x":10, "y":0}, {"label":"k0b", "x":11, "y":0}, {"label":"k0c", "x":12, "y":0}, {"label":"k0d", "x":13, "y":0, "w":2}, {"label":"k10", "x":0, "y":1, "w":1.5}, {"label":"k11", "x":1.5, "y":1}, {"label":"k12", "x":2.5, "y":1}, {"label":"k13", "x":3.5, "y":1}, {"label":"k14", "x":4.5, "y":1}, {"label":"k15", "x":5.5, "y":1}, {"label":"k16", "x":6.5, "y":1}, {"label":"k17", "x":7.5, "y":1}, {"label":"k18", "x":8.5, "y":1}, {"label":"k19", "x":9.5, "y":1}, {"label":"k1a", "x":10.5, "y":1}, {"label":"k1b", "x":11.5, "y":1}, {"label":"k1c", "x":12.5, "y":1}, {"label":"k20", "x":0, "y":2, "w":1.75}, {"label":"k21", "x":1.75, "y":2}, {"label":"k22", "x":2.75, "y":2}, {"label":"k23", "x":3.75, "y":2}, {"label":"k24", "x":4.75, "y":2}, {"label":"k25", "x":5.75, "y":2}, {"label":"k26", "x":6.75, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"k30", "x":0, "y":3, "w":1.25}, {"label":"k31", "x":1.25, "y":3}, {"label":"k32", "x":2.25, "y":3}, {"label":"k33", "x":3.25, "y":3}, {"label":"k34", "x":4.25, "y":3}, {"label":"k35", "x":5.25, "y":3}, {"label":"k36", "x":6.25, "y":3}, {"label":"k37", "x":7.25, "y":3}, {"label":"k38", "x":8.25, "y":3}, {"label":"k39", "x":9.25, "y":3}, {"label":"k3a", "x":10.25, "y":3}, {"label":"k3b", "x":11.25, "y":3}, {"label":"k3d", "x":12.25, "y":3, "w":1.75}, {"label":"k3c", "x":14, "y":3}, {"label":"k40", "x":0, "y":4, "w":1.25}, {"label":"k41", "x":1.25, "y":4, "w":1.25}, {"label":"k42", "x":2.5, "y":4, "w":1.25}, {"label":"k45", "x":3.75, "y":4, "w":6.25}, {"label":"k4a", "x":10, "y":4, "w":1.25}, {"label":"k4b", "x":11.25, "y":4, "w":1.25}, {"label":"k4c", "x":12.5, "y":4, "w":1.25}, {"label":"k4d", "x":13.75, "y":4, "w":1.25}] } } -} \ No newline at end of file +} From 504bf11769f1340711d749e8dc818f39a56a4dfb Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Mon, 19 Nov 2018 01:24:41 +0900 Subject: [PATCH 0106/1763] Allows disabling rgb effects in userspace (#4422) * Allows disabling animations in user space * Describe disabling effects in the docs * Allows disabling individual reactive modes * Adds the list ode defines --- docs/feature_rgb_matrix.md | 24 ++++++ quantum/rgb_matrix.c | 170 ++++++++++++++++++++++++------------- quantum/rgb_matrix.h | 44 ++++++++-- 3 files changed, 173 insertions(+), 65 deletions(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 809d034bdc..0af1e49479 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -150,6 +150,30 @@ These are the effects that are currently available: #endif RGB_MATRIX_EFFECT_MAX }; + +You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `config.h`: + + +|Define |Description | +|---------------------------------------------------|--------------------------------------------| +|`#define DISABLE_RGB_MATRIX_ALPHAS_MODS` |Disables `RGB_MATRIX_ALPHAS_MODS` | +|`#define DISABLE_RGB_MATRIX_DUAL_BEACON` |Disables `RGB_MATRIX_DUAL_BEACON` | +|`#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN` |Disables `RGB_MATRIX_GRADIENT_UP_DOWN` | +|`#define DISABLE_RGB_MATRIX_RAINDROPS` |Disables `RGB_MATRIX_RAINDROPS` | +|`#define DISABLE_RGB_MATRIX_CYCLE_ALL` |Disables `RGB_MATRIX_CYCLE_ALL` | +|`#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT` |Disables `RGB_MATRIX_CYCLE_LEFT_RIGHT` | +|`#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN` |Disables `RGB_MATRIX_CYCLE_UP_DOWN` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_BEACON` |Disables `RGB_MATRIX_RAINBOW_BEACON` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS` |Disables `RGB_MATRIX_RAINBOW_PINWHEELS` | +|`#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON`|Disables `RGB_MATRIX_RAINBOW_MOVING_CHEVRON`| +|`#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS` |Disables `RGB_MATRIX_JELLYBEAN_RAINDROPS` | +|`#define DISABLE_RGB_MATRIX_DIGITAL_RAIN` |Disables `RGB_MATRIX_DIGITAL_RAIN` | +|`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE` |Disables `RGB_MATRIX_SOLID_REACTIVE` | +|`#define DISABLE_RGB_MATRIX_SPLASH` |Disables `RGB_MATRIX_SPLASH` | +|`#define DISABLE_RGB_MATRIX_MULTISPLASH` |Disables `RGB_MATRIX_MULTISPLASH` | +|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` | +|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` | + ## Custom layer effects diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 26ee57f5c2..15bd136716 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -55,6 +55,10 @@ rgb_config_t rgb_matrix_config; #define RGB_DIGITAL_RAIN_DROPS 24 #endif +#if !defined(DISABLE_RGB_MATRIX_RAINDROPS) || !defined(DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS) || !defined(DISABLE_RGB_MATRIX_DIGITAL_RAIN) + #define TRACK_PREVIOUS_EFFECT +#endif + bool g_suspend_state = false; // Global tick at 20 Hz @@ -79,7 +83,12 @@ void eeconfig_update_rgb_matrix(uint32_t val) { void eeconfig_update_rgb_matrix_default(void) { dprintf("eeconfig_update_rgb_matrix_default\n"); rgb_matrix_config.enable = 1; +#ifndef DISABLE_RGB_MATRIX_CYCLE_ALL rgb_matrix_config.mode = RGB_MATRIX_CYCLE_LEFT_RIGHT; +#else + // fallback to solid colors if RGB_MATRIX_CYCLE_LEFT_RIGHT is disabled in userspace + rgb_matrix_config.mode = RGB_MATRIX_SOLID_COLOR; +#endif rgb_matrix_config.hue = 0; rgb_matrix_config.sat = 255; rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS; @@ -499,7 +508,7 @@ void rgb_matrix_digital_rain( const bool initialize ) { map_row_column_to_led(row, col, &led, &led_count); if (map[col][row] > pure_green_intensity) { - const uint8_t boost = (uint8_t) ((uint16_t) max_brightness_boost + const uint8_t boost = (uint8_t) ((uint16_t) max_brightness_boost * (map[col][row] - pure_green_intensity) / (max_intensity - pure_green_intensity)); rgb_matrix_set_color(led, boost, max_intensity, boost); } @@ -618,12 +627,16 @@ void rgb_matrix_custom(void) { } void rgb_matrix_task(void) { - static uint8_t toggle_enable_last = 255; + #ifdef TRACK_PREVIOUS_EFFECT + static uint8_t toggle_enable_last = 255; + #endif if (!rgb_matrix_config.enable) { - rgb_matrix_all_off(); - rgb_matrix_indicators(); - toggle_enable_last = rgb_matrix_config.enable; - return; + rgb_matrix_all_off(); + rgb_matrix_indicators(); + #ifdef TRACK_PREVIOUS_EFFECT + toggle_enable_last = rgb_matrix_config.enable; + #endif + return; } // delay 1 second before driving LEDs or doing anything else static uint8_t startup_tick = 0; @@ -658,13 +671,16 @@ void rgb_matrix_task(void) { (RGB_DISABLE_AFTER_TIMEOUT > 0 && g_any_key_hit > RGB_DISABLE_AFTER_TIMEOUT * 60 * 20)); uint8_t effect = suspend_backlight ? 0 : rgb_matrix_config.mode; - // Keep track of the effect used last time, - // detect change in effect, so each effect can - // have an optional initialization. - static uint8_t effect_last = 255; - bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); - effect_last = effect; - toggle_enable_last = rgb_matrix_config.enable; + #ifdef TRACK_PREVIOUS_EFFECT + // Keep track of the effect used last time, + // detect change in effect, so each effect can + // have an optional initialization. + + static uint8_t effect_last = 255; + bool initialize = (effect != effect_last) || (rgb_matrix_config.enable != toggle_enable_last); + effect_last = effect; + toggle_enable_last = rgb_matrix_config.enable; + #endif // this gets ticked at 20 Hz. // each effect can opt to do calculations @@ -673,59 +689,93 @@ void rgb_matrix_task(void) { case RGB_MATRIX_SOLID_COLOR: rgb_matrix_solid_color(); break; - case RGB_MATRIX_ALPHAS_MODS: - rgb_matrix_alphas_mods(); - break; - case RGB_MATRIX_DUAL_BEACON: - rgb_matrix_dual_beacon(); - break; - case RGB_MATRIX_GRADIENT_UP_DOWN: - rgb_matrix_gradient_up_down(); - break; - case RGB_MATRIX_RAINDROPS: - rgb_matrix_raindrops( initialize ); - break; - case RGB_MATRIX_CYCLE_ALL: - rgb_matrix_cycle_all(); - break; - case RGB_MATRIX_CYCLE_LEFT_RIGHT: - rgb_matrix_cycle_left_right(); - break; - case RGB_MATRIX_CYCLE_UP_DOWN: - rgb_matrix_cycle_up_down(); - break; - case RGB_MATRIX_RAINBOW_BEACON: - rgb_matrix_rainbow_beacon(); - break; - case RGB_MATRIX_RAINBOW_PINWHEELS: - rgb_matrix_rainbow_pinwheels(); - break; - case RGB_MATRIX_RAINBOW_MOVING_CHEVRON: - rgb_matrix_rainbow_moving_chevron(); - break; - case RGB_MATRIX_JELLYBEAN_RAINDROPS: - rgb_matrix_jellybean_raindrops( initialize ); - break; - case RGB_MATRIX_DIGITAL_RAIN: - rgb_matrix_digital_rain( initialize ); - break; - #ifdef RGB_MATRIX_KEYPRESSES - case RGB_MATRIX_SOLID_REACTIVE: - rgb_matrix_solid_reactive(); + #ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS + case RGB_MATRIX_ALPHAS_MODS: + rgb_matrix_alphas_mods(); break; - case RGB_MATRIX_SPLASH: - rgb_matrix_splash(); + #endif + #ifndef DISABLE_RGB_MATRIX_DUAL_BEACON + case RGB_MATRIX_DUAL_BEACON: + rgb_matrix_dual_beacon(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN + case RGB_MATRIX_GRADIENT_UP_DOWN: + rgb_matrix_gradient_up_down(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINDROPS + case RGB_MATRIX_RAINDROPS: + rgb_matrix_raindrops( initialize ); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_ALL + case RGB_MATRIX_CYCLE_ALL: + rgb_matrix_cycle_all(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + case RGB_MATRIX_CYCLE_LEFT_RIGHT: + rgb_matrix_cycle_left_right(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN + case RGB_MATRIX_CYCLE_UP_DOWN: + rgb_matrix_cycle_up_down(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON + case RGB_MATRIX_RAINBOW_BEACON: + rgb_matrix_rainbow_beacon(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS + case RGB_MATRIX_RAINBOW_PINWHEELS: + rgb_matrix_rainbow_pinwheels(); break; - case RGB_MATRIX_MULTISPLASH: - rgb_matrix_multisplash(); + #endif + #ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + case RGB_MATRIX_RAINBOW_MOVING_CHEVRON: + rgb_matrix_rainbow_moving_chevron(); break; - case RGB_MATRIX_SOLID_SPLASH: - rgb_matrix_solid_splash(); + #endif + #ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + case RGB_MATRIX_JELLYBEAN_RAINDROPS: + rgb_matrix_jellybean_raindrops( initialize ); break; - case RGB_MATRIX_SOLID_MULTISPLASH: - rgb_matrix_solid_multisplash(); + #endif + #ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN + case RGB_MATRIX_DIGITAL_RAIN: + rgb_matrix_digital_rain( initialize ); break; #endif + #ifdef RGB_MATRIX_KEYPRESSES + #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE + case RGB_MATRIX_SOLID_REACTIVE: + rgb_matrix_solid_reactive(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SPLASH + case RGB_MATRIX_SPLASH: + rgb_matrix_splash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_MULTISPLASH + case RGB_MATRIX_MULTISPLASH: + rgb_matrix_multisplash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH + case RGB_MATRIX_SOLID_SPLASH: + rgb_matrix_solid_splash(); + break; + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + case RGB_MATRIX_SOLID_MULTISPLASH: + rgb_matrix_solid_multisplash(); + break; + #endif + #endif default: rgb_matrix_custom(); break; diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index d2450a7d99..3cd248ffc4 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -70,24 +70,58 @@ typedef union { enum rgb_matrix_effects { RGB_MATRIX_SOLID_COLOR = 1, +#ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS RGB_MATRIX_ALPHAS_MODS, +#endif +#ifndef DISABLE_RGB_MATRIX_DUAL_BEACON RGB_MATRIX_DUAL_BEACON, +#endif +#ifndef DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN RGB_MATRIX_GRADIENT_UP_DOWN, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINDROPS RGB_MATRIX_RAINDROPS, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_ALL RGB_MATRIX_CYCLE_ALL, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT RGB_MATRIX_CYCLE_LEFT_RIGHT, +#endif +#ifndef DISABLE_RGB_MATRIX_CYCLE_UP_DOWN RGB_MATRIX_CYCLE_UP_DOWN, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_BEACON RGB_MATRIX_RAINBOW_BEACON, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS RGB_MATRIX_RAINBOW_PINWHEELS, +#endif +#ifndef DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON RGB_MATRIX_RAINBOW_MOVING_CHEVRON, +#endif +#ifndef DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS RGB_MATRIX_JELLYBEAN_RAINDROPS, +#endif +#ifndef DISABLE_RGB_MATRIX_DIGITAL_RAIN RGB_MATRIX_DIGITAL_RAIN, +#endif #ifdef RGB_MATRIX_KEYPRESSES - RGB_MATRIX_SOLID_REACTIVE, - RGB_MATRIX_SPLASH, - RGB_MATRIX_MULTISPLASH, - RGB_MATRIX_SOLID_SPLASH, - RGB_MATRIX_SOLID_MULTISPLASH, + #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE + RGB_MATRIX_SOLID_REACTIVE, + #endif + #ifndef DISABLE_RGB_MATRIX_SPLASH + RGB_MATRIX_SPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_MULTISPLASH + RGB_MATRIX_MULTISPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH + RGB_MATRIX_SOLID_SPLASH, + #endif + #ifndef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH + RGB_MATRIX_SOLID_MULTISPLASH, + #endif #endif RGB_MATRIX_EFFECT_MAX }; From bdd41715af2acdfbdbe78283d7519664dd01088e Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 16 Nov 2018 17:03:41 -0800 Subject: [PATCH 0107/1763] Make Ergodox EZ Glow's rgb matrix user configurable --- keyboards/ergodox_ez/ergodox_ez.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c index 61f910711a..3b2c943506 100644 --- a/keyboards/ergodox_ez/ergodox_ez.c +++ b/keyboards/ergodox_ez/ergodox_ez.c @@ -269,6 +269,7 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { }; +__attribute__ ((weak)) const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = { /*{row | col << 4} From 223b3d2be79594eddd3837067348ab97da2df8ae Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 18 Nov 2018 08:55:45 -0800 Subject: [PATCH 0108/1763] Fix i2c_master.d listed more than once warning --- keyboards/ergodox_ez/keymaps/default/keymap.c | 2 -- keyboards/ergodox_ez/rules.mk | 8 ++++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c index ef70decd53..49de607737 100644 --- a/keyboards/ergodox_ez/keymaps/default/keymap.c +++ b/keyboards/ergodox_ez/keymaps/default/keymap.c @@ -1,6 +1,4 @@ #include QMK_KEYBOARD_H -#include "debug.h" -#include "action_layer.h" #include "version.h" #define BASE 0 // default layer diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk index ef2aefbb9a..446ba3e21a 100644 --- a/keyboards/ergodox_ez/rules.mk +++ b/keyboards/ergodox_ez/rules.mk @@ -15,8 +15,7 @@ #---------------------------------------------------------------------------- # # project specific files -SRC = matrix.c \ - i2c_master.c +SRC += matrix.c # MCU name MCU = atmega32u4 @@ -85,4 +84,9 @@ API_SYSEX_ENABLE = no RGBLIGHT_ENABLE = yes RGB_MATRIX_ENABLE = no # enable later +ifeq ($(strip $(RGB_MATRIX_ENABLE)), no) + SRC += i2c_master.c +endif + + LAYOUTS = ergodox From 4d66df5091412bb907bd95eef09a0b7e6567ab55 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 18 Nov 2018 08:59:52 -0800 Subject: [PATCH 0109/1763] Add default glow board --- .../ergodox_ez/keymaps/default_glow/keymap.c | 1 + .../ergodox_ez/keymaps/default_glow/readme.md | 15 +++++++++++++++ .../ergodox_ez/keymaps/default_glow/rules.mk | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 keyboards/ergodox_ez/keymaps/default_glow/keymap.c create mode 100644 keyboards/ergodox_ez/keymaps/default_glow/readme.md create mode 100644 keyboards/ergodox_ez/keymaps/default_glow/rules.mk diff --git a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c new file mode 100644 index 0000000000..526c364029 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c @@ -0,0 +1 @@ +// Placeholder. See ../default/keymap.c for details diff --git a/keyboards/ergodox_ez/keymaps/default_glow/readme.md b/keyboards/ergodox_ez/keymaps/default_glow/readme.md new file mode 100644 index 0000000000..1150a4f709 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/default_glow/readme.md @@ -0,0 +1,15 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Dec 2016: + * Added LED keys + * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now. +* Sep 22, 2016: + * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM. +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](https://i.imgur.com/Be53jH7.png) \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk new file mode 100644 index 0000000000..360c3c51b8 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk @@ -0,0 +1,4 @@ +RGBLIGHT_ENABLE = no +RGB_MATRIX_ENABLE = yes # enable later + +SRC += ../default/keymap.c From e0690096f8b5199cd6f602bc3a11c234b4309fb2 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Sun, 18 Nov 2018 15:20:21 -0800 Subject: [PATCH 0110/1763] Fix my community layouts (#4449) * fix formatting of keymap * update readme with boards I currently own * made the wrong assumption that every board would use the same space for backspace * update readme with boards I currently own --- .../60_ansi/mechmerlin-ansi/keymap.c | 26 +++++++++---------- .../60_ansi/mechmerlin-ansi/readme.md | 7 ++--- .../mechmerlin-split/keymap.c | 24 ++++++++--------- .../mechmerlin-split/readme.md | 3 ++- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/layouts/community/60_ansi/mechmerlin-ansi/keymap.c b/layouts/community/60_ansi/mechmerlin-ansi/keymap.c index 4128c4cf2d..12ed686802 100644 --- a/layouts/community/60_ansi/mechmerlin-ansi/keymap.c +++ b/layouts/community/60_ansi/mechmerlin-ansi/keymap.c @@ -3,24 +3,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BL] = LAYOUT_60_ansi( - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLASH, \ - KC_CTCP, 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_FNX, KC_RALT, KC_RGUI, KC_RCTL), + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLASH, \ + KC_CTCP, 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_FNX, KC_RALT, KC_RGUI, KC_RCTL), [_FL] = LAYOUT_60_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, \ - RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + 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, \ + RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), [_AL] = LAYOUT_60_ansi( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT) }; diff --git a/layouts/community/60_ansi/mechmerlin-ansi/readme.md b/layouts/community/60_ansi/mechmerlin-ansi/readme.md index 1c40def2a2..aefd6a9929 100644 --- a/layouts/community/60_ansi/mechmerlin-ansi/readme.md +++ b/layouts/community/60_ansi/mechmerlin-ansi/readme.md @@ -5,9 +5,10 @@ This is the 60% layout used by u/merlin36, host of the [MechMerlin](www.youtube. YouTube channel. It is used on his -[Duck Eagle V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/eagle_viper/v2) -[KBP V60 Type R Polestar](https://github.com/qmk/qmk_firmware/tree/master/keyboards/v60_type_r) -[NPKC KC60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/kc60) +[Duck Eagle V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/eagle_viper/v2) +[NPKC KC60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/kc60) +[1up60HSE](https://github.com/qmk/qmk_firmware/tree/master/keyboards/1upkeyboards/1up60hse) +[HS60 V1](https://github.com/qmk/qmk_firmware/tree/master/keyboards/hs60/v1) ## Keymap Notes - Arrow toggle switch is tapping the `FN` key once. diff --git a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c index 2464dcaa70..96c3a32f26 100644 --- a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c +++ b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c @@ -3,24 +3,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BL] = LAYOUT_60_ansi_split_bs_rshift( - 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_NO, 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_BSLASH, \ - KC_CTCP, 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, TG(2), \ + 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_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_BSLASH, \ + KC_CTCP, 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, TG(2), \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL), [_FL] = LAYOUT_60_ansi_split_bs_rshift( - 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_NO, KC_DEL, \ - RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, \ + 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_DEL, \ + RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), [_AL] = LAYOUT_60_ansi_split_bs_rshift( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT) }; diff --git a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md index 9f7cef347c..855fd5ac9e 100644 --- a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md +++ b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md @@ -6,7 +6,8 @@ host of the [MechMerlin](www.youtube.com/mechmerlin) YouTube channel. It is used on his [Sentraq S60-X RGB](https://github.com/qmk/qmk_firmware/tree/master/keyboards/s60_x) -[MechanicalKeyboards.com FaceW](https://github.com/qmk/qmk_firmware/tree/master/keyboards/bfake) +[Zeal60 Rev4](https://github.com/qmk/qmk_firmware/tree/master/keyboards/zeal60) +[DO60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/do60) ## Keymap Notes - Highly influenced by the KBP V60 and WKL B.Face standard layouts From 9e0f68a6522a86625f2586003959fd12b18dd86b Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 18 Nov 2018 17:51:00 -0800 Subject: [PATCH 0111/1763] Delete readme.md --- .../ergodox_ez/keymaps/default_glow/readme.md | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 keyboards/ergodox_ez/keymaps/default_glow/readme.md diff --git a/keyboards/ergodox_ez/keymaps/default_glow/readme.md b/keyboards/ergodox_ez/keymaps/default_glow/readme.md deleted file mode 100644 index 1150a4f709..0000000000 --- a/keyboards/ergodox_ez/keymaps/default_glow/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# ErgoDox EZ Default Configuration - -## Changelog - -* Dec 2016: - * Added LED keys - * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now. -* Sep 22, 2016: - * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM. -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: - -![Default](https://i.imgur.com/Be53jH7.png) \ No newline at end of file From f03fd950009fdfd9fa0dcb6d343fe22c6ab386cb Mon Sep 17 00:00:00 2001 From: Maarten Dekkers Date: Mon, 19 Nov 2018 21:15:16 +0100 Subject: [PATCH 0112/1763] Fix permanently on capslock led on Atom47 (#4452) --- keyboards/atom47/rev2/rev2.c | 3 +++ keyboards/atom47/rev3/rev3.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/keyboards/atom47/rev2/rev2.c b/keyboards/atom47/rev2/rev2.c index 31a8561f0c..06fce06dad 100644 --- a/keyboards/atom47/rev2/rev2.c +++ b/keyboards/atom47/rev2/rev2.c @@ -17,6 +17,9 @@ void matrix_scan_kb(void) { void led_init_ports(void) { // * Set our LED pins as output DDRB &= ~(1<<5); + + //Set output high, so the capslock led is off + PORTB |= (1 << 5); } void led_set_kb(uint8_t usb_led) { diff --git a/keyboards/atom47/rev3/rev3.c b/keyboards/atom47/rev3/rev3.c index 2cd04fa767..c541ed559c 100644 --- a/keyboards/atom47/rev3/rev3.c +++ b/keyboards/atom47/rev3/rev3.c @@ -17,6 +17,9 @@ void matrix_scan_kb(void) { void led_init_ports(void) { // * Set our LED pins as output DDRE |= (1 << 6); + + //Set output high, so the capslock led is off + PORTE |= (1 << 6); } void led_set_kb(uint8_t usb_led) { From 26156e84e8913754586b16fecd41f268ede722df Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 19 Nov 2018 16:37:49 -0800 Subject: [PATCH 0113/1763] Fix UCIS code Revert code change that broke UCIS due to bad suggestions --- quantum/process_keycode/process_ucis.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c index 380199771d..8deb24a867 100644 --- a/quantum/process_keycode/process_ucis.c +++ b/quantum/process_keycode/process_ucis.c @@ -93,6 +93,8 @@ void register_ucis(const char *hex) { } bool process_ucis (uint16_t keycode, keyrecord_t *record) { + uint8_t i; + unicode_input_mode_init(); if (!qk_ucis_state.in_progress) @@ -122,7 +124,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { if (keycode == KC_ENT || keycode == KC_SPC || keycode == KC_ESC) { bool symbol_found = false; - for (uint8_t i = qk_ucis_state.count; i > 0; i--) { + for (i = qk_ucis_state.count; i > 0; i--) { register_code (KC_BSPC); unregister_code (KC_BSPC); wait_ms(UNICODE_TYPE_DELAY); @@ -134,7 +136,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) { } unicode_input_start(); - for (uint8_t i = 0; ucis_symbol_table[i].symbol; i++) { + for (i = 0; ucis_symbol_table[i].symbol; i++) { if (is_uni_seq (ucis_symbol_table[i].symbol)) { symbol_found = true; register_ucis(ucis_symbol_table[i].code + 2); From ad91454574ad1f0fad73923d04d6d1e037e45fed Mon Sep 17 00:00:00 2001 From: Michael Graf Date: Tue, 20 Nov 2018 15:55:35 +0100 Subject: [PATCH 0114/1763] Adaptive debounce logic The debounce filtering reports a key/switch change directly, without any extra delay. After that the debounce logic will filter all further changes, until the key/switch reports the same state for the given count of scans. So a perfect switch will get a short debounce period and a bad key will get a much longer debounce period. The result is an adaptive debouncing period for each switch. This value defines how often the same key/switch state has to be detected in successive reads until the next key state can be reported. In other words this value defines the minimum debouncing period for a switch. --- keyboards/ergodox_ez/config.h | 17 +++++++----- keyboards/ergodox_ez/matrix.c | 49 ++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h index 7a350183b1..ee768853a9 100644 --- a/keyboards/ergodox_ez/config.h +++ b/keyboards/ergodox_ez/config.h @@ -85,17 +85,20 @@ along with this program. If not, see . #define RGBW 1 -/* "debounce" is measured in keyboard scans. Some users reported - * needing values as high as 15, which was at the time around 50ms. +/* + * The debounce filtering reports a key/switch change directly, + * without any extra delay. After that the debounce logic will filter + * all further changes, until the key/switch reports the same state for + * the given count of scans. + * So a perfect switch will get a short debounce period and + * a bad key will get a much longer debounce period. + * The result is an adaptive debouncing period for each switch. + * * If you don't define it here, the matrix code will default to * 5, which is now closer to 10ms, but still plenty according to * manufacturer specs. - * - * Default is quite high, because of reports with some production - * runs seeming to need it. This may change when configuration for - * this is more directly exposed. */ -#define DEBOUNCE 15 +#define DEBOUNCE 10 #define USB_MAX_POWER_CONSUMPTION 500 diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index 2e95c83b65..6d5bfca31a 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -57,6 +57,11 @@ along with this program. If not, see . /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; +/* + * matrix state(1:on, 0:off) + * contains the raw values without debounce filtering of the last read cycle. + */ +static matrix_row_t raw_matrix[MATRIX_ROWS]; // Debouncing: store for each key the number of scans until it's eligible to // change. When scanning the matrix, ignore any changes in keys that have @@ -118,6 +123,7 @@ void matrix_init(void) // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; + raw_matrix[i] = 0; for (uint8_t j=0; j < MATRIX_COLS; ++j) { debounce_matrix[i * MATRIX_COLS + j] = 0; } @@ -151,26 +157,30 @@ void matrix_power_up(void) { // Returns a matrix_row_t whose bits are set if the corresponding key should be // eligible to change in this scan. -matrix_row_t debounce_mask(uint8_t row) { +matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) { matrix_row_t result = 0; - for (uint8_t j=0; j < MATRIX_COLS; ++j) { - if (debounce_matrix[row * MATRIX_COLS + j]) { - --debounce_matrix[row * MATRIX_COLS + j]; + matrix_row_t change = rawcols ^ raw_matrix[row]; + raw_matrix[row] = rawcols; + for (uint8_t i = 0; i < MATRIX_COLS; ++i) { + if (debounce_matrix[row * MATRIX_COLS + i]) { + --debounce_matrix[row * MATRIX_COLS + i]; } else { - result |= (1 << j); + result |= (1 << i); } - } - return result; -} - -// Report changed keys in the given row. Resets the debounce countdowns -// corresponding to each set bit in 'change' to DEBOUNCE. -void debounce_report(matrix_row_t change, uint8_t row) { - for (uint8_t i = 0; i < MATRIX_COLS; ++i) { if (change & (1 << i)) { debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE; } } + return result; +} + +matrix_row_t debounce_read_cols(uint8_t row) { + // Read the row without debouncing filtering and store it for later usage. + matrix_row_t cols = read_cols(row); + // Get the Debounce mask. + matrix_row_t mask = debounce_mask(cols, row); + // debounce the row and return the result. + return (cols & mask) | (matrix[row] & ~mask);; } uint8_t matrix_scan(void) @@ -214,15 +224,12 @@ uint8_t matrix_scan(void) select_row(i + MATRIX_ROWS_PER_SIDE); // we don't need a 30us delay anymore, because selecting a // left-hand row requires more than 30us for i2c. - matrix_row_t mask = debounce_mask(i); - matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask); - debounce_report(cols ^ matrix[i], i); - matrix[i] = cols; + + // grab cols from left hand + matrix[i] = debounce_read_cols(i); // grab cols from right hand - mask = debounce_mask(i + MATRIX_ROWS_PER_SIDE); - cols = (read_cols(i + MATRIX_ROWS_PER_SIDE) & mask) | (matrix[i + MATRIX_ROWS_PER_SIDE] & ~mask); - debounce_report(cols ^ matrix[i + MATRIX_ROWS_PER_SIDE], i + MATRIX_ROWS_PER_SIDE); - matrix[i + MATRIX_ROWS_PER_SIDE] = cols; + matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE); + unselect_rows(); } From 93c0362552603f2d2517ff3b5afe2667968e3bda Mon Sep 17 00:00:00 2001 From: Nick Piazza Date: Tue, 20 Nov 2018 12:07:20 -0600 Subject: [PATCH 0115/1763] Update Levinson readme to support elite-c (#4445) * init - updated levinson readme to support elite-c * updated readme per PR comment * added trailing spaces to lines 6 7 8 * updated readme bootloader instructions * updated readme * updated readme --- keyboards/levinson/readme.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/keyboards/levinson/readme.md b/keyboards/levinson/readme.md index 79e64d332e..8cb4ff1cf7 100644 --- a/keyboards/levinson/readme.md +++ b/keyboards/levinson/readme.md @@ -4,17 +4,25 @@ Levinson A split 40% split 4x12 ortholinear keyboard made and sold by Keebio. It's essentially a Let's Split with LED backlight support and 2u thumb key support. [More info at Keebio](https://keeb.io). Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro +Hardware Supported: Pro Micro, Elite-C Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): make levinson/rev2:default -Example of flashing this keyboard: +Example of flashing this keyboard with Pro micro: make levinson/rev2:default:avrdude -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. +Example of flashing this keyboard with Elite-C: + +You'll need to add `BOOTLOADER = atmel-dfu` to your `rules.mk` to ensure that resetting the board works properly. + +Hold the reset button on the Elite-C board, or the reset button on the keyboard if already assembled, then release the button and run: + + make levinson/rev2:default:dfu + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io) From 303fa4ec3337760922a17fb19150c1aa3f58a3b3 Mon Sep 17 00:00:00 2001 From: Michael Kemp <20897849+mkem114@users.noreply.github.com> Date: Wed, 21 Nov 2018 07:11:23 +1300 Subject: [PATCH 0116/1763] Keyboard: Add Handwired 108 Key with Trackpoint (#4448) * Include both base keyboards * Merge the keymap * Merge the configs * Add wiring diagram for clarity of documentation * Merge rules * Merge keyboard sources * Change names to compile * Update documentation to suit * Add qwerty layout to 108keyTrackpoint * Separate the dvorak standard layout from a media focused one * Update documentation to reflect new keymaps * [style] Add empty lines at ends of files * [style] Meet current QMK style guide * Bring READEME closer to the QMK template * [style] Change all "108keyTrackpoint" to "108key_trackpoint" * [style] Use "LAYOUT" instead of "KEYMAP" QMK terminology has changed Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com> * Add two spaces after maintainer in README This is required to render properly Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com> * Remove redundant line "PREVENT_STUCK_MODIFIERS" is default on for QMK Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com> * Change include of keymaps to use QMK_KEYBOARD_H This includes automatically * Update make rules to match template * Change from KC_MENU to KC_APP The button functionality actually wanted is the context menu key * [style] Change "dvorakMedia" to "dvorak_media" * Update README to reflect minor changes --- .../108key_trackpoint/108key_trackpoint.c | 1 + .../108key_trackpoint/108key_trackpoint.h | 23 ++++++ .../handwired/108key_trackpoint/README.md | 23 ++++++ .../handwired/108key_trackpoint/config.h | 73 +++++++++++++++++ .../keymaps/default/keymap.c | 14 ++++ .../108key_trackpoint/keymaps/dvorak/keymap.c | 14 ++++ .../keymaps/dvorak_media/keymap.c | 14 ++++ .../handwired/108key_trackpoint/rules.mk | 82 +++++++++++++++++++ 8 files changed, 244 insertions(+) create mode 100644 keyboards/handwired/108key_trackpoint/108key_trackpoint.c create mode 100644 keyboards/handwired/108key_trackpoint/108key_trackpoint.h create mode 100644 keyboards/handwired/108key_trackpoint/README.md create mode 100644 keyboards/handwired/108key_trackpoint/config.h create mode 100644 keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c create mode 100644 keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c create mode 100644 keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c create mode 100644 keyboards/handwired/108key_trackpoint/rules.mk diff --git a/keyboards/handwired/108key_trackpoint/108key_trackpoint.c b/keyboards/handwired/108key_trackpoint/108key_trackpoint.c new file mode 100644 index 0000000000..3834f89613 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/108key_trackpoint.c @@ -0,0 +1 @@ +#include "108key_trackpoint.h" diff --git a/keyboards/handwired/108key_trackpoint/108key_trackpoint.h b/keyboards/handwired/108key_trackpoint/108key_trackpoint.h new file mode 100644 index 0000000000..100f4cb932 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/108key_trackpoint.h @@ -0,0 +1,23 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT( \ + K000, K002, K003, K004, K005, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, K019, K020, K021, K022, \ + \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, K219, K220, K221, K222, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K319, K320, K321, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K419, K420, K421, K422, \ + K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K513, K516, K519, K520, K521, \ + K600, K601, K603, K606, K610, K611, K613, K614, K615, K616, K617, K619, K621, K622, \ + K705, K706, K707 \ +) { \ + { K000, KC_NO, K002, K003, K004, K005, KC_NO, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, KC_NO, K019, K020, K021, K022 }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215, K216, K217, KC_NO, K219, K220, K221, K222 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, KC_NO, K319, K320, K321, KC_NO }, \ + { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K419, K420, K421, K422 }, \ + { KC_NO, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, KC_NO, K513, KC_NO, KC_NO, K516, KC_NO, KC_NO, K519, K520, K521, KC_NO }, \ + { K600, K601, KC_NO, K603, KC_NO, KC_NO, K606, KC_NO, KC_NO, KC_NO, K610, K611, KC_NO, K613, K614, K615, K616, K617, KC_NO, K619, KC_NO, K621, K622 }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K705, K706, K707, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \ +} diff --git a/keyboards/handwired/108key_trackpoint/README.md b/keyboards/handwired/108key_trackpoint/README.md new file mode 100644 index 0000000000..247043e171 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/README.md @@ -0,0 +1,23 @@ +# 108 Key with TrackPoint + +![wiring](https://raw.githubusercontent.com/qmk/qmk.fm/gh-pages/keyboards/handwired/108key_trackpoint/wiring.JPG) + +This is based off the handwired/trackpoint keyboard and generated code from [Keyboard Firmware Builder](https://kbfirmware.com/). + +Keyboard Maintainer: [mkem114](https://github.com/mkem114) +Hardware Supported (tested): Teensy++ 2.0 + +Make example for this keyboard (after setting up your build environment): + + make handwired/108keyTrackpoint:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +You may have to modify the source code to suit 104 keys, RGB back-lights, different micro-controllers, or big ass enter. + +There are three keymaps: +* qwerty with the four extra keys being: mute, media prev, media next, and media play +* dvorak with the four extra keys being: mute, media prev, media next, and media play +* dvorak_media with the caps lock being media play and the four extra keys being: mute, volume down, volume up, and media next + +To figure out how to wire your specific TrackPoint have a look out: [How to integrate a trackpoint in a mechanical keyboard](https://github.com/alonswartz/trackpoint). diff --git a/keyboards/handwired/108key_trackpoint/config.h b/keyboards/handwired/108key_trackpoint/config.h new file mode 100644 index 0000000000..7a63fe2628 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/config.h @@ -0,0 +1,73 @@ +#pragma once + +#include "config_common.h" + +#define VENDOR_ID 0x1234 +#define PRODUCT_ID 0x5678 +#define DEVICE_VER 0x0001 +#define MANUFACTURER QMK +#define PRODUCT 108Key-Trackpoint +#define DESCRIPTION A 108 key ANSI keyboard with a trackpoint and three mouse buttons + +#define MATRIX_ROWS 8 +#define MATRIX_COLS 23 + +#ifdef PS2_USE_USART + #define PS2_CLOCK_PORT PORTD + #define PS2_CLOCK_PIN PIND + #define PS2_CLOCK_DDR DDRD + #define PS2_CLOCK_BIT 5 + #define PS2_DATA_PORT PORTD + #define PS2_DATA_PIN PIND + #define PS2_DATA_DDR DDRD + #define PS2_DATA_BIT 2 + + /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */ + /* set DDR of CLOCK as input to be slave */ + #define PS2_USART_INIT() do { \ + PS2_CLOCK_DDR &= ~(1<mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + diff --git a/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c new file mode 100644 index 0000000000..3345aca169 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c @@ -0,0 +1,14 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT ( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, + + 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_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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + 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_LSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, + KC_BTN1, KC_BTN3, KC_BTN2 + ) +}; diff --git a/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c new file mode 100644 index 0000000000..0181ad9f77 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c @@ -0,0 +1,14 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT ( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, + KC_BTN1, KC_BTN3, KC_BTN2 + ) +}; diff --git a/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c new file mode 100644 index 0000000000..d6223c496e --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c @@ -0,0 +1,14 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT ( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, + KC_MPLY, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, + KC_BTN1, KC_BTN3, KC_BTN2 + ) +}; diff --git a/keyboards/handwired/108key_trackpoint/rules.mk b/keyboards/handwired/108key_trackpoint/rules.mk new file mode 100644 index 0000000000..84ec52eee9 --- /dev/null +++ b/keyboards/handwired/108key_trackpoint/rules.mk @@ -0,0 +1,82 @@ +# MCU name +MCU = at90usb1286 +#MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = halfkay + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# 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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) +PS2_MOUSE_ENABLE = yes +PS2_USE_USART = yes From 8837b9d99e59f9d815992352a28a1a515893e805 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 21 Nov 2018 07:49:28 -0800 Subject: [PATCH 0117/1763] Fix row 11 --- keyboards/ergodox_ez/matrix.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index 2e95c83b65..3ff1c7ab45 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -379,7 +379,7 @@ static void select_row(uint8_t row) break; case 11: DDRD |= (1<<2); - PORTD &= ~(1<<3); + PORTD &= ~(1<<2); break; case 12: DDRD |= (1<<3); @@ -392,4 +392,3 @@ static void select_row(uint8_t row) } } } - From 2f34252278280c34b6958066240e38a2ee6a7237 Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Wed, 21 Nov 2018 13:18:18 -0800 Subject: [PATCH 0118/1763] Keymap: Update keymap to match latest changes to Wilba's firmware. (#4432) * Fix firmware to work with latest Wilba changes (i.e. dynamic keymap) and M60a. * Get back RGB Backlight codes. * More tweaks. * Update users/talljoe/rules.mk Co-Authored-By: Talljoe --- keyboards/rama/m60_a/rules.mk | 6 +- .../minivan}/keymaps/talljoe-minivan/config.h | 10 +- .../minivan}/keymaps/talljoe-minivan/keymap.c | 0 .../minivan}/keymaps/talljoe-minivan/rules.mk | 0 .../60_ansi_split_bs_rshift/talljoe/config.h | 2 +- .../60_ansi_split_bs_rshift/talljoe/keymap.c | 95 +------------------ .../community/60_hhkb/talljoe-hhkb/config.h | 3 + .../community/tkl_ansi/talljoe-tkl/keymap.c | 90 +----------------- users/talljoe/config.h | 4 + users/talljoe/rules.mk | 2 + users/talljoe/talljoe.c | 34 ++++++- 11 files changed, 52 insertions(+), 194 deletions(-) rename keyboards/{tv44 => thevankeyboards/minivan}/keymaps/talljoe-minivan/config.h (94%) rename keyboards/{tv44 => thevankeyboards/minivan}/keymaps/talljoe-minivan/keymap.c (100%) rename keyboards/{tv44 => thevankeyboards/minivan}/keymaps/talljoe-minivan/rules.mk (100%) diff --git a/keyboards/rama/m60_a/rules.mk b/keyboards/rama/m60_a/rules.mk index 7ab1b7d3ba..9c1a2d9df7 100644 --- a/keyboards/rama/m60_a/rules.mk +++ b/keyboards/rama/m60_a/rules.mk @@ -54,7 +54,7 @@ BOOTLOADER = atmel-dfu OPT_DEFS += -DNO_SUSPEND_POWER_DOWN # Build Options -# change to "no" to disable the options, or define them in the Makefile in +# 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) @@ -68,7 +68,7 @@ MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -76,3 +76,5 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend RAW_ENABLE = yes DYNAMIC_KEYMAP_ENABLE = yes CIE1931_CURVE = yes + +LAYOUTS = 60_hhkb diff --git a/keyboards/tv44/keymaps/talljoe-minivan/config.h b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h similarity index 94% rename from keyboards/tv44/keymaps/talljoe-minivan/config.h rename to keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h index fa1f43adce..26d5e207e8 100644 --- a/keyboards/tv44/keymaps/talljoe-minivan/config.h +++ b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h @@ -11,7 +11,7 @@ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ -) KEYMAP_ARROW( \ +) LAYOUT_arrow( \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K0D, \ @@ -24,7 +24,7 @@ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ -) KEYMAP_ARROW( \ +) LAYOUT_arrow( \ K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ @@ -37,14 +37,14 @@ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ -) KEYMAP_ARROW( \ +) LAYOUT_arrow( \ K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K2D, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ - K40, K49, K42, K44, K45, K48, K0B, K0C, K4C \ + K40, K41, K42, K44, K45, K48, K0B, K0C, K4C \ ) -#define TEMPLATE_RESET KEYMAP_ARROW( \ +#define TEMPLATE_RESET LAYOUT_arrow( \ RESET, KC_NO, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ diff --git a/keyboards/tv44/keymaps/talljoe-minivan/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c similarity index 100% rename from keyboards/tv44/keymaps/talljoe-minivan/keymap.c rename to keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c diff --git a/keyboards/tv44/keymaps/talljoe-minivan/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk similarity index 100% rename from keyboards/tv44/keymaps/talljoe-minivan/rules.mk rename to keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h b/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h index bf18fd9f7d..65568d3abf 100644 --- a/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h @@ -34,7 +34,7 @@ { K40, K41, K42, {}, {}, {}, {}, K47, {}, {}, K4A, K4B, K4C, K4D } \ } -#ifdef KEYBOARD_zeal60 +#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A) #define ZEAL_RGB diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c index cfad9da8a3..7812add812 100644 --- a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c @@ -1,94 +1 @@ -#ifdef KEYBOARD_zeal60 -#include "config.h" -#include "zeal60.h" -#include "rgb_backlight.h" -#include "action_layer.h" -#include "solarized.h" -#include "talljoe.h" - -// from zeal_backlight.c -// we want to be able to set indicators for the spacebar stabs -// but they are not represented by a row/index. -extern backlight_config g_config; -void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ); - -void set_backlight_defaults(void) { - uint8_t space; - uint8_t caps_lock; - map_row_column_to_led(3, 12, &caps_lock); - map_row_column_to_led(4, 7, &space); - backlight_config default_values = { - .use_split_backspace = USE_SPLIT_BACKSPACE, - .use_split_left_shift = USE_SPLIT_LEFT_SHIFT, - .use_split_right_shift = USE_SPLIT_RIGHT_SHIFT, - .use_7u_spacebar = USE_7U_SPACEBAR, - .use_iso_enter = USE_ISO_ENTER, - .disable_when_usb_suspended = 1, - .disable_after_timeout = 0, - .brightness = 255, - .effect = 10, - .color_1 = solarized.base2, - .color_2 = solarized.base02, - .caps_lock_indicator = { .index = caps_lock, .color = solarized.red }, - .layer_1_indicator = { .index = space, .color = solarized.blue }, - .layer_2_indicator = { .index = space, .color = solarized.yellow }, - .layer_3_indicator = { .index = 254, .color = solarized.red }, - .alphas_mods = { - RGB_BACKLIGHT_ALPHAS_MODS_ROW_0, - RGB_BACKLIGHT_ALPHAS_MODS_ROW_1, - RGB_BACKLIGHT_ALPHAS_MODS_ROW_2, - RGB_BACKLIGHT_ALPHAS_MODS_ROW_3, - RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 } - }; - memcpy(&g_config, &default_values, sizeof(backlight_config)); - backlight_config_save(); - -#undef CUSTOM_RGB_LAYOUTS -#ifdef CUSTOM_RGB_LAYOUTS - solarized_t* S = &solarized; - HSV alphas = S->base2; - HSV custom_color_map[MATRIX_ROWS][MATRIX_COLS] = CM( - S->red, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->red, - S->orange, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->orange, - S->green, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->green, - S->blue, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->blue, S->blue, - S->violet, S->magenta, S->yellow, alphas, S->yellow, S->magenta, S->violet, S->green - ); - for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { - for (uint8_t col = 0; col < MATRIX_COLS; ++col) { - uint8_t index; - map_row_column_to_led( row, col, &index ); - set_key_color(index, custom_color_map[row][col]); - } - } -#endif // CUSTOM_RGB_LAYOUTS -} - -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - static uint8_t last_effect; - switch (keycode) { - case DFAULTS: - if (IS_PRESSED(record->event)) set_backlight_defaults(); - return false; - case BL_TOGG: - if (IS_PRESSED(record->event)) { - if (g_config.effect) { - last_effect = g_config.effect; - g_config.effect = 0; - } else { - g_config.effect = last_effect; - } - } - return false; - case EFFECT...EFFECT_END: - if (IS_PRESSED(record->event)) { - uint8_t effect = keycode - EFFECT; - g_config.effect = effect; - backlight_config_save(); - } - return false; - } - - return true; -} -#endif +// This space intentionally left blank diff --git a/layouts/community/60_hhkb/talljoe-hhkb/config.h b/layouts/community/60_hhkb/talljoe-hhkb/config.h index 9e907feeb5..54756a940b 100644 --- a/layouts/community/60_hhkb/talljoe-hhkb/config.h +++ b/layouts/community/60_hhkb/talljoe-hhkb/config.h @@ -19,4 +19,7 @@ K41, K42, K45, K48, K4C \ ) +#ifdef RGB_BACKLIGHT_M60_A + #define ZEAL_RGB +#endif #endif //CONFIG_USER_H diff --git a/layouts/community/tkl_ansi/talljoe-tkl/keymap.c b/layouts/community/tkl_ansi/talljoe-tkl/keymap.c index b5dc544927..7812add812 100644 --- a/layouts/community/tkl_ansi/talljoe-tkl/keymap.c +++ b/layouts/community/tkl_ansi/talljoe-tkl/keymap.c @@ -1,89 +1 @@ -#ifdef KEYBOARD_zeal60 -#include "config.h" -#include "zeal60.h" -#include "zeal_backlight.h" -#include "action_layer.h" -#include "solarized.h" -#include "talljoe.h" - -// from zeal_backlight.c -// we want to be able to set indicators for the spacebar stabs -// but they are not represented by a row/index. -extern zeal_backlight_config g_config; -void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ); - -void set_backlight_defaults(void) { - uint8_t space; - uint8_t caps_lock; - map_row_column_to_led(3, 12, &caps_lock); - map_row_column_to_led(4, 7, &space); - zeal_backlight_config default_values = { - .use_split_backspace = USE_SPLIT_BACKSPACE, - .use_split_left_shift = USE_SPLIT_LEFT_SHIFT, - .use_split_right_shift = USE_SPLIT_RIGHT_SHIFT, - .use_7u_spacebar = USE_7U_SPACEBAR, - .use_iso_enter = USE_ISO_ENTER, - .disable_when_usb_suspended = 1, - .disable_after_timeout = 0, - .brightness = 255, - .effect = 10, - .color_1 = solarized.base2, - .color_2 = solarized.base02, - .caps_lock_indicator = { .index = caps_lock, .color = solarized.red }, - .layer_1_indicator = { .index = space, .color = solarized.blue }, - .layer_2_indicator = { .index = space, .color = solarized.yellow }, - .layer_3_indicator = { .index = 254, .color = solarized.red }, - .alphas_mods = { - BACKLIGHT_ALPHAS_MODS_ROW_0, - BACKLIGHT_ALPHAS_MODS_ROW_1, - BACKLIGHT_ALPHAS_MODS_ROW_2, - BACKLIGHT_ALPHAS_MODS_ROW_3, - BACKLIGHT_ALPHAS_MODS_ROW_4 } - }; - memcpy(&g_config, &default_values, sizeof(zeal_backlight_config)); - backlight_config_save(); - - solarized_t* S = &solarized; - HSV alphas = S->base2; - HSV custom_color_map[MATRIX_ROWS][MATRIX_COLS] = CM( - S->red, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->red, - S->orange, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->orange, - S->green, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->green, - S->blue, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->blue, S->blue, - S->violet, S->magenta, S->yellow, alphas, S->yellow, S->magenta, S->violet, S->green - ); - for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { - for (uint8_t col = 0; col < MATRIX_COLS; ++col) { - backlight_set_key_color(row, col, custom_color_map[row][col]); - } - } -} - -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - static uint8_t last_effect; - switch (keycode) { - case DFAULTS: - if (IS_PRESSED(record->event)) set_backlight_defaults(); - return false; - case BL_TOGG: - if (IS_PRESSED(record->event)) { - if (g_config.effect) { - last_effect = g_config.effect; - g_config.effect = 0; - } else { - g_config.effect = last_effect; - } - } - return false; - case EFFECT...EFFECT_END: - if (IS_PRESSED(record->event)) { - uint8_t effect = keycode - EFFECT; - g_config.effect = effect; - backlight_config_save(); - } - return false; - } - - return true; -} -#endif +// This space intentionally left blank diff --git a/users/talljoe/config.h b/users/talljoe/config.h index 0d06a0b12d..33374014df 100644 --- a/users/talljoe/config.h +++ b/users/talljoe/config.h @@ -5,4 +5,8 @@ #define RESET_LAYER 15 +#define BOOTMAGIC_KEY_SALT KC_ESC +#define BOOTMAGIC_KEY_SKIP KC_I +#define BOOTMAGIC_KEY_EEPROM_CLEAR KC_E + #endif // !USERSPACE_CONFIG_H diff --git a/users/talljoe/rules.mk b/users/talljoe/rules.mk index 0f1f6f26a6..e0a71561f4 100644 --- a/users/talljoe/rules.mk +++ b/users/talljoe/rules.mk @@ -5,3 +5,5 @@ EXTRAFLAGS+=-flto TAP_DANCE_ENABLE=yes CONSOLE_ENABLE=no COMMAND_ENABLE=no +DYNAMIC_KEYMAP_ENABLE=no +BOOTMAGIC_ENABLE=full diff --git a/users/talljoe/talljoe.c b/users/talljoe/talljoe.c index 7a343e7768..e72dc6c3e0 100644 --- a/users/talljoe/talljoe.c +++ b/users/talljoe/talljoe.c @@ -1,13 +1,16 @@ #include QMK_KEYBOARD_H #include "talljoe.h" +#ifdef ZEAL_RGB +#include "../../../keyboards/zeal60/rgb_backlight.h" +#endif const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = TEMPLATE_TKL( KC_ESC, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, MO_ADJ , US_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 , US_BSLS, KC_INS , KC_HOME, KC_PGUP, US_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_END , KC_PGDN, - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G , KC_H, KC_J, KC_K, KC_L, US_SCLN, US_QUOT, US_ENT , + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G , KC_H, KC_J, KC_K, KC_L, US_SCLN, KC_QUOT, US_ENT , SH_LBRC, KC_Z, KC_X, KC_C, KC_V, KC_B , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SH_RBRC, KC_UP , KC_LCTL, KC_LGUI, KC_LALT, KC_SPC2, KC_SPC1, KC_SPC3, KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT), [_WORKMAN] = TEMPLATE( @@ -52,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_PTT , KC_PGDN, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_APP , KC_RCTL, KC_PTT ), #endif [_NAV] = TEMPLATE_NAV( - KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + 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 , XXXXXXX, XXXXXXX, US_TAB , KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_INS , KC_PGUP, KC_UP , KC_PGDN, KC_BTN1, KC_BTN3, KC_BTN2, KC_DEL , CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , US_QUOT, TG_ADJ , KC_LSFT, KC_EQL, KC_PLUS, KC_MINS, KC_UNDS, KC_ASTR, KC_CALC, US_GRV , KC_WBAK, KC_WFWD, KC_WREF, KC_RSFT, KC_APP , @@ -65,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI, KC_LALT, NM_SPC2, NM_SPC1, NM_SPC3, KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ), // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards) [_ADJUST] = TEMPLATE_ADJUST( - MO_RST , FX(1) , FX(2) , FX(3) , FX(4) , FX(5) , FX(8) , FX(9) , FX(10) , FX(20) , FX(0) , BR_DEC , BR_INC , XXXXXXX, MO_RST , + MO_RST , FX(1) , FX(2) , FX(3) , FX(4) , FX(5) , FX(6) , FX(7) , FX(8) , FX(9) , FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST , MO_RST , H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, MO_RST , XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G, TG_ADJ , TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE, KC_CAPS, XXXXXXX, @@ -101,7 +104,11 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } +#ifdef ZEAL_RGB +extern backlight_config g_config; +#endif bool process_record_user(uint16_t keycode, keyrecord_t *record) { + static uint8_t last_effect; #ifdef RGBLIGHT_ENABLE static uint32_t savedRgbMode; @@ -144,6 +151,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; +#ifdef ZEAL_RGB + case BL_TOGG: + if (IS_PRESSED(record->event)) { + if (g_config.effect) { + last_effect = g_config.effect; + g_config.effect = 0; + } else { + g_config.effect = last_effect; + } + } + return false; + case EFFECT...EFFECT_END: + if (IS_PRESSED(record->event)) { + uint8_t effect = keycode - EFFECT; + if(effect == g_config.effect) + effect = 0; // Toggle effect on second press + g_config.effect = effect; + backlight_config_save(); + } + return false; +#endif } return process_record_keymap(keycode, record); } From 87f06e7297c10020912beaba10013f11d2e8e570 Mon Sep 17 00:00:00 2001 From: yiancar Date: Wed, 21 Nov 2018 15:12:40 -0800 Subject: [PATCH 0119/1763] Fix raw hid define for chibios (#4460) --- tmk_core/protocol/chibios/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index 6cceccd23c..ee9571c950 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -75,7 +75,7 @@ host_driver_t chibios_driver = { void virtser_task(void); #endif -#ifdef RAW_HID_ENABLE +#ifdef RAW_ENABLE void raw_hid_task(void); #endif @@ -220,7 +220,7 @@ int main(void) { #ifdef VIRTSER_ENABLE virtser_task(); #endif -#ifdef RAW_HID_ENABLE +#ifdef RAW_ENABLE raw_hid_task(); #endif } From 2943d19ecd9f91db2390da6f6d09cf58ea2f8dde Mon Sep 17 00:00:00 2001 From: Milton Griffin Date: Thu, 22 Nov 2018 13:15:46 -0500 Subject: [PATCH 0120/1763] Keymap: Clone layout for Massdrop's xd75 (#4461) * Added default75. No lighting. * Added default75. No lighting. * Update keyboards/idobo/keymaps/default75/config.h Co-Authored-By: griffinmilton3 * Update keyboards/idobo/keymaps/default75/config.h Co-Authored-By: griffinmilton3 * Update keyboards/idobo/keymaps/default75/config.h Co-Authored-By: griffinmilton3 * Update keyboards/idobo/keymaps/default75/config.h Co-Authored-By: griffinmilton3 * Fixes for pull request * Updated keyboard declartion structure --- keyboards/idobo/keymaps/default75/config.h | 21 +++++++ keyboards/idobo/keymaps/default75/keymap.c | 67 +++++++++++++++++++++ keyboards/idobo/keymaps/default75/readme.md | 1 + keyboards/idobo/keymaps/default75/rules.mk | 14 +++++ 4 files changed, 103 insertions(+) create mode 100644 keyboards/idobo/keymaps/default75/config.h create mode 100644 keyboards/idobo/keymaps/default75/keymap.c create mode 100644 keyboards/idobo/keymaps/default75/readme.md create mode 100644 keyboards/idobo/keymaps/default75/rules.mk diff --git a/keyboards/idobo/keymaps/default75/config.h b/keyboards/idobo/keymaps/default75/config.h new file mode 100644 index 0000000000..17c7addb38 --- /dev/null +++ b/keyboards/idobo/keymaps/default75/config.h @@ -0,0 +1,21 @@ +/* Copyright 2017 Benjamin Kesselring + * + * 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 . + */ + +#pragma once + + +// place overrides here + diff --git a/keyboards/idobo/keymaps/default75/keymap.c b/keyboards/idobo/keymaps/default75/keymap.c new file mode 100644 index 0000000000..d607e11f66 --- /dev/null +++ b/keyboards/idobo/keymaps/default75/keymap.c @@ -0,0 +1,67 @@ +/* Copyright 2018 Milton Griffin + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Keyboard Layers +#define _QW 0 +#define _FN 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | E | R | T | [ | \ | ] | Y | U | I | O | P | ' | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------| + * | CAP LK | A | S | D | F | G | HOME | DEL | PG UP | H | J | K | L | ; | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------| + * | LSHIFT | Z | X | C | V | B | END | UP | PG DN | N | M | , | . | / | RSHIFT | + * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------| + * | LCTRL | LGUI | LALT | FN | SPACE | SPACE | LEFT | DOWN | RIGHT | SPACE | SPACE | FN | RALT | RGUI | RCTRL | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_QW] = LAYOUT_ortho_5x15( /* QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_UP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_RGUI, KC_RCTL \ + ), + +/* FUNCTION + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | NUM LK | P/ | P* | F7 | F8 | F9 | F10 | F11 | F12 | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | SELECT | CALC | MYCOMP | MAIL | RGB HD | RGB HI | P7 | P8 | P9 | - | | | PR SCR | SCR LK | PAUSE | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | PREV | PLAY | NEXT | STOP | RGB SD | RGB SI | P4 | P5 | P6 | + | | RESET | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | VOL- | MUTE | VOL+ | APP | RGB VD | RGB VI | P1 | P2 | P3 | PENT | | | | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | | | RGB TG | FN | RGB RMD| RGB MD | P0 | | P. | PENT | PENT | FN | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_FN] = LAYOUT_ortho_5x15( /* FUNCTION */ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NLCK, KC_SLSH, KC_ASTR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_MSEL, KC_CALC, KC_MYCM, KC_MAIL, RGB_HUD, RGB_HUI, KC_P7, KC_P8, KC_P9, KC_MINS, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, RGB_SAD, RGB_SAI, KC_P4, KC_P5, KC_P6, KC_PLUS, _______, RESET, _______, _______, _______, \ + KC_VOLD, KC_MUTE, KC_VOLU, KC_APP, RGB_VAD, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, \ + _______, _______, RGB_TOG, MO(_FN), RGB_RMOD,RGB_MOD, KC_P0, _______, KC_PDOT, KC_PENT, KC_PENT, MO(_FN), _______, _______, _______ \ + ), +}; diff --git a/keyboards/idobo/keymaps/default75/readme.md b/keyboards/idobo/keymaps/default75/readme.md new file mode 100644 index 0000000000..a1c0236ed9 --- /dev/null +++ b/keyboards/idobo/keymaps/default75/readme.md @@ -0,0 +1 @@ +# The default keymap for xd75, with led controls \ No newline at end of file diff --git a/keyboards/idobo/keymaps/default75/rules.mk b/keyboards/idobo/keymaps/default75/rules.mk new file mode 100644 index 0000000000..7efceba50a --- /dev/null +++ b/keyboards/idobo/keymaps/default75/rules.mk @@ -0,0 +1,14 @@ +# Copyright 2013 Jun Wako +# +# 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 . From 3dd6d53942bd3fafb57d170ecdaccf57e459a62c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 22 Nov 2018 21:53:01 +0100 Subject: [PATCH 0121/1763] ergodox: update algernon's layout to v1.12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the final version of my layout. Overall changes =============== * Updated to work with QMK master. Miscellaneous ============= * The `😂` symbol can be entered with UCIS. * `LEAD r` now inputs `Right Alt`. Signed-off-by: Gergely Nagy --- layouts/community/ergodox/algernon/NEWS.md | 13 +++++++++++++ .../ergodox/algernon/images/adore-layer.png | Bin 0 -> 105611 bytes .../ergodox/algernon/images/base-layer.png | Bin 0 -> 106956 bytes .../ergodox/algernon/images/heatmap.png | Bin 0 -> 139351 bytes .../ergodox/algernon/images/steno-layer.png | Bin 0 -> 64086 bytes layouts/community/ergodox/algernon/keymap.c | 8 +++++++- layouts/community/ergodox/algernon/readme.md | 12 +++++++++--- layouts/community/ergodox/algernon/rules.mk | 3 ++- 8 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 layouts/community/ergodox/algernon/images/adore-layer.png create mode 100644 layouts/community/ergodox/algernon/images/base-layer.png create mode 100644 layouts/community/ergodox/algernon/images/heatmap.png create mode 100644 layouts/community/ergodox/algernon/images/steno-layer.png diff --git a/layouts/community/ergodox/algernon/NEWS.md b/layouts/community/ergodox/algernon/NEWS.md index 1bc2b5dc6a..a6ce9813ba 100644 --- a/layouts/community/ergodox/algernon/NEWS.md +++ b/layouts/community/ergodox/algernon/NEWS.md @@ -1,5 +1,18 @@ +## v1.12 + +*2018-11-22* + +### Overall changes + +* Updated to work with QMK master. + +### Miscellaneous + +* The `😂` symbol can be entered with UCIS. +* `LEAD r` now inputs `Right Alt`. + ## v1.11 *2017-10-01* diff --git a/layouts/community/ergodox/algernon/images/adore-layer.png b/layouts/community/ergodox/algernon/images/adore-layer.png new file mode 100644 index 0000000000000000000000000000000000000000..75d2ca4f08b23b8233b298b0a30cb62b4072f0a3 GIT binary patch literal 105611 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

p<8JqN28pH2mC;gjx$8M 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�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 Lf>^DHLD2sPg=7|Q literal 0 HcmV?d00001 diff --git a/layouts/community/ergodox/algernon/images/base-layer.png b/layouts/community/ergodox/algernon/images/base-layer.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca7a273bed32e630522ed70618a930037537029 GIT binary patch literal 106956 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

xqo?w3DlN6!_qw#HiY181nm>q#U@mnY&IM#Z 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μ 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 b_teo#A$ozE$1_6VotDnm{r-UW|3c5md literal 0 HcmV?d00001 diff --git a/layouts/community/ergodox/algernon/images/heatmap.png b/layouts/community/ergodox/algernon/images/heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..4f55c5adff5703a3b61ac5198694375ad49a405b GIT binary patch literal 139351 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%0D`~mx$kQG~ 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 EiAZ?2R`sI*BO+iJbgi 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�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 Z|BMfpRh#Y%&J|?<0#8>zmvv4FO#mw&Ym)!~ literal 0 HcmV?d00001 diff --git a/layouts/community/ergodox/algernon/images/steno-layer.png b/layouts/community/ergodox/algernon/images/steno-layer.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2ba55effaa0b96f9bf9d31b81f3c2101c93ab9 GIT binary patch literal 64086 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