Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
This commit is contained in:
commit
73d6018296
|
@ -26,4 +26,3 @@ ENV keymap=default
|
|||
|
||||
VOLUME /qmk
|
||||
WORKDIR /qmk
|
||||
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
|
||||
|
|
|
@ -131,6 +131,14 @@ ifndef CUSTOM_MATRIX
|
|||
SRC += $(QUANTUM_DIR)/matrix.c
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
|
||||
OPT_DEFS += -DAPI_SYSEX_ENABLE
|
||||
SRC += $(QUANTUM_DIR)/api/api_sysex.c
|
||||
OPT_DEFS += -DAPI_ENABLE
|
||||
SRC += $(QUANTUM_DIR)/api.c
|
||||
MIDI_ENABLE=yes
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(MIDI_ENABLE)), yes)
|
||||
OPT_DEFS += -DMIDI_ENABLE
|
||||
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
|
||||
|
@ -174,6 +182,12 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
|
|||
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PRINTING_ENABLE)), yes)
|
||||
OPT_DEFS += -DPRINTING_ENABLE
|
||||
SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
|
||||
SRC += $(TMK_DIR)/protocol/serial_uart.c
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
||||
SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||
OPT_DEFS += $(SERIAL_DEFS)
|
||||
|
@ -199,6 +213,7 @@ endif
|
|||
VPATH += $(KEYBOARD_PATH)
|
||||
VPATH += $(COMMON_VPATH)
|
||||
|
||||
include $(TMK_PATH)/protocol.mk
|
||||
|
||||
include $(TMK_PATH)/common.mk
|
||||
SRC += $(TMK_COMMON_SRC)
|
||||
|
|
|
@ -23,4 +23,5 @@ COMMON_VPATH += $(QUANTUM_PATH)
|
|||
COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/audio
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
|
||||
COMMON_VPATH += $(QUANTUM_PATH)/api
|
||||
COMMON_VPATH += $(SERIAL_PATH)
|
|
@ -67,7 +67,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/
|
||||
|
||||
#define RGB_DI_PIN E2
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
ifndef MAKEFILE_INCLUDED
|
||||
include ../../Makefile
|
||||
endif
|
|
@ -0,0 +1 @@
|
|||
#include "atreus62.h"
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef ATREUS62_H
|
||||
#define ATREUS62_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
void promicro_bootloader_jmp(bool program);
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \
|
||||
{ k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \
|
||||
{ k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6062
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Profet
|
||||
#define PRODUCT Atreus62
|
||||
#define DESCRIPTION q.m.k. keyboard firmware for Atreus62
|
||||
|
||||
/* key matrix size */
|
||||
// Rows are doubled-up
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 13
|
||||
|
||||
// wiring of each half
|
||||
#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 }
|
||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, C6 }
|
||||
|
||||
#define CATERINA_BOOTLOADER
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
|
||||
/* 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)) \
|
||||
)
|
||||
|
||||
/*
|
||||
* 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
|
|
@ -0,0 +1,71 @@
|
|||
// this is the style you want to emulate.
|
||||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
|
||||
#include "atreus62.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 _DEFAULT 0
|
||||
#define _NAV 1
|
||||
#define _RESET 2
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_DEFAULT] = { /* qwerty */
|
||||
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS },
|
||||
{ KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC },
|
||||
{ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, 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_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LBRC },
|
||||
{ KC_LCTL, KC_LGUI, KC_LALT, KC_GRV, MO(_NAV),KC_BSPC, KC_ENT, KC_SPC, KC_EQL, KC_MINS, KC_QUOT, KC_ENT, KC_RGUI }
|
||||
},
|
||||
|
||||
[_NAV] = {
|
||||
{ TO(_DEFAULT), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 },
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, 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_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS },
|
||||
{ TO(_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 }
|
||||
},
|
||||
|
||||
[_RESET] = {
|
||||
{ TO(_DEFAULT), 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_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 , RESET }
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
[_TRNS] = {
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
|
||||
{ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
|
||||
},
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
||||
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;
|
||||
};
|
|
@ -0,0 +1,362 @@
|
|||
/*
|
||||
pins_arduino.h - Pin definition functions for Arduino
|
||||
Part of Arduino - http://www.arduino.cc/
|
||||
|
||||
Copyright (c) 2007 David A. Mellis
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General
|
||||
Public License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
Boston, MA 02111-1307 USA
|
||||
|
||||
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
|
||||
*/
|
||||
|
||||
#ifndef Pins_Arduino_h
|
||||
#define Pins_Arduino_h
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
// Workaround for wrong definitions in "iom32u4.h".
|
||||
// This should be fixed in the AVR toolchain.
|
||||
#undef UHCON
|
||||
#undef UHINT
|
||||
#undef UHIEN
|
||||
#undef UHADDR
|
||||
#undef UHFNUM
|
||||
#undef UHFNUML
|
||||
#undef UHFNUMH
|
||||
#undef UHFLEN
|
||||
#undef UPINRQX
|
||||
#undef UPINTX
|
||||
#undef UPNUM
|
||||
#undef UPRST
|
||||
#undef UPCONX
|
||||
#undef UPCFG0X
|
||||
#undef UPCFG1X
|
||||
#undef UPSTAX
|
||||
#undef UPCFG2X
|
||||
#undef UPIENX
|
||||
#undef UPDATX
|
||||
#undef TCCR2A
|
||||
#undef WGM20
|
||||
#undef WGM21
|
||||
#undef COM2B0
|
||||
#undef COM2B1
|
||||
#undef COM2A0
|
||||
#undef COM2A1
|
||||
#undef TCCR2B
|
||||
#undef CS20
|
||||
#undef CS21
|
||||
#undef CS22
|
||||
#undef WGM22
|
||||
#undef FOC2B
|
||||
#undef FOC2A
|
||||
#undef TCNT2
|
||||
#undef TCNT2_0
|
||||
#undef TCNT2_1
|
||||
#undef TCNT2_2
|
||||
#undef TCNT2_3
|
||||
#undef TCNT2_4
|
||||
#undef TCNT2_5
|
||||
#undef TCNT2_6
|
||||
#undef TCNT2_7
|
||||
#undef OCR2A
|
||||
#undef OCR2_0
|
||||
#undef OCR2_1
|
||||
#undef OCR2_2
|
||||
#undef OCR2_3
|
||||
#undef OCR2_4
|
||||
#undef OCR2_5
|
||||
#undef OCR2_6
|
||||
#undef OCR2_7
|
||||
#undef OCR2B
|
||||
#undef OCR2_0
|
||||
#undef OCR2_1
|
||||
#undef OCR2_2
|
||||
#undef OCR2_3
|
||||
#undef OCR2_4
|
||||
#undef OCR2_5
|
||||
#undef OCR2_6
|
||||
#undef OCR2_7
|
||||
|
||||
#define NUM_DIGITAL_PINS 30
|
||||
#define NUM_ANALOG_INPUTS 12
|
||||
|
||||
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
|
||||
#define TXLED0 PORTD |= (1<<5)
|
||||
#define TXLED1 PORTD &= ~(1<<5)
|
||||
#define RXLED0 PORTB |= (1<<0)
|
||||
#define RXLED1 PORTB &= ~(1<<0)
|
||||
|
||||
static const uint8_t SDA = 2;
|
||||
static const uint8_t SCL = 3;
|
||||
#define LED_BUILTIN 13
|
||||
|
||||
// Map SPI port to 'new' pins D14..D17
|
||||
static const uint8_t SS = 17;
|
||||
static const uint8_t MOSI = 16;
|
||||
static const uint8_t MISO = 14;
|
||||
static const uint8_t SCK = 15;
|
||||
|
||||
// Mapping of analog pins as digital I/O
|
||||
// A6-A11 share with digital pins
|
||||
static const uint8_t ADC0 = 18;
|
||||
static const uint8_t ADC1 = 19;
|
||||
static const uint8_t ADC2 = 20;
|
||||
static const uint8_t ADC3 = 21;
|
||||
static const uint8_t ADC4 = 22;
|
||||
static const uint8_t ADC5 = 23;
|
||||
static const uint8_t ADC6 = 24; // D4
|
||||
static const uint8_t ADC7 = 25; // D6
|
||||
static const uint8_t ADC8 = 26; // D8
|
||||
static const uint8_t ADC9 = 27; // D9
|
||||
static const uint8_t ADC10 = 28; // D10
|
||||
static const uint8_t ADC11 = 29; // D12
|
||||
|
||||
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
|
||||
#define digitalPinToPCICRbit(p) 0
|
||||
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
|
||||
#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
|
||||
|
||||
// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
|
||||
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
|
||||
#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
|
||||
|
||||
#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
|
||||
|
||||
#ifdef ARDUINO_MAIN
|
||||
|
||||
// On the Arduino board, digital pins are also used
|
||||
// for the analog output (software PWM). Analog input
|
||||
// pins are a separate set.
|
||||
|
||||
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
|
||||
//
|
||||
// D0 PD2 RXD1/INT2
|
||||
// D1 PD3 TXD1/INT3
|
||||
// D2 PD1 SDA SDA/INT1
|
||||
// D3# PD0 PWM8/SCL OC0B/SCL/INT0
|
||||
// D4 A6 PD4 ADC8
|
||||
// D5# PC6 ??? OC3A/#OC4A
|
||||
// D6# A7 PD7 FastPWM #OC4D/ADC10
|
||||
// D7 PE6 INT6/AIN0
|
||||
//
|
||||
// D8 A8 PB4 ADC11/PCINT4
|
||||
// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
|
||||
// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
|
||||
// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
|
||||
// D12 A11 PD6 T1/#OC4D/ADC9
|
||||
// D13# PC7 PWM10 CLK0/OC4A
|
||||
//
|
||||
// A0 D18 PF7 ADC7
|
||||
// A1 D19 PF6 ADC6
|
||||
// A2 D20 PF5 ADC5
|
||||
// A3 D21 PF4 ADC4
|
||||
// A4 D22 PF1 ADC1
|
||||
// A5 D23 PF0 ADC0
|
||||
//
|
||||
// New pins D14..D17 to map SPI port to digital pins
|
||||
//
|
||||
// MISO D14 PB3 MISO,PCINT3
|
||||
// SCK D15 PB1 SCK,PCINT1
|
||||
// MOSI D16 PB2 MOSI,PCINT2
|
||||
// SS D17 PB0 RXLED,SS/PCINT0
|
||||
//
|
||||
// Connected LEDs on board for TX and RX
|
||||
// TXLED D24 PD5 XCK1
|
||||
// RXLED D17 PB0
|
||||
// HWB PE2 HWB
|
||||
|
||||
// these arrays map port names (e.g. port B) to the
|
||||
// appropriate addresses for various functions (e.g. reading
|
||||
// and writing)
|
||||
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
||||
NOT_A_PORT,
|
||||
NOT_A_PORT,
|
||||
(uint16_t) &DDRB,
|
||||
(uint16_t) &DDRC,
|
||||
(uint16_t) &DDRD,
|
||||
(uint16_t) &DDRE,
|
||||
(uint16_t) &DDRF,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM port_to_output_PGM[] = {
|
||||
NOT_A_PORT,
|
||||
NOT_A_PORT,
|
||||
(uint16_t) &PORTB,
|
||||
(uint16_t) &PORTC,
|
||||
(uint16_t) &PORTD,
|
||||
(uint16_t) &PORTE,
|
||||
(uint16_t) &PORTF,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM port_to_input_PGM[] = {
|
||||
NOT_A_PORT,
|
||||
NOT_A_PORT,
|
||||
(uint16_t) &PINB,
|
||||
(uint16_t) &PINC,
|
||||
(uint16_t) &PIND,
|
||||
(uint16_t) &PINE,
|
||||
(uint16_t) &PINF,
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
|
||||
PD, // D0 - PD2
|
||||
PD, // D1 - PD3
|
||||
PD, // D2 - PD1
|
||||
PD, // D3 - PD0
|
||||
PD, // D4 - PD4
|
||||
PC, // D5 - PC6
|
||||
PD, // D6 - PD7
|
||||
PE, // D7 - PE6
|
||||
|
||||
PB, // D8 - PB4
|
||||
PB, // D9 - PB5
|
||||
PB, // D10 - PB6
|
||||
PB, // D11 - PB7
|
||||
PD, // D12 - PD6
|
||||
PC, // D13 - PC7
|
||||
|
||||
PB, // D14 - MISO - PB3
|
||||
PB, // D15 - SCK - PB1
|
||||
PB, // D16 - MOSI - PB2
|
||||
PB, // D17 - SS - PB0
|
||||
|
||||
PF, // D18 - A0 - PF7
|
||||
PF, // D19 - A1 - PF6
|
||||
PF, // D20 - A2 - PF5
|
||||
PF, // D21 - A3 - PF4
|
||||
PF, // D22 - A4 - PF1
|
||||
PF, // D23 - A5 - PF0
|
||||
|
||||
PD, // D24 - PD5
|
||||
PD, // D25 / D6 - A7 - PD7
|
||||
PB, // D26 / D8 - A8 - PB4
|
||||
PB, // D27 / D9 - A9 - PB5
|
||||
PB, // D28 / D10 - A10 - PB6
|
||||
PD, // D29 / D12 - A11 - PD6
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
|
||||
_BV(2), // D0 - PD2
|
||||
_BV(3), // D1 - PD3
|
||||
_BV(1), // D2 - PD1
|
||||
_BV(0), // D3 - PD0
|
||||
_BV(4), // D4 - PD4
|
||||
_BV(6), // D5 - PC6
|
||||
_BV(7), // D6 - PD7
|
||||
_BV(6), // D7 - PE6
|
||||
|
||||
_BV(4), // D8 - PB4
|
||||
_BV(5), // D9 - PB5
|
||||
_BV(6), // D10 - PB6
|
||||
_BV(7), // D11 - PB7
|
||||
_BV(6), // D12 - PD6
|
||||
_BV(7), // D13 - PC7
|
||||
|
||||
_BV(3), // D14 - MISO - PB3
|
||||
_BV(1), // D15 - SCK - PB1
|
||||
_BV(2), // D16 - MOSI - PB2
|
||||
_BV(0), // D17 - SS - PB0
|
||||
|
||||
_BV(7), // D18 - A0 - PF7
|
||||
_BV(6), // D19 - A1 - PF6
|
||||
_BV(5), // D20 - A2 - PF5
|
||||
_BV(4), // D21 - A3 - PF4
|
||||
_BV(1), // D22 - A4 - PF1
|
||||
_BV(0), // D23 - A5 - PF0
|
||||
|
||||
_BV(5), // D24 - PD5
|
||||
_BV(7), // D25 / D6 - A7 - PD7
|
||||
_BV(4), // D26 / D8 - A8 - PB4
|
||||
_BV(5), // D27 / D9 - A9 - PB5
|
||||
_BV(6), // D28 / D10 - A10 - PB6
|
||||
_BV(6), // D29 / D12 - A11 - PD6
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
TIMER0B, /* 3 */
|
||||
NOT_ON_TIMER,
|
||||
TIMER3A, /* 5 */
|
||||
TIMER4D, /* 6 */
|
||||
NOT_ON_TIMER,
|
||||
|
||||
NOT_ON_TIMER,
|
||||
TIMER1A, /* 9 */
|
||||
TIMER1B, /* 10 */
|
||||
TIMER0A, /* 11 */
|
||||
|
||||
NOT_ON_TIMER,
|
||||
TIMER4A, /* 13 */
|
||||
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
|
||||
7, // A0 PF7 ADC7
|
||||
6, // A1 PF6 ADC6
|
||||
5, // A2 PF5 ADC5
|
||||
4, // A3 PF4 ADC4
|
||||
1, // A4 PF1 ADC1
|
||||
0, // A5 PF0 ADC0
|
||||
8, // A6 D4 PD4 ADC8
|
||||
10, // A7 D6 PD7 ADC10
|
||||
11, // A8 D8 PB4 ADC11
|
||||
12, // A9 D9 PB5 ADC12
|
||||
13, // A10 D10 PB6 ADC13
|
||||
9 // A11 D12 PD6 ADC9
|
||||
};
|
||||
|
||||
#endif /* ARDUINO_MAIN */
|
||||
|
||||
// These serial port names are intended to allow libraries and architecture-neutral
|
||||
// sketches to automatically default to the correct port name for a particular type
|
||||
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
|
||||
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
|
||||
//
|
||||
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
|
||||
//
|
||||
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
|
||||
//
|
||||
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
|
||||
//
|
||||
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
|
||||
//
|
||||
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
|
||||
// pins are NOT connected to anything by default.
|
||||
#define SERIAL_PORT_MONITOR Serial
|
||||
#define SERIAL_PORT_USBVIRTUAL Serial
|
||||
#define SERIAL_PORT_HARDWARE Serial1
|
||||
#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
||||
|
||||
#endif /* Pins_Arduino_h */
|
|
@ -0,0 +1,10 @@
|
|||
atreus62 keyboard firmware
|
||||
======================
|
||||
|
||||
This firmware is for the atreus62 keyboard.
|
||||
|
||||
This version utilizes a Pro Micro for its controller and has a 62 key layout.
|
||||
|
||||
https://github.com/profet23/atreus62
|
||||
|
||||
TODO: More information
|
|
@ -0,0 +1,66 @@
|
|||
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||
NKRO_ENABLE ?= 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
|
||||
UNICODE_ENABLE ?= yes # Unicode
|
||||
#BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
|
@ -26,7 +26,7 @@
|
|||
/* Underlight configuration
|
||||
*/
|
||||
#define RGB_DI_PIN B2
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 14 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
/* Underlight configuration
|
||||
*/
|
||||
#define RGB_DI_PIN D7
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 14 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -140,7 +140,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/* Underlight configuration
|
||||
*/
|
||||
#define RGB_DI_PIN E6
|
||||
//#define RGBLIGHT_TIMER
|
||||
//#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 4 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
|
||||
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
|
||||
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2
|
||||
|
|
|
@ -70,7 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/* Underlight configuration
|
||||
*/
|
||||
#define RGB_DI_PIN F6
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 4 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
|
||||
#define KEYBOARDS_ERGODOX_CONFIG_H_
|
||||
|
||||
#define MOUSEKEY_DELAY 100
|
||||
#define MOUSEKEY_INTERVAL 20
|
||||
#define MOUSEKEY_MAX_SPEED 3
|
||||
#define MOUSEKEY_TIME_TO_MAX 10
|
||||
#define MOUSEKEY_DELAY 0
|
||||
#define MOUSEKEY_TIME_TO_MAX 5
|
||||
#define MOUSEKEY_MAX_SPEED 2
|
||||
#define MOUSEKEY_WHEEL_DELAY 0
|
||||
|
||||
#define TAPPING_TOGGLE 1
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
RGBLIGHT_ENABLE ?= yes
|
||||
MIDI_ENABLE ?= yes
|
||||
|
||||
ifndef MAKEFILE_INCLUDED
|
||||
include ../../../Makefile
|
||||
endif
|
|
@ -21,6 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
#include "../config.h"
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x1307
|
||||
|
@ -39,6 +41,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define LED_BRIGHTNESS_LO 15
|
||||
#define LED_BRIGHTNESS_HI 255
|
||||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D7
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 15 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 12
|
||||
#define RGBLIGHT_SAT_STEP 255
|
||||
#define RGBLIGHT_VAL_STEP 12
|
||||
|
||||
#define RGB_MIDI
|
||||
#define RGBW_BB_TWI
|
||||
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
|
|
@ -16,10 +16,10 @@ void matrix_init_kb(void) {
|
|||
// unused pins - C7, D4, D5, D7, E6
|
||||
// set as input with internal pull-ip enabled
|
||||
DDRC &= ~(1<<7);
|
||||
DDRD &= ~(1<<7 | 1<<5 | 1<<4);
|
||||
DDRD &= ~(1<<5 | 1<<4);
|
||||
DDRE &= ~(1<<6);
|
||||
PORTC |= (1<<7);
|
||||
PORTD |= (1<<7 | 1<<5 | 1<<4);
|
||||
PORTD |= (1<<5 | 1<<4);
|
||||
PORTE |= (1<<6);
|
||||
|
||||
ergodox_blink_all_leds();
|
||||
|
@ -51,6 +51,10 @@ uint8_t init_mcp23018(void) {
|
|||
mcp23018_status = 0x20;
|
||||
|
||||
// I2C subsystem
|
||||
|
||||
uint8_t sreg_prev;
|
||||
sreg_prev=SREG;
|
||||
cli();
|
||||
if (i2c_initialized == 0) {
|
||||
i2c_init(); // on pins D(1,0)
|
||||
i2c_initialized++;
|
||||
|
@ -79,6 +83,8 @@ uint8_t init_mcp23018(void) {
|
|||
out:
|
||||
i2c_stop();
|
||||
|
||||
SREG=sreg_prev;
|
||||
|
||||
return mcp23018_status;
|
||||
}
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ void matrix_init(void)
|
|||
matrix_scan_count = 0;
|
||||
#endif
|
||||
|
||||
matrix_init_kb();
|
||||
matrix_init_quantum();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
|
|||
#
|
||||
|
||||
SLEEP_LED_ENABLE = no
|
||||
API_SYSEX_ENABLE ?= yes
|
||||
RGBLIGHT_ENABLE ?= yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../Makefile
|
||||
|
|
|
@ -38,7 +38,6 @@ void init_serial_link_hal(void) {
|
|||
// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
|
||||
// Which will reduce the brightness range
|
||||
#define PRESCALAR_DEFINE 0
|
||||
#ifdef VISUALIZER_ENABLE
|
||||
void lcd_backlight_hal_init(void) {
|
||||
// Setup Backlight
|
||||
SIM->SCGC6 |= SIM_SCGC6_FTM0;
|
||||
|
@ -76,7 +75,6 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
|
|||
CHANNEL_GREEN.CnV = g;
|
||||
CHANNEL_BLUE.CnV = b;
|
||||
}
|
||||
#endif
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_user(void) {
|
||||
|
@ -92,6 +90,10 @@ void matrix_init_kb(void) {
|
|||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_user();
|
||||
// The backlight always has to be initialized, otherwise it will stay lit
|
||||
#ifndef VISUALIZER_ENABLE
|
||||
lcd_backlight_hal_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
|
|
|
@ -21,29 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
|
||||
void led_set(uint8_t usb_led) {
|
||||
// The LCD backlight functionality conflicts with this simple
|
||||
// red backlight
|
||||
#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE)
|
||||
// PTC1: LCD Backlight Red(0:on/1:off)
|
||||
GPIOC->PDDR |= (1<<1);
|
||||
PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
|
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||
GPIOC->PCOR |= (1<<1);
|
||||
} else {
|
||||
GPIOC->PSOR |= (1<<1);
|
||||
}
|
||||
#elif !defined(LCD_BACKLIGHT_ENABLE)
|
||||
//TODO: Add led emulation if there's no customized visualization
|
||||
(void)usb_led;
|
||||
GPIOC->PDDR |= (1<<1);
|
||||
PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
|
||||
GPIOC->PSOR |= (1<<1);
|
||||
GPIOC->PDDR |= (1<<2);
|
||||
PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
|
||||
GPIOC->PSOR |= (1<<2);
|
||||
GPIOC->PDDR |= (1<<3);
|
||||
PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
|
||||
GPIOC->PSOR |= (1<<3);
|
||||
#else
|
||||
(void)usb_led;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -63,6 +63,8 @@ VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
|
|||
LCD_ENABLE ?= yes
|
||||
LED_ENABLE ?= yes
|
||||
LCD_BACKLIGHT_ENABLE ?= yes
|
||||
MIDI_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../Makefile
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# Having a file like this allows you to override Makefile definitions
|
||||
# for your own particular keymap
|
||||
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
Binary file not shown.
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
@ -1,21 +1,23 @@
|
|||
#include "ergodox.h"
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "keymap_bepo.h"
|
||||
#include "keymap_french.h"
|
||||
|
||||
#define BASE 0 // default layer
|
||||
#define QWER 1 // qwerty compat layer
|
||||
#define SQWER 2 // shifted qwerty compat layer
|
||||
#define AQWER 3 // alted qwerty compat layer
|
||||
#define FNAV 4 // function / navigation keys
|
||||
#define NUM 5 // numeric keypad keys
|
||||
#define MSE 6 // mouse keys
|
||||
// keymaps
|
||||
#define BEPO 0 // default layer, for bepo compatible systems
|
||||
#define QW_B 1 // bepo to qwerty base compat layer, for qwerty systems
|
||||
#define QW_A 2 // bepo with altgr key to qwerty compat layer
|
||||
#define QW_S 3 // bepo with shift key to qwerty compat layer
|
||||
#define AZ_B 4 // bepo to azerty base compat layer, for azerty systems
|
||||
#define AZ_A 5 // bepo with altgr key to azerty compat layer
|
||||
#define AZ_S 6 // bepo with shift key to azerty compat layer
|
||||
#define FNAV 7 // function / navigation / mouse layer
|
||||
#define NUMK 8 // numeric keypad layer
|
||||
|
||||
#define KP_00 0
|
||||
#define CA_Fx 1
|
||||
// macros
|
||||
#define KP_00 0 // keypad "double 0"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Base layer
|
||||
/* Keymap 0: default layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
|
||||
|
@ -26,22 +28,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL|
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* |QWERTY| |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | L_Num| | CA_Fx| | |
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | Space|LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[BASE] = KEYMAP(
|
||||
[BEPO] = KEYMAP(
|
||||
// Left hand
|
||||
BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL,
|
||||
BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC,
|
||||
BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA,
|
||||
BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB,
|
||||
TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_ESC, MO(MSE),
|
||||
MO(NUM),
|
||||
KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
DF(BEPO), DF(QW_B),
|
||||
MO(NUMK),
|
||||
KC_SPC, KC_LSHIFT, MO(FNAV),
|
||||
// Right hand
|
||||
KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL,
|
||||
|
@ -49,10 +51,10 @@ TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
|
|||
BP_C, BP_T, BP_S, BP_R, BP_N, BP_M,
|
||||
KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED,
|
||||
BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_NO, KC_INS,
|
||||
M(CA_Fx),
|
||||
DF(AZ_B), DF(BEPO),
|
||||
MO(NUMK),
|
||||
MO(FNAV), KC_RSHIFT, KC_ENTER),
|
||||
/* Keymap 1: QWERTY system compatibility layer
|
||||
/* Keymap 1: bepo to qwerty base compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
|
||||
|
@ -63,33 +65,70 @@ MO(FNAV), KC_RSHIFT, KC_ENTER),
|
|||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | e | a | y | x | . | k | | | | ' | q | g | h | f | c |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | L_Num| | | | |
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | Space|LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[QWER] = KEYMAP(
|
||||
[QW_B] = KEYMAP(
|
||||
// Left hand
|
||||
KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL,
|
||||
KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC,
|
||||
KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA,
|
||||
KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB,
|
||||
KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_ESC, MO(MSE),
|
||||
MO(NUM),
|
||||
KC_SPC, MO(SQWER), MO(FNAV),
|
||||
KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_SPC, MO(QW_S), KC_TRNS,
|
||||
// Right hand
|
||||
KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL,
|
||||
KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
|
||||
KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
|
||||
KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C,
|
||||
MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_NO, KC_INS,
|
||||
MO(QW_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
MO(FNAV), MO(SQWER), KC_ENTER),
|
||||
/* Keymap 2: QWERTY shifted system compatibility layer
|
||||
KC_TRNS, MO(QW_S), KC_ENTER),
|
||||
/* Keymap 2: bepo with altgr key to qwerty compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z |
|
||||
* |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
|
||||
* | w | a | u | i | € | , |------| |------| c | t | s | r | n | m |
|
||||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | _ |LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[QW_A] = KEYMAP(
|
||||
// Left hand
|
||||
KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL,
|
||||
KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC,
|
||||
KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA,
|
||||
KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB,
|
||||
KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_UNDS, MO(QW_S), KC_TRNS,
|
||||
// Right hand
|
||||
KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL,
|
||||
KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
|
||||
KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
|
||||
KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C,
|
||||
KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, MO(QW_S), KC_ENTER),
|
||||
/* Keymap 3: bepo with shift key to qwerty compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = |
|
||||
|
@ -100,20 +139,20 @@ MO(FNAV), MO(SQWER), KC_ENTER),
|
|||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | L_Num| | | | |
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | Space|LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[SQWER] = KEYMAP(
|
||||
[QW_S] = KEYMAP(
|
||||
// Left hand
|
||||
KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
|
||||
KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS,
|
||||
S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON,
|
||||
S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB),
|
||||
KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
|
||||
S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
|
@ -126,51 +165,125 @@ KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
|
|||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
/* Keymap 3: QWERTY alted system compatibility layer
|
||||
/* Keymap 4: bepo to azerty base compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | % | b |e_acut| p | o |e_grav|Backsp| |CapsLo| ^ | v | d | l | j | z |
|
||||
* |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
|
||||
* | w | a | u | i | e | , |------| |------| c | t | s | r | n | m |
|
||||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | e |a_grav| y | x | . | k | | | | ' | q | g | h | f | c_cedil|
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | Space|LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[AZ_B] = KEYMAP(
|
||||
// Left hand
|
||||
FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LPRN, FR_RPRN, KC_DEL,
|
||||
FR_PERC, KC_B, FR_EACU, KC_P, KC_O, FR_EGRV, KC_BSPC,
|
||||
FR_W, FR_A, KC_U, KC_I, KC_E, FR_COMM,
|
||||
KC_E, FR_AGRV, KC_Y, KC_X, FR_DOT, KC_K, KC_TAB,
|
||||
KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_SPC, MO(AZ_S), KC_TRNS,
|
||||
// Right hand
|
||||
KC_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL,
|
||||
KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z,
|
||||
KC_C, KC_T, KC_S, KC_R, KC_N, FR_M,
|
||||
KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED,
|
||||
MO(AZ_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, MO(AZ_S), KC_ENTER),
|
||||
/* Keymap 5: bepo with altgr key to azerty compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z |
|
||||
* |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
|
||||
* | w | a | u | i | € | , |------| |------| c | t | s | r | n | m |
|
||||
* | w | a |u_grav| trem | € | , |------| |------| c | t | s | r | n | m |
|
||||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
|
||||
* | / | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | L_Num| | | | |
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | _ |LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[AQWER] = KEYMAP(
|
||||
[AZ_A] = KEYMAP(
|
||||
// Left hand
|
||||
KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL,
|
||||
KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC,
|
||||
KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA,
|
||||
KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB,
|
||||
KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_ESC, MO(MSE),
|
||||
MO(NUM),
|
||||
KC_UNDS, MO(SQWER), MO(FNAV),
|
||||
FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LBRC, FR_RBRC, KC_DEL,
|
||||
FR_PERC, FR_PIPE, FR_EACU, FR_AMP, KC_O, FR_EGRV, KC_BSPC,
|
||||
FR_W, FR_A, FR_UGRV, S(KC_LBRC), FR_EURO, FR_COMM,
|
||||
FR_SLSH, FR_BSLS, FR_LCBR, FR_RCBR, FR_DOT, FR_TILD, KC_TAB,
|
||||
KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
FR_UNDS, MO(AZ_S), KC_TRNS,
|
||||
// Right hand
|
||||
KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL,
|
||||
KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
|
||||
KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
|
||||
KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C,
|
||||
KC_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL,
|
||||
KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z,
|
||||
KC_C, KC_T, KC_S, KC_R, KC_N, FR_M,
|
||||
KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED,
|
||||
KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
|
||||
KC_NO, KC_INS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
MO(FNAV), MO(SQWER), KC_ENTER),
|
||||
/* Keymap 4: function / navigation layer
|
||||
KC_TRNS, MO(AZ_S), KC_ENTER),
|
||||
/* Keymap 6: bepo with shift key to azerty compat layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | ° |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | ` | B | E | P | O | E |Backsp| |CapsLo| ! | V | D | L | J | Z |
|
||||
* |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
|
||||
* | W | A | U | I | E | ; |------| |------| C | T | S | R | N | M |
|
||||
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
|
||||
* | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | |L_NumK| |L_NumK| | |
|
||||
* | Space|LShift|------| |------|RShift|Enter |
|
||||
* | | |L_FNav| |L_FNav| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[AZ_S] = KEYMAP(
|
||||
// Left hand
|
||||
FR_HASH, FR_1, FR_2, FR_3, FR_4, FR_5, KC_TRNS,
|
||||
FR_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS,
|
||||
S(FR_W), S(FR_A), S(KC_U), S(KC_I), S(KC_E), FR_SCLN,
|
||||
S(KC_E), S(FR_A), S(KC_Y), S(KC_X), FR_COLN, S(KC_K), S(KC_TAB),
|
||||
S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// Right hand
|
||||
KC_TRNS, FR_6, FR_7, FR_8, FR_9, FR_0, FR_OVRR,
|
||||
KC_TRNS, FR_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(FR_Z),
|
||||
S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(FR_M),
|
||||
KC_TRNS, FR_QUES, S(FR_Q), S(KC_G), S(KC_H), S(KC_F), S(KC_C),
|
||||
S(KC_RALT), S(KC_RCTL), S(KC_RGUI), KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
/* Keymap 7: function / navigation / mouse layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | |
|
||||
* | | Next |LClick| Up |RClick| WhUp |VolDwn| | | PgUp | Home | Up | End | F11 | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | |
|
||||
* | | Prev | Left | Down | Right|WhDown|------| |------| PgDn | Left | Down | Right| F12 | |
|
||||
* |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------|
|
||||
* | | Undo | Cut | Copy | Paste| | | | | | | | | | |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
|
@ -184,12 +297,12 @@ MO(FNAV), MO(SQWER), KC_ENTER),
|
|||
[FNAV] = KEYMAP(
|
||||
// Left hand
|
||||
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_MS_BTN5, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_VOLU,
|
||||
KC_NO, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN,
|
||||
KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD,
|
||||
KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_NO, KC_NO,
|
||||
KC_NO,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_NO, KC_TRNS, KC_TRNS,
|
||||
// Right hand
|
||||
KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO,
|
||||
|
@ -197,91 +310,52 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
|
|||
KC_PGDOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F12, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_NO),
|
||||
/* Keymap 5: numeric layer, sends keypad codes
|
||||
/* Keymap 8: numeric keypad layer, sends keypad codes
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | + | - | / | * | |
|
||||
* | | | | | | | | | | | NumLo| / | * | - | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | 7 | 8 | 9 | | |
|
||||
* | | | | | | | | | | | 7 | 8 | 9 | + | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | |------| |------| | 4 | 5 | 6 | | |
|
||||
* | | | | | | |------| |------| | 4 | 5 | 6 | + | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | 1 | 2 | 3 | | |
|
||||
* | | | | | | | | | | | 1 | 2 | 3 | Enter| |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | | | 0 | 00 | . | | |
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | Enter|
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[NUM] = KEYMAP(
|
||||
// Left hand
|
||||
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_TRNS, KC_TRNS,
|
||||
KC_NO, KC_NO,
|
||||
KC_TRNS,
|
||||
KC_NO, KC_TRNS, KC_NO,
|
||||
// Right hand
|
||||
KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO,
|
||||
KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO,
|
||||
KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO,
|
||||
KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO,
|
||||
KC_NO,
|
||||
KC_NO, KC_TRNS, KC_KP_ENTER),
|
||||
/* Keymap 6: mouse layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | |LClick| Up |RClick| WhUp | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | |------| |------| | Left | Down | Right|WhDown| |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | | 0 | 00 | . | Enter| |
|
||||
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[MSE] = KEYMAP(
|
||||
[NUMK] = KEYMAP(
|
||||
// Left hand
|
||||
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_TRNS, KC_TRNS,
|
||||
KC_NO, KC_TRNS,
|
||||
KC_NO,
|
||||
KC_NO, KC_TRNS, KC_NO,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_NO, KC_TRNS, KC_TRNS,
|
||||
// Right hand
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_NO,
|
||||
KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO,
|
||||
KC_NO,
|
||||
KC_NO, KC_TRNS, KC_NO)
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
KC_NO, KC_NO, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_NO,
|
||||
KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_NO,
|
||||
KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NO,
|
||||
KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_NO,
|
||||
KC_KP_0, M(KP_00), KC_KP_COMMA, KC_KP_ENTER, KC_NO,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_NO)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
switch(id) {
|
||||
// keypad "double 0"
|
||||
case KP_00:
|
||||
if (record->event.pressed) {
|
||||
return MACRO( T(KP_0), D(KP_0), END );
|
||||
|
@ -289,23 +363,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
return MACRO( U(KP_0), END );
|
||||
}
|
||||
break;
|
||||
case CA_Fx:
|
||||
if (record->event.pressed) {
|
||||
layer_on(FNAV);
|
||||
return MACRO( D(LALT), D(LCTL), END );
|
||||
} else {
|
||||
layer_off(FNAV);
|
||||
return MACRO( U(LCTL), U(LALT), END );
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
// 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) {
|
||||
};
|
||||
|
|
|
@ -23,12 +23,12 @@ La touche "Tab" est placée comme sur la TypeMatrix 2020.
|
|||
|
||||
Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO".
|
||||
|
||||
Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long).
|
||||
Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite et d'effectuer des actions souris avec uniquement la main gauche. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long).
|
||||
|
||||
Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0".
|
||||
|
||||
L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle.
|
||||
Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour des accès BIOS ou console en QWERTY.
|
||||
|
||||
TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY.
|
||||
Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier AZERTY. Cette compatibilité n'est pas parfaite (pas de gestion des caractères non présents sur le clavier AZERTY, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour faire du bureau à distance vers un système Windows sans BEPO.
|
||||
|
||||
> Olivier Smedts <olivier@gid0.org>
|
||||
|
|
|
@ -7,7 +7,12 @@
|
|||
#define SYMB 1 // symbols
|
||||
#define MDIA 2 // media keys
|
||||
|
||||
#define EPRM M(1) // Macro 1: Reset EEPROM
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
EPRM,
|
||||
VRSN,
|
||||
RGB_SLD
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
|
@ -17,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
|
||||
* | BkSp | A | S | D | F | G |------| |------| H |J/Alt | K | L |; / L2|' / Cmd |
|
||||
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
|
@ -44,56 +49,56 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
KC_HOME,
|
||||
KC_SPC,KC_BSPC,KC_END,
|
||||
// right hand
|
||||
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
|
||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, ALT_T(KC_J), KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
|
||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||
KC_LALT, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
KC_PGDN,KC_TAB, KC_ENT
|
||||
),
|
||||
/* Keymap 1: Symbol Layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | EPRM | | | | | | | . | 0 | = | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||
* |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | EPRM | | | | | | | . | 0 | = | |
|
||||
* `-----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* |Animat| | |Toggle|Solid |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* |Bright|Bright| | | |Hue- |Hue+ |
|
||||
* |ness- |ness+ |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[SYMB] = KEYMAP(
|
||||
// left hand
|
||||
M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||
EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,
|
||||
RGB_MOD,KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
RGB_VAD,RGB_VAI,KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
RGB_TOG, RGB_SLD,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
KC_TRNS, RGB_HUD, RGB_HUI
|
||||
),
|
||||
/* Keymap 2: Media and mouse keys
|
||||
*
|
||||
|
@ -160,6 +165,33 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case EPRM:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_init();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case VRSN:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
|
|
|
@ -0,0 +1,165 @@
|
|||
#include "ergodox.h"
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
/******************************************************************************************
|
||||
* DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
|
||||
* Layer 1: auxiliary keys
|
||||
* Layer 2: full qwerty layout
|
||||
*****************************************************************************************/
|
||||
|
||||
// LAYERS
|
||||
#define BASE 0 // dvorak layout (default)
|
||||
#define AUX 1 // auxiliary keys
|
||||
|
||||
// MACROS
|
||||
/* #define OBRACE 0 // key { or shift */
|
||||
/* #define CBRACE 1 // key } or shift */
|
||||
/* #define OBRACK 2 // key [ or left alt */
|
||||
/* #define CBRACK 3 // key ] or left alt */
|
||||
/* #define CAPS 4 // caps lock */
|
||||
|
||||
// LEDS
|
||||
#define USB_LED_NUM_LOCK 0
|
||||
#define USB_LED_CAPS_LOCK 1
|
||||
#define USB_LED_SCROLL_LOCK 2
|
||||
#define USB_LED_COMPOSE 3
|
||||
#define USB_LED_KANA 4
|
||||
|
||||
// TIMERS
|
||||
#define KEY_TAP_FAST 85
|
||||
#define KEY_TAP_SLOW 95
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Base layer
|
||||
* Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? |
|
||||
* |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
|
||||
* | Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - / _ |
|
||||
* |--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
|
||||
* | {/LSft |; / : | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | ~L1 | | ~L1 | | | \ / || |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | HOME | END | | LEFT | RIGHT|
|
||||
* ,------|------|------| |------+--------+------.
|
||||
* | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
|
||||
* | / | / |------| |------| / | / |
|
||||
* | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
|
||||
* `--------------------' `----------------------'
|
||||
*
|
||||
*/
|
||||
[BASE] = KEYMAP(
|
||||
// left hand
|
||||
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
|
||||
KC_TILD, KC_QUOTE, KC_COMM,KC_DOT, KC_P, KC_Y, KC_LBRACKET,
|
||||
KC_TAB, KC_A, KC_O, KC_E, SFT_T(KC_U), LT(AUX, KC_I),
|
||||
SFT_T(KC_LBRC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LGUI,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, MO(AUX),
|
||||
KC_HOME, KC_END,
|
||||
KC_PGUP,
|
||||
CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN,
|
||||
// right hand
|
||||
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
|
||||
KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
|
||||
LT(AUX, KC_D), SFT_T(KC_H), KC_T, KC_N, KC_S, KC_MINUS,
|
||||
KC_LGUI, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_RBRC),
|
||||
MO(AUX), KC_NO, KC_NO, KC_BSLASH, KC_NO,
|
||||
KC_LEFT, KC_RIGHT,
|
||||
KC_UP,
|
||||
KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC)
|
||||
),
|
||||
/* Keymap 1: Aux layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | VolUp | | | | | | SLEEP | PWR | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
|
||||
* |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
|
||||
* | TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | TRANS| TRANS| | TRANS| TRANS|
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | TRANS| | TRANS| | |
|
||||
* |TRANS |TRANS |------| |------| TRANS| TRANS|
|
||||
* | | | TRANS| | TRANS| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[AUX] = KEYMAP(
|
||||
// left hand
|
||||
KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLEP,
|
||||
KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_NO,
|
||||
KC_NO , KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
|
||||
KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
|
||||
LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), KC_TRNS,
|
||||
KC_TRNS , KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// right hand
|
||||
KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_NO,
|
||||
KC_TRNS, KC_4, KC_5, KC_6, KC_PPLS, KC_NO,
|
||||
KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS,
|
||||
KC_TRNS,KC_DOT, KC_0, KC_PEQL, KC_NO,
|
||||
KC_TRNS , KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux)
|
||||
};
|
||||
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
# Ergodox Dvorak Layout with emacs binding in mind
|
||||
* Control & Alt key on the thumbs (activated if pressed with another key).
|
||||
* In the same way, "U" and "R" are the shift modifier if pressed with another key.
|
||||
* "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key.
|
||||
* Software layout set to english.
|
||||
|
||||
## Keymap Layers
|
||||
- L0: dvorak with some customizations (see layout below)
|
||||
- L1: auxiliary keys (includes function keys, numpad...)
|
||||
|
||||
|
||||
### Keymap 0: Base layer
|
||||
Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively
|
||||
|
||||
<pre><code>
|
||||
|
||||
,--------------------------------------------------. ,--------------------------------------------------.
|
||||
| | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = |
|
||||
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
| ~ | ' | , | . | P | Y | [ | | ] | F | G | C | H | L | / |
|
||||
|--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
|
||||
| Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - |
|
||||
|--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
|
||||
| {/LSft | ; | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
|
||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
| | | | | ~L1 | | ~L1 | | | \ | |
|
||||
`----------------------------------' `----------------------------------'
|
||||
,-------------. ,-------------.
|
||||
| HOME | END | | LEFT | RIGHT|
|
||||
,------|------|------| |------+--------+------.
|
||||
| BSPC | DEL | PGUP | | UP | SPACE |RETURN|
|
||||
| / | / |------| |------| / | / |
|
||||
| LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
|
||||
`--------------------' `----------------------'
|
||||
|
||||
</pre></code>
|
||||
|
||||
### Keymap 1: Aux layer
|
||||
|
||||
<pre><code>
|
||||
|
||||
,--------------------------------------------------. ,--------------------------------------------------.
|
||||
| VolUp | | | | | | SLEEP | PWR | | | | | | |
|
||||
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
| VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
|
||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
| | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
|
||||
|--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
|
||||
| TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
|
||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
|CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
|
||||
`----------------------------------' `----------------------------------'
|
||||
,-------------. ,-------------.
|
||||
| TRANS| TRANS| | TRANS| TRANS|
|
||||
,------|------|------| |------+------+------.
|
||||
| | | TRANS| | TRANS| | |
|
||||
|TRANS |TRANS |------| |------| TRANS| TRANS|
|
||||
| | | TRANS| | TRANS| | |
|
||||
`--------------------' `--------------------'
|
||||
|
||||
</pre></code>
|
||||
|
||||
|
||||
|
||||
## Generation of .hex file
|
||||
> In the "qmk_firmware/keyboards/ergodox" directory.
|
||||
|
||||
> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware".
|
||||
|
||||
> Flash with `teensy_loader` binary
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
RGBLIGHT_ENABLE ?= yes
|
||||
MIDI_ENABLE ?= yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
|
|
|
@ -9,4 +9,5 @@
|
|||
#undef LEADER_TIMEOUT
|
||||
#define LEADER_TIMEOUT 300
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
#define SYMB 1 // symbols
|
||||
#define MDIA 2 // media keys
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
RGB_FF00BB // always start with RGB_
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
|
@ -65,33 +71,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* | | | |NxtTab|PrvTab| | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* | | | |TOG |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* |VAI |VAD |HUI | |SAI | |MOD |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* | | |HUD | |SAD | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[SYMB] = KEYMAP(
|
||||
// left hand
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
RGB_FF00BB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5,
|
||||
KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
|
||||
KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
RGB_HUI,
|
||||
RGB_VAI,RGB_VAD,RGB_HUD,
|
||||
// right hand
|
||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
|
||||
KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
RGB_TOG, KC_TRNS,
|
||||
RGB_SAI,
|
||||
RGB_SAD, KC_TRNS, RGB_MOD
|
||||
),
|
||||
/* Keymap 2: Media and mouse keys
|
||||
*
|
||||
|
@ -152,6 +158,24 @@ void matrix_init_user(void) {
|
|||
|
||||
};
|
||||
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case RGB_FF00BB:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_setrgb(0xff,0x00,0xbb);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
LEADER_EXTERNS();
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
#include "ergodox.h"
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
|
||||
#define BASE 0 // default layer
|
||||
#define SYMB 1 // symbols
|
||||
#define MDIA 2 // media keys
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | + | 1 | 2 | 3 | 4 | 5 | rclk | | lclk | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | = | Q | W | E | R |cmd/T |shift | |shift |cmd/Y | U | I | O | P | \ |
|
||||
* |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------|
|
||||
* | " | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
|
||||
* |--------+------+------+------+------+------| ctrl | | ctrl |------+------+------+------+------+--------|
|
||||
* | { | Z | X | C | V | B | [ | | ] | N | M | , | . | / | } |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | _ | ` | $ | Left | Right| | Up | Down | : | * | ! |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | < | | | | & | > |
|
||||
* ,------|------|------| |------+--------+------.
|
||||
* | | | # | | @ | | |
|
||||
* | Space|Backsp|------| |------| Tab |Enter |
|
||||
* | |ace | % | | ESC | | |
|
||||
* `--------------------' `----------------------'
|
||||
*/
|
||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||
// Otherwise, it needs KC_*
|
||||
[BASE] = KEYMAP( // layer 0 : default
|
||||
// left hand
|
||||
KC_PLUS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_BTN2,
|
||||
KC_EQL, KC_Q, KC_W, KC_E, KC_R, GUI_T(KC_T), KC_LSPO,
|
||||
KC_DQUO, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LCBR, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_LBRC),
|
||||
KC_UNDS, KC_GRV, KC_DLR, KC_LEFT,KC_RGHT,
|
||||
KC_LABK, KC_PIPE,
|
||||
KC_HASH,
|
||||
KC_SPC, KC_BSPC,KC_PERC,
|
||||
// right hand
|
||||
KC_BTN1, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_RSPC, GUI_T(KC_Y), KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT,
|
||||
CTL_T(KC_RBRC), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RCBR,
|
||||
KC_UP, KC_DOWN,KC_COLN,KC_ASTR, KC_EXLM,
|
||||
KC_AMPR, KC_RABK,
|
||||
KC_AT,
|
||||
KC_ESC, KC_TAB, KC_ENT
|
||||
),
|
||||
/* Keymap 1: Symbol Layer
|
||||
*
|
||||
* ,--------------------------------------------------.
|
||||
* |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | . | 0 | = | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[SYMB] = KEYMAP(
|
||||
// left hand
|
||||
M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
/* Keymap 2: Media and mouse keys
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | | MsUp | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | | Prev | Next | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | |Brwser|
|
||||
* | | |------| |------| |Back |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// MEDIA AND MOUSE
|
||||
[MDIA] = KEYMAP(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_WBAK
|
||||
),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
// TODO: Make this relevant to the ErgoDox EZ.
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
|
@ -0,0 +1,11 @@
|
|||
# Galson keymap
|
||||
|
||||
|
||||
Sep 26, 2016.
|
||||
|
||||
This is an ergonomic layout for programming for those with typing-related injuries. Key features:
|
||||
|
||||
- As many symbol keys as possible are accessible without shifting. These should be accessed by moving the entire hand and pressing with a strong finger.
|
||||
- Arrow keys and left and right mouse clicks for mouse-free navigation when combined with head mouse or eyetracker.
|
||||
- Modifier keys are dual role and relocated to positions convenient for the index finger.
|
||||
- Positions are more convenient when the keyboard is vertically mounted (as it should be!)
|
|
@ -0,0 +1,6 @@
|
|||
RGBLIGHT_ENABLE ?= yes
|
||||
MIDI_ENABLE ?= yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D7
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 15 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 12
|
||||
#define RGBLIGHT_SAT_STEP 255
|
||||
#define RGBLIGHT_VAL_STEP 12
|
||||
|
||||
#define RGB_MIDI
|
||||
#define RGBW_BB_TWI
|
||||
|
||||
#endif
|
|
@ -19,14 +19,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
KC_HOME,
|
||||
KC_SPC,KC_SPC,KC_END,
|
||||
// right hand
|
||||
KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
|
||||
KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_NO, M(1), KC_7, KC_8, KC_9, KC_0, KC_NO,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_P, KC_BSPC,
|
||||
RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_SCLN, KC_QUOT,
|
||||
KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT,
|
||||
MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,
|
||||
KC_NO, KC_NO,
|
||||
KC_PGUP,
|
||||
KC_PGDN, KC_SPC,KC_SPC
|
||||
RGB_TOG, RGB_HUI,
|
||||
RGB_MOD,
|
||||
M(2), KC_SPC,KC_SPC
|
||||
),
|
||||
[SYMB] = KEYMAP(
|
||||
// left hand
|
||||
|
@ -84,6 +84,16 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||
unregister_code(KC_RSFT);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) { // For resetting EEPROM
|
||||
eeconfig_init();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (record->event.pressed) { // For resetting EEPROM
|
||||
api_send_unicode(0x0CA0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
#include "ergodox.h"
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
#include "keymap_fr_ch.h"
|
||||
#include "keymap_french.h"
|
||||
#include "keymap_german.h"
|
||||
#include "keymap_german_ch.h"
|
||||
#include "keymap_nordic.h"
|
||||
#include "keymap_norwegian.h"
|
||||
#include "keymap_spanish.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
|
||||
[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_APOS),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_APOS),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER),
|
||||
|
||||
[1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_TRANSPARENT,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_7,KC_8,KC_9,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_4,KC_5,KC_6,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_0,KC_1,KC_2,KC_3,NO_LBRC,NO_RBRC,KC_LSHIFT,KC_COMMA,KC_DOT,LSFT(NO_LBRC),LSFT(NO_RBRC),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LALT,KC_LGUI,KC_ENTER),
|
||||
|
||||
[2] = KEYMAP(KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_UP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LALT,KC_LGUI,KC_MS_BTN1,KC_MS_BTN2,KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_SPACE,KC_LGUI,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT,KC_TRANSPARENT,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_ESCAPE,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_ACCEL0,KC_MS_ACCEL1),
|
||||
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(1)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case 3:
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 4:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case 5:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 6:
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 7:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
|
@ -0,0 +1,151 @@
|
|||
#include "ergodox.h"
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
RGB_FF0000,
|
||||
RGB_00FF00,
|
||||
RGB_0000FF,
|
||||
RGB_FFFFFF,
|
||||
RGB_TOGGLE,
|
||||
LED1,
|
||||
LED2,
|
||||
LED3
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = KEYMAP(
|
||||
RGB_TOGGLE, RGB_FF0000, RGB_00FF00, RGB_0000FF, RGB_FFFFFF, KC_5, KC_LPRN,
|
||||
KC_GRAVE, KC_A, KC_B, KC_C, KC_D, KC_E, KC_EXLM,
|
||||
KC_HASH, KC_J, KC_K, KC_L, KC_M, KC_N,
|
||||
KC_AMPR, KC_T, KC_U, KC_V, KC_W, KC_X, KC_DLR,
|
||||
KC_PIPE, KC_R, KC_PLUS, KC_LCBR, KC_RCBR,
|
||||
|
||||
KC_F, KC_G,
|
||||
KC_H,
|
||||
KC_P, KC_O, KC_I,
|
||||
|
||||
|
||||
|
||||
// RIGHT HAND
|
||||
KC_RPRN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_AT, KC_F, KC_G, KC_H, KC_I, KC_COLN, KC_BSLS,
|
||||
KC_O, KC_P, KC_Q, KC_R, KC_S, KC_QUOT,
|
||||
LSFT(KC_COMM), KC_Y, KC_Z, KC_COMM, KC_DOT, KC_SLSH, KC_ASTR,
|
||||
KC_A, KC_B, KC_C, KC_D, KC_PIPE,
|
||||
|
||||
LED1, KC_E,
|
||||
LED2,
|
||||
LED3, KC_J, KC_K
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(1)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool status_led1_on = false, status_led2_on = false, status_led3_on = false;
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case RGB_FF0000:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
EZ_RGB(0xff0000);
|
||||
register_code(KC_1); unregister_code(KC_1);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_00FF00:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
EZ_RGB(0x00ff00);
|
||||
register_code(KC_2); unregister_code(KC_2);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_0000FF:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
EZ_RGB(0x0000ff);
|
||||
register_code(KC_3); unregister_code(KC_3);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_FFFFFF:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
EZ_RGB(0xffffff);
|
||||
register_code(KC_4); unregister_code(KC_4);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_TOGGLE:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_toggle();
|
||||
register_code(KC_EQL); unregister_code(KC_EQL);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case LED1:
|
||||
if (record->event.pressed) {
|
||||
if(status_led1_on) {
|
||||
ergodox_right_led_1_off();
|
||||
status_led1_on = false;
|
||||
} else {
|
||||
ergodox_right_led_1_on();
|
||||
status_led1_on = true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case LED2:
|
||||
if (record->event.pressed) {
|
||||
if(status_led2_on) {
|
||||
ergodox_right_led_2_off();
|
||||
status_led2_on = false;
|
||||
} else {
|
||||
ergodox_right_led_2_on();
|
||||
status_led2_on = true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case LED3:
|
||||
if (record->event.pressed) {
|
||||
if(status_led3_on) {
|
||||
ergodox_right_led_3_off();
|
||||
status_led3_on = false;
|
||||
} else {
|
||||
ergodox_right_led_3_on();
|
||||
status_led3_on = true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
# Robot test layout
|
||||
|
||||
Use this layout if you like to pretend you're [Norman](https://www.youtube.com/watch?v=-sbxFBay-tg), the ErgoDox EZ manufacturing robot.
|
||||
|
||||
It's really meant just for internal use, but we're posting it on GitHub anyway, because hurray to open source. :)
|
|
@ -24,6 +24,5 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
|||
CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
|
||||
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
|
||||
MIDI_ENABLE ?= no # MIDI controls
|
||||
UNICODE_ENABLE ?= yes # Unicode
|
||||
ONEHAND_ENABLE ?= yes # Allow swapping hands of keyboard
|
||||
|
|
|
@ -35,40 +35,41 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
|
|||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \
|
||||
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##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, K2C, K2D }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
|
||||
}
|
||||
|
||||
/* ANSI valiant. No extra keys for ISO */
|
||||
/* ANSI variant. No extra keys for ISO */
|
||||
#define KEYMAP_ANSI( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
|
||||
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
|
||||
) KEYMAP( \
|
||||
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, NO, K2D, \
|
||||
K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \
|
||||
K40, K41, K42, K45, NO, 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, KC_NO, K2D }, \
|
||||
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
|
||||
}
|
||||
|
||||
/* HHKB Variant */
|
||||
#define KEYMAP_HHKB( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
|
||||
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 \
|
||||
) KEYMAP( \
|
||||
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, NO, K2D, \
|
||||
K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||
K40, K41, K42, K45, K49, 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, KC_NO, K2D }, \
|
||||
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
|
||||
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,25 +4,25 @@
|
|||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
KEYMAP(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
|
||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \
|
||||
LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, 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_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_CAPS,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT,\
|
||||
KC_LSFT,F(1),KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,F(0),KC_RSFT,\
|
||||
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_BSLS,KC_RALT,KC_RGUI,KC_APP,KC_RCTL),
|
||||
/* 1: fn */
|
||||
KEYMAP(
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,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),
|
||||
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_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_TRNS,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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: arrows */
|
||||
KEYMAP(
|
||||
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,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT),
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
|
|
@ -182,7 +182,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define ws2812_pin PF4
|
||||
*/
|
||||
#define RGB_DI_PIN F4
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
|
|
|
@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
/*
|
||||
* Base layer, pretty standard ANSI layout.
|
||||
* ,-----------------------------------------------------------.
|
||||
* |FN12| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
* |F(12)| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
* |-----------------------------------------------------------|
|
||||
|
@ -22,11 +22,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
[_BL] = KEYMAP(
|
||||
FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \
|
||||
TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \
|
||||
FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT, \
|
||||
LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, NO,RALT,FN0,APP, RCTL),
|
||||
F(12),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, \
|
||||
F(2),KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \
|
||||
KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \
|
||||
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_NO,KC_RALT,F(0),KC_APP,KC_RCTL),
|
||||
|
||||
/*
|
||||
* Locking arrow keys to WASD for when you need dedicated arrow keys
|
||||
|
@ -43,11 +43,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
[_AL] = KEYMAP(
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,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),
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||
|
||||
|
||||
/*
|
||||
|
@ -65,11 +65,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* `-------------------------------------------------------------'
|
||||
*/
|
||||
[_FL] = KEYMAP(
|
||||
GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \
|
||||
TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \
|
||||
TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
|
||||
KC_GRAVE,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_DELETE, \
|
||||
KC_TRNS,F(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \
|
||||
KC_TRNS,KC_MUTE,KC__VOLDOWN,KC__VOLUP,KC_TRNS,KC_TRNS,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,F(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||
|
||||
/*
|
||||
* Locking layer for controlling the underglow.
|
||||
|
@ -87,11 +87,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
[_UL] = KEYMAP(
|
||||
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,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,FN6,FN7,FN8,FN9,FN10,FN11,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
|
||||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||
};
|
||||
|
||||
enum function_id {
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
|
@ -0,0 +1,76 @@
|
|||
#include "gh60.h"
|
||||
#include "action_layer.h"
|
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
KEYMAP_HHKB(
|
||||
F(0),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_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_ENT,\
|
||||
KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,F(1),\
|
||||
KC_LCTL,KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_APP,KC_RCTL),
|
||||
/* 1: fn */
|
||||
KEYMAP_HHKB(
|
||||
KC_GRV,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_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_UP,KC_TRNS,KC_TRNS,\
|
||||
KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RIGHT,KC_PENT,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END,KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS,\
|
||||
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
|
||||
};
|
||||
|
||||
enum function_id {
|
||||
SHIFT_ESC,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
||||
[1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||
};
|
||||
|
||||
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_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
static uint8_t shift_esc_shift_mask;
|
||||
switch (id) {
|
||||
case SHIFT_ESC:
|
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||
if (record->event.pressed) {
|
||||
if (shift_esc_shift_mask) {
|
||||
add_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
add_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
if (shift_esc_shift_mask) {
|
||||
del_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D5
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 13 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
ifndef MAKEFILE_INCLUDED
|
||||
include ../../../Makefile
|
||||
endif
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6660
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Priyadi
|
||||
#define PRODUCT Promethium Keyboard
|
||||
#define DESCRIPTION Promethium Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
#define MATRIX_COLS 6
|
||||
|
||||
/* default pin-out */
|
||||
#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 }
|
||||
#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* 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) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
|
||||
)
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
/* PS/2 mouse */
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
# define PS2_CLOCK_PORT PORTD
|
||||
# define PS2_CLOCK_PIN PIND
|
||||
# define PS2_CLOCK_DDR DDRD
|
||||
# define PS2_CLOCK_BIT 1
|
||||
# define PS2_DATA_PORT PORTD
|
||||
# define PS2_DATA_PIN PIND
|
||||
# define PS2_DATA_DDR DDRD
|
||||
# define PS2_DATA_BIT 2
|
||||
#endif
|
||||
|
||||
/* PS/2 mouse interrupt version */
|
||||
#ifdef PS2_USE_INT
|
||||
/* uses INT1 for clock line(ATMega32U4) */
|
||||
#define PS2_CLOCK_PORT PORTD
|
||||
#define PS2_CLOCK_PIN PIND
|
||||
#define PS2_CLOCK_DDR DDRD
|
||||
#define PS2_CLOCK_BIT 3
|
||||
#define PS2_DATA_PORT PORTD
|
||||
#define PS2_DATA_PIN PIND
|
||||
#define PS2_DATA_DDR DDRD
|
||||
#define PS2_DATA_BIT 2
|
||||
|
||||
#define PS2_INT_INIT() do { \
|
||||
EICRA |= ((1<<ISC31) | \
|
||||
(0<<ISC30)); \
|
||||
} while (0)
|
||||
#define PS2_INT_ON() do { \
|
||||
EIMSK |= (1<<INT3); \
|
||||
} while (0)
|
||||
#define PS2_INT_OFF() do { \
|
||||
EIMSK &= ~(1<<INT3); \
|
||||
} while (0)
|
||||
#define PS2_INT_VECT INT3_vect
|
||||
#endif
|
||||
|
||||
/* PS/2 mouse USART version */
|
||||
#ifdef PS2_USE_USART
|
||||
/* XCK for clock line and RXD for data line */
|
||||
#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<<PS2_CLOCK_BIT); \
|
||||
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
|
||||
UCSR1C = ((1 << UMSEL10) | \
|
||||
(3 << UPM10) | \
|
||||
(0 << USBS1) | \
|
||||
(3 << UCSZ10) | \
|
||||
(0 << UCPOL1)); \
|
||||
UCSR1A = 0; \
|
||||
UBRR1H = 0; \
|
||||
UBRR1L = 0; \
|
||||
} while (0)
|
||||
#define PS2_USART_RX_INT_ON() do { \
|
||||
UCSR1B = ((1 << RXCIE1) | \
|
||||
(1 << RXEN1)); \
|
||||
} while (0)
|
||||
#define PS2_USART_RX_POLL_ON() do { \
|
||||
UCSR1B = (1 << RXEN1); \
|
||||
} while (0)
|
||||
#define PS2_USART_OFF() do { \
|
||||
UCSR1C = 0; \
|
||||
UCSR1B &= ~((1 << RXEN1) | \
|
||||
(1 << TXEN1)); \
|
||||
} while (0)
|
||||
#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
|
||||
#define PS2_USART_RX_DATA UDR1
|
||||
#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
|
||||
#define PS2_USART_RX_VECT USART1_RX_vect
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = yes
|
||||
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.
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = 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
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../../Makefile
|
||||
endif
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
/* bootmagic salt key */
|
||||
#define BOOTMAGIC_KEY_SALT KC_ESC
|
||||
|
||||
/* skip bootmagic and eeconfig */
|
||||
#define BOOTMAGIC_KEY_SKIP KC_SPACE
|
||||
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
#define RGB_DI_PIN B5
|
||||
#define RGBSPS_NUM 57
|
||||
|
||||
#endif
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
sleep 10
|
||||
avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex
|
|
@ -0,0 +1,841 @@
|
|||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
// this is the style you want to emulate.
|
||||
|
||||
#include "promethium.h"
|
||||
#include "action_layer.h"
|
||||
#ifdef AUDIO_ENABLE
|
||||
#include "audio.h"
|
||||
#include "musical_notes.h"
|
||||
#endif
|
||||
#include "eeconfig.h"
|
||||
#include "process_unicode.h"
|
||||
#include "quantum.h"
|
||||
#include "rgbsps.h"
|
||||
#include "ps2_mouse.h"
|
||||
#include "ps2.h"
|
||||
#define COUNT(x) (sizeof (x) / sizeof (*(x)))
|
||||
|
||||
// #define RGBLED_NUM 5
|
||||
// struct cRGB led[RGBLED_NUM];
|
||||
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
||||
enum layers {
|
||||
_QWERTY,
|
||||
_COLEMAK,
|
||||
_WORKMAN,
|
||||
_PUNC,
|
||||
_NUM,
|
||||
_FUNC,
|
||||
_EMOJI,
|
||||
_GUI,
|
||||
};
|
||||
|
||||
enum planck_keycodes {
|
||||
// layouts
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
WORKMAN,
|
||||
|
||||
// layer switchers
|
||||
PUNC,
|
||||
NUM,
|
||||
FUNC,
|
||||
EMOJI,
|
||||
GUI,
|
||||
|
||||
// os switchers
|
||||
LINUX,
|
||||
WIN,
|
||||
OSX,
|
||||
};
|
||||
|
||||
// Fillers to make layering clearer
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
// unicode map
|
||||
|
||||
enum unicode_name {
|
||||
GRIN, // grinning face 😊
|
||||
TJOY, // tears of joy 😂
|
||||
SMILE, // grining face with smiling eyes 😁
|
||||
HEART, // heart ❤
|
||||
EYERT, // smiling face with heart shaped eyes 😍
|
||||
CRY, // crying face 😭
|
||||
SMEYE, // smiling face with smiling eyes 😊
|
||||
UNAMU, // unamused 😒
|
||||
KISS, // kiss 😘
|
||||
HART2, // two hearts 💕
|
||||
WEARY, // weary 😩
|
||||
OKHND, // ok hand sign 👌
|
||||
PENSV, // pensive 😔
|
||||
SMIRK, // smirk 😏
|
||||
RECYC, // recycle ♻
|
||||
WINK, // wink 😉
|
||||
THMUP, // thumb up 👍
|
||||
THMDN, // thumb down 👎
|
||||
PRAY, // pray 🙏
|
||||
PHEW, // relieved 😌
|
||||
MUSIC, // musical notes
|
||||
FLUSH, // flushed 😳
|
||||
CELEB, // celebration 🙌
|
||||
CRY2, // crying face 😢
|
||||
COOL, // smile with sunglasses 😎
|
||||
NOEVS, // see no evil
|
||||
NOEVH, // hear no evil
|
||||
NOEVK, // speak no evil
|
||||
POO, // pile of poo
|
||||
EYES, // eyes
|
||||
VIC, // victory hand
|
||||
BHART, // broken heart
|
||||
SLEEP, // sleeping face
|
||||
SMIL2, // smiling face with open mouth & sweat
|
||||
HUNRD, // 100
|
||||
CONFU, // confused
|
||||
TONGU, // face with tongue & winking eye
|
||||
DISAP, // disappointed
|
||||
YUMMY, // face savoring delicious food
|
||||
CLAP, // hand clapping
|
||||
FEAR, // face screaming in fear
|
||||
HORNS, // smiling face with horns
|
||||
HALO, // smiling face with halo
|
||||
BYE, // waving hand
|
||||
SUN, // sun
|
||||
MOON, // moon
|
||||
SKULL, // skull
|
||||
};
|
||||
|
||||
const uint32_t PROGMEM unicode_map[] = {
|
||||
[GRIN] = 0x1F600,
|
||||
[TJOY] = 0x1F602,
|
||||
[SMILE] = 0x1F601,
|
||||
[HEART] = 0x2764,
|
||||
[EYERT] = 0x1f60d,
|
||||
[CRY] = 0x1f62d,
|
||||
[SMEYE] = 0x1F60A,
|
||||
[UNAMU] = 0x1F612,
|
||||
[KISS] = 0x1F618,
|
||||
[HART2] = 0x1F495,
|
||||
[WEARY] = 0x1F629,
|
||||
[OKHND] = 0x1F44C,
|
||||
[PENSV] = 0x1F614,
|
||||
[SMIRK] = 0x1F60F,
|
||||
[RECYC] = 0x267B,
|
||||
[WINK] = 0x1F609,
|
||||
[THMUP] = 0x1F44D,
|
||||
[THMDN] = 0x1F44E,
|
||||
[PRAY] = 0x1F64F,
|
||||
[PHEW] = 0x1F60C,
|
||||
[MUSIC] = 0x1F3B6,
|
||||
[FLUSH] = 0x1F633,
|
||||
[CELEB] = 0x1F64C,
|
||||
[CRY2] = 0x1F622,
|
||||
[COOL] = 0x1F60E,
|
||||
[NOEVS] = 0x1F648,
|
||||
[NOEVH] = 0x1F649,
|
||||
[NOEVK] = 0x1F64A,
|
||||
[POO] = 0x1F4A9,
|
||||
[EYES] = 0x1F440,
|
||||
[VIC] = 0x270C,
|
||||
[BHART] = 0x1F494,
|
||||
[SLEEP] = 0x1F634,
|
||||
[SMIL2] = 0x1F605,
|
||||
[HUNRD] = 0x1F4AF,
|
||||
[CONFU] = 0x1F615,
|
||||
[TONGU] = 0x1F61C,
|
||||
[DISAP] = 0x1F61E,
|
||||
[YUMMY] = 0x1F60B,
|
||||
[CLAP] = 0x1F44F,
|
||||
[FEAR] = 0x1F631,
|
||||
[HORNS] = 0x1F608,
|
||||
[HALO] = 0x1F607,
|
||||
[BYE] = 0x1F44B,
|
||||
[SUN] = 0x2600,
|
||||
[MOON] = 0x1F314,
|
||||
[SKULL] = 0x1F480,
|
||||
};
|
||||
|
||||
|
||||
// hybrid shift - =
|
||||
// #undef KC_LSFT
|
||||
// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
|
||||
// #undef KC_RSFT
|
||||
// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
|
||||
|
||||
|
||||
// hybrid right-gui & scroll lock (mapped to Compose in OS)
|
||||
#undef KC_RCTL
|
||||
#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
|
||||
|
||||
// RGBSPS
|
||||
|
||||
const uint8_t PROGMEM LED_ALNUM[] = {
|
||||
LED_Z,
|
||||
LED_A,
|
||||
LED_Q,
|
||||
LED_W,
|
||||
LED_S,
|
||||
LED_X,
|
||||
LED_C,
|
||||
LED_D,
|
||||
LED_E,
|
||||
LED_R,
|
||||
LED_F,
|
||||
LED_V,
|
||||
LED_B,
|
||||
LED_G,
|
||||
LED_T,
|
||||
LED_N,
|
||||
LED_HH,
|
||||
LED_Y,
|
||||
LED_U,
|
||||
LED_J,
|
||||
LED_M,
|
||||
LED_COMM,
|
||||
LED_K,
|
||||
LED_I,
|
||||
LED_O,
|
||||
LED_L,
|
||||
LED_DOT,
|
||||
LED_SLSH,
|
||||
LED_SCLN,
|
||||
LED_P,
|
||||
LED_LSPC,
|
||||
LED_RSPC
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM LED_MODS[] = {
|
||||
LED_TAB,
|
||||
LED_ESC,
|
||||
LED_LSFT,
|
||||
LED_LCTL,
|
||||
LED_LGUI,
|
||||
LED_LALT,
|
||||
LED_RALT,
|
||||
LED_RGUI,
|
||||
LED_BKSP,
|
||||
LED_ENT,
|
||||
LED_RSFT,
|
||||
LED_RCTL
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM LED_FN[] = {
|
||||
LED_PUNC,
|
||||
LED_NUM,
|
||||
LED_FUNC,
|
||||
LED_EMOJI
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM LED_INDICATORS[] = {
|
||||
LED_IND_EMOJI,
|
||||
LED_IND_NUM,
|
||||
LED_IND_FUNC,
|
||||
LED_IND_BATTERY,
|
||||
LED_IND_USB,
|
||||
LED_IND_BLUETOOTH,
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM LED_TRACKPOINT[] = {
|
||||
LED_TRACKPOINT1,
|
||||
LED_TRACKPOINT2,
|
||||
LED_TRACKPOINT3,
|
||||
};
|
||||
|
||||
void led_reset(void) {
|
||||
for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
|
||||
}
|
||||
|
||||
for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
|
||||
}
|
||||
|
||||
for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
|
||||
}
|
||||
}
|
||||
|
||||
void led_layer_normal(void) {
|
||||
rgbsps_set(LED_IND_FUNC, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_NUM, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
|
||||
|
||||
led_reset();
|
||||
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_layer_func(void) {
|
||||
rgbsps_set(LED_IND_FUNC, 0, 15, 0);
|
||||
rgbsps_set(LED_IND_NUM, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
|
||||
|
||||
led_reset();
|
||||
|
||||
for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
|
||||
}
|
||||
|
||||
rgbsps_set(LED_I, 15, 0, 15);
|
||||
rgbsps_set(LED_J, 15, 0, 15);
|
||||
rgbsps_set(LED_K, 15, 0, 15);
|
||||
rgbsps_set(LED_L, 15, 0, 15);
|
||||
|
||||
rgbsps_set(LED_U, 15, 0, 0);
|
||||
rgbsps_set(LED_O, 15, 0, 0);
|
||||
rgbsps_set(LED_COMM, 15, 0, 0);
|
||||
rgbsps_set(LED_DOT, 15, 0, 0);
|
||||
rgbsps_set(LED_SCLN, 15, 0, 0);
|
||||
rgbsps_set(LED_P, 15, 0, 0);
|
||||
|
||||
rgbsps_set(LED_Q, 0, 15, 0);
|
||||
rgbsps_set(LED_W, 0, 15, 0);
|
||||
rgbsps_set(LED_E, 0, 15, 0);
|
||||
rgbsps_set(LED_R, 0, 15, 0);
|
||||
rgbsps_set(LED_A, 0, 15, 0);
|
||||
rgbsps_set(LED_S, 0, 15, 0);
|
||||
rgbsps_set(LED_D, 0, 15, 0);
|
||||
rgbsps_set(LED_F, 0, 15, 0);
|
||||
rgbsps_set(LED_Z, 0, 15, 0);
|
||||
rgbsps_set(LED_X, 0, 15, 0);
|
||||
rgbsps_set(LED_C, 0, 15, 0);
|
||||
rgbsps_set(LED_V, 0, 15, 0);
|
||||
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_layer_punc(void) {
|
||||
rgbsps_set(LED_IND_FUNC, 0, 15, 0);
|
||||
rgbsps_set(LED_IND_NUM, 0, 0, 15);
|
||||
rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
|
||||
|
||||
led_reset();
|
||||
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_layer_num(void) {
|
||||
rgbsps_set(LED_IND_FUNC, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_NUM, 0, 0, 15);
|
||||
rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
|
||||
|
||||
led_reset();
|
||||
|
||||
for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
|
||||
}
|
||||
|
||||
rgbsps_set(LED_U, 0, 5, 15);
|
||||
rgbsps_set(LED_I, 0, 5, 15);
|
||||
rgbsps_set(LED_O, 0, 5, 15);
|
||||
rgbsps_set(LED_J, 0, 5, 15);
|
||||
rgbsps_set(LED_K, 0, 5, 15);
|
||||
rgbsps_set(LED_L, 0, 5, 15);
|
||||
rgbsps_set(LED_M, 0, 5, 15);
|
||||
rgbsps_set(LED_COMM, 0, 5, 15);
|
||||
rgbsps_set(LED_DOT, 0, 5, 15);
|
||||
rgbsps_set(LED_FUNC, 0, 5, 15);
|
||||
|
||||
rgbsps_set(LED_EMOJI, 0, 10, 15);
|
||||
rgbsps_set(LED_RALT, 0, 10, 15);
|
||||
|
||||
rgbsps_set(LED_Q, 0, 10, 15);
|
||||
rgbsps_set(LED_W, 0, 10, 15);
|
||||
rgbsps_set(LED_E, 0, 10, 15);
|
||||
rgbsps_set(LED_R, 0, 10, 15);
|
||||
rgbsps_set(LED_T, 0, 10, 15);
|
||||
rgbsps_set(LED_Y, 0, 10, 15);
|
||||
rgbsps_set(LED_P, 0, 10, 15);
|
||||
|
||||
rgbsps_set(LED_A, 0, 15, 15);
|
||||
rgbsps_set(LED_S, 0, 15, 15);
|
||||
rgbsps_set(LED_D, 0, 15, 15);
|
||||
rgbsps_set(LED_F, 0, 15, 15);
|
||||
rgbsps_set(LED_Z, 0, 15, 15);
|
||||
rgbsps_set(LED_X, 0, 15, 15);
|
||||
rgbsps_set(LED_C, 0, 15, 15);
|
||||
rgbsps_set(LED_V, 0, 15, 15);
|
||||
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_layer_emoji(void) {
|
||||
for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
|
||||
}
|
||||
for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
|
||||
}
|
||||
for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
|
||||
rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
|
||||
}
|
||||
|
||||
rgbsps_set(LED_IND_FUNC, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_NUM, 0, 0, 0);
|
||||
rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
|
||||
|
||||
rgbsps_set(LED_PUNC, 15, 15, 15);
|
||||
rgbsps_set(LED_EMOJI, 15, 15, 15);
|
||||
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_layer_gui(void) {
|
||||
rgbsps_set(LED_IND_FUNC, 15, 10, 15);
|
||||
rgbsps_set(LED_IND_NUM, 15, 10, 15);
|
||||
rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
|
||||
rgbsps_send();
|
||||
}
|
||||
|
||||
void led_init(void) {
|
||||
// turn off all
|
||||
rgbsps_turnoff();
|
||||
|
||||
// set trackpoint color
|
||||
rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
|
||||
rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
|
||||
rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
|
||||
|
||||
// // hardcode indicator for now
|
||||
rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
|
||||
rgbsps_set(LED_IND_USB, 15, 15, 15);
|
||||
rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
|
||||
|
||||
led_layer_normal();
|
||||
}
|
||||
|
||||
|
||||
// keymaps
|
||||
|
||||
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 | ; |Enter |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = KEYMAP(
|
||||
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_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, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, 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 |Enter |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = KEYMAP(
|
||||
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_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_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/* Workman
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_WORKMAN] = KEYMAP(
|
||||
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
|
||||
KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT ,
|
||||
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
|
||||
),
|
||||
|
||||
/* Punc
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | \ | - | = | < | > | ( | ) | ' | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | _ | + | { | } | [ | ] | " | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_PUNC] = KEYMAP(
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
|
||||
XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Num
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | x | | | 0 | , | . | + | - |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_NUM] = KEYMAP(
|
||||
KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT,
|
||||
KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR,
|
||||
_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
|
||||
),
|
||||
|
||||
/* Func
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F9 | F10 | F11 | F12 | | | | Home | End | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_FUNC] = KEYMAP(
|
||||
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
|
||||
XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
|
||||
_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* Emoji
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_EMOJI] = KEYMAP(
|
||||
X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
|
||||
X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
|
||||
X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
|
||||
X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
|
||||
),
|
||||
|
||||
/* GUI
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Win | | Prev | Play | Next | | | | | | |Colmak|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | OSX | | | | | BL- | BL+ | | | | |Workmn|
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_GUI] = KEYMAP(
|
||||
_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______,
|
||||
LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
|
||||
WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
|
||||
OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
float tone_startup[][2] = SONG(STARTUP_SOUND);
|
||||
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
|
||||
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
|
||||
float tone_workman[][2] = SONG(DVORAK_SOUND);
|
||||
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
|
||||
float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
|
||||
float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
|
||||
float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
|
||||
float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
|
||||
#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) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
// faux clicky
|
||||
if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
|
||||
#endif
|
||||
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
|
||||
#endif
|
||||
persistant_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
|
||||
persistant_default_layer_set(1UL<<_COLEMAK);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case WORKMAN:
|
||||
if (record->event.pressed) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
PLAY_NOTE_ARRAY(tone_workman, false, 0);
|
||||
#endif
|
||||
persistant_default_layer_set(1UL<<_WORKMAN);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case PUNC:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_PUNC);
|
||||
update_tri_layer(_PUNC, _EMOJI, _GUI);
|
||||
if (IS_LAYER_ON(_GUI)) {
|
||||
led_layer_gui();
|
||||
} else {
|
||||
led_layer_punc();;
|
||||
}
|
||||
} else {
|
||||
layer_off(_PUNC);
|
||||
update_tri_layer(_PUNC, _EMOJI, _GUI);
|
||||
if (IS_LAYER_ON(_EMOJI)) {
|
||||
led_layer_emoji();
|
||||
} else {
|
||||
led_layer_normal();;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case EMOJI:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_EMOJI);
|
||||
update_tri_layer(_PUNC, _EMOJI, _GUI);
|
||||
if (IS_LAYER_ON(_GUI)) {
|
||||
led_layer_gui();
|
||||
} else {
|
||||
led_layer_emoji();;
|
||||
}
|
||||
} else {
|
||||
layer_off(_EMOJI);
|
||||
update_tri_layer(_PUNC, _EMOJI, _GUI);
|
||||
if (IS_LAYER_ON(_PUNC)) {
|
||||
led_layer_punc();
|
||||
} else {
|
||||
led_layer_normal();;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case NUM:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_NUM);
|
||||
led_layer_num();
|
||||
} else {
|
||||
layer_off(_NUM);
|
||||
led_layer_normal();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case FUNC:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_FUNC);
|
||||
led_layer_func();
|
||||
} else {
|
||||
layer_off(_FUNC);
|
||||
led_layer_normal();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
|
||||
|
||||
case LINUX:
|
||||
set_unicode_input_mode(UC_LNX);
|
||||
#ifdef AUDIO_ENABLE
|
||||
PLAY_NOTE_ARRAY(tone_linux, false, 0);
|
||||
#endif
|
||||
return false;
|
||||
break;
|
||||
case WIN:
|
||||
set_unicode_input_mode(UC_WINC);
|
||||
#ifdef AUDIO_ENABLE
|
||||
PLAY_NOTE_ARRAY(tone_windows, false, 0);
|
||||
#endif
|
||||
return false;
|
||||
break;
|
||||
case OSX:
|
||||
set_unicode_input_mode(UC_OSX);
|
||||
#ifdef AUDIO_ENABLE
|
||||
PLAY_NOTE_ARRAY(tone_osx, false, 0);
|
||||
#endif
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
startup_user();
|
||||
#endif
|
||||
set_unicode_input_mode(UC_LNX);
|
||||
led_init();
|
||||
}
|
||||
|
||||
// void init_rgblight(void) {
|
||||
// for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||
// led[i].r = 255;
|
||||
// led[i].g = 85;
|
||||
// led[i].b = 0;
|
||||
// }
|
||||
// ws2812_setleds(led, RGBLED_NUM);
|
||||
// }
|
||||
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
|
||||
void startup_user()
|
||||
{
|
||||
_delay_ms(20); // gets rid of tick
|
||||
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||
}
|
||||
|
||||
void shutdown_user()
|
||||
{
|
||||
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||
_delay_ms(150);
|
||||
stop_all_notes();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void ps2_mouse_init_user() {
|
||||
// set TrackPoint sensitivity
|
||||
PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
|
||||
PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
|
||||
PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
|
||||
PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60");
|
||||
|
||||
// set TrackPoint speed
|
||||
// (transfer function upper plateau speed)
|
||||
PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
|
||||
PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
|
||||
PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
|
||||
PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90");
|
||||
|
||||
// set TrackPoint Negative Inertia factor
|
||||
PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
|
||||
PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
|
||||
PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
|
||||
PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03");
|
||||
|
||||
// disable up threshold (click)
|
||||
PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2");
|
||||
PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47");
|
||||
PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C");
|
||||
PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01");
|
||||
|
||||
// enable TrackPoint Press to Select (PtS)
|
||||
// print("ps2_mouse_init: send 0xE2: ");
|
||||
// rcv = ps2_host_send(0xE2);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x47: ");
|
||||
// rcv = ps2_host_send(0x47);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x2C: ");
|
||||
// rcv = ps2_host_send(0x2C);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x00: ");
|
||||
// rcv = ps2_host_send(0x00);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
|
||||
// set TrackPoint Press to Select threshold
|
||||
// print("ps2_mouse_init: send 0xE2: ");
|
||||
// rcv = ps2_host_send(0xE2);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x81: ");
|
||||
// rcv = ps2_host_send(0x81);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x5C: ");
|
||||
// rcv = ps2_host_send(0x5C);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// // default PtS threshold is 0x08
|
||||
// print("ps2_mouse_init: send 0x04: ");
|
||||
// rcv = ps2_host_send(0x04);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
|
||||
// set TrackPoint Press to Select time constant (zTc)
|
||||
// print("ps2_mouse_init: send 0xE2: ");
|
||||
// rcv = ps2_host_send(0xE2);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x81: ");
|
||||
// rcv = ps2_host_send(0x81);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// print("ps2_mouse_init: send 0x5E: ");
|
||||
// rcv = ps2_host_send(0x5E);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
// // default zTc is 0x26
|
||||
// print("ps2_mouse_init: send 0x45: ");
|
||||
// rcv = ps2_host_send(0x45);
|
||||
// phex(rcv); phex(ps2_error); print("\n");
|
||||
|
||||
/*
|
||||
// set TrackPoint Press to Select Jenks Curvature (jkcur)
|
||||
print("ps2_mouse_init: send 0xE2: ");
|
||||
rcv = ps2_host_send(0xE2);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
print("ps2_mouse_init: send 0x81: ");
|
||||
rcv = ps2_host_send(0x81);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
print("ps2_mouse_init: send 0x5D: ");
|
||||
rcv = ps2_host_send(0x5D);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
// default jkcur is 0x87
|
||||
print("ps2_mouse_init: send 0x87: ");
|
||||
rcv = ps2_host_send(0x87);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
*/
|
||||
|
||||
/*
|
||||
// set TrackPoint Minimum Drag (mindrag)
|
||||
print("ps2_mouse_init: send 0xE2: ");
|
||||
rcv = ps2_host_send(0xE2);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
print("ps2_mouse_init: send 0x81: ");
|
||||
rcv = ps2_host_send(0x81);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
print("ps2_mouse_init: send 0x59: ");
|
||||
rcv = ps2_host_send(0x59);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
// default PtS mindrag is 0x14
|
||||
print("ps2_mouse_init: send 0x14: ");
|
||||
rcv = ps2_host_send(0x14);
|
||||
phex(rcv); phex(ps2_error); print("\n");
|
||||
*/
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
# How to add your own keymap
|
||||
|
||||
Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
|
||||
|
||||
_[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
|
||||
|
||||
\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
|
||||
|
||||
and contain the following files:
|
||||
|
||||
* `keymap.c`
|
||||
* `readme.md` *recommended*
|
||||
* `config.h` *optional*, found automatically when compiling
|
||||
* `Makefile` *optional*, found automatically when compling
|
||||
|
||||
When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
|
||||
|
||||
* **folder_name** description
|
||||
|
||||
# List of Promethium keymaps
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#include "promethium.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
|
||||
matrix_init_user();
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
#ifndef PROMETHIUM_H
|
||||
#define PROMETHIUM_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define PS2_INIT_DELAY 2000
|
||||
|
||||
#define KEYMAP( \
|
||||
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
|
||||
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
|
||||
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
|
||||
k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
|
||||
) \
|
||||
{ \
|
||||
{k11, k12, k13, k14, k15, k16}, \
|
||||
{k21, k22, k23, k24, k25, k26}, \
|
||||
{k31, k32, k33, k34, k35, k36}, \
|
||||
{k41, k42, k43, k44, k45, k46}, \
|
||||
{k17, k18, k19, k1a, k1b, k1c}, \
|
||||
{k27, k28, k29, k2a, k2b, k2c}, \
|
||||
{k37, k38, k39, k3a, k3b, k3c}, \
|
||||
{k47, k48, k49, k4a, k4b, k4c} \
|
||||
}
|
||||
|
||||
enum led_sequence {
|
||||
LED_IND_BLUETOOTH,
|
||||
LED_IND_USB,
|
||||
LED_IND_BATTERY,
|
||||
|
||||
LED_IND_FUNC,
|
||||
LED_IND_NUM,
|
||||
LED_IND_EMOJI,
|
||||
|
||||
LED_BKSP,
|
||||
LED_ENT,
|
||||
LED_RSFT,
|
||||
LED_RCTL,
|
||||
|
||||
LED_RGUI,
|
||||
LED_SLSH,
|
||||
LED_SCLN,
|
||||
LED_P,
|
||||
|
||||
LED_O,
|
||||
LED_L,
|
||||
LED_DOT,
|
||||
LED_RALT,
|
||||
|
||||
LED_EMOJI,
|
||||
LED_COMM,
|
||||
LED_K,
|
||||
LED_I,
|
||||
|
||||
LED_U,
|
||||
LED_J,
|
||||
LED_M,
|
||||
LED_FUNC,
|
||||
|
||||
LED_RSPC,
|
||||
LED_N,
|
||||
LED_HH,
|
||||
LED_Y,
|
||||
|
||||
LED_TRACKPOINT3,
|
||||
LED_TRACKPOINT2,
|
||||
LED_TRACKPOINT1,
|
||||
|
||||
LED_LSPC,
|
||||
LED_B,
|
||||
LED_G,
|
||||
LED_T,
|
||||
|
||||
LED_R,
|
||||
LED_F,
|
||||
LED_V,
|
||||
LED_NUM,
|
||||
|
||||
LED_PUNC,
|
||||
LED_C,
|
||||
LED_D,
|
||||
LED_E,
|
||||
|
||||
LED_W,
|
||||
LED_S,
|
||||
LED_X,
|
||||
LED_LALT,
|
||||
|
||||
LED_LGUI,
|
||||
LED_Z,
|
||||
LED_A,
|
||||
LED_Q,
|
||||
|
||||
LED_TAB,
|
||||
LED_ESC,
|
||||
LED_LSFT,
|
||||
LED_LCTL,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Promethium Keyboard Firmware
|
||||
============================
|
||||
A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller.
|
||||
|
||||
Features:
|
||||
|
||||
* Single piece split form factor
|
||||
* Columnar stagger
|
||||
* Trackpoint
|
||||
* Bluetooth LE *TBD*
|
||||
* Battery
|
||||
* Per switch RGB LED
|
||||
* Proximity sensor for energy conservation *TBD*
|
|
@ -0,0 +1,24 @@
|
|||
#include "light_ws2812.h"
|
||||
#include "rgbsps.h"
|
||||
|
||||
struct cRGB led[RGBSPS_NUM];
|
||||
|
||||
void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
|
||||
led[index].r = r;
|
||||
led[index].g = g;
|
||||
led[index].b = b;
|
||||
}
|
||||
|
||||
void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) {
|
||||
for (uint16_t i = 0; i < RGBSPS_NUM; i++) {
|
||||
rgbsps_set(i, r, g, b);
|
||||
}
|
||||
}
|
||||
|
||||
void rgbsps_turnoff(void) {
|
||||
rgbsps_setall(0, 0, 0);
|
||||
}
|
||||
|
||||
void rgbsps_send(void) {
|
||||
ws2812_setleds(led, RGBSPS_NUM);
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
|
||||
void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b);
|
||||
void rgbsps_turnoff(void);
|
||||
void rgbsps_send(void);
|
|
@ -0,0 +1,74 @@
|
|||
|
||||
# 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 = 8000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= no # Commands for debug and configuration
|
||||
NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE ?= no # MIDI controls
|
||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||
UNICODE_ENABLE ?= no # Unicode
|
||||
UNICODEMAP_ENABLE ?= yes
|
||||
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.
|
||||
PS2_MOUSE_ENABLE ?= yes
|
||||
PS2_USE_INT ?= 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
|
||||
|
||||
SRC += $(QUANTUM_DIR)/light_ws2812.c
|
||||
SRC += rgbsps.c
|
|
@ -0,0 +1 @@
|
|||
OPT_DEFS += -DHHKB_JP
|
|
@ -0,0 +1,86 @@
|
|||
###Keymaps with both Dvorak layout and QWER layout for HHKB JP.
|
||||
|
||||
1. The default layout is Dvorak.
|
||||
2. Use `Tog` to toggle between Dvorak and QWER
|
||||
3. Holding `NewCmd`, the original `LftCmd`, will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.<sup>[1](#cmdTab)</sup>
|
||||
- For example, no matter you are in Dvorak layout or QWER layout, you can use `Cmd+s` to save a currently editing file.
|
||||
4. `Symb` makes type symbols easier
|
||||
- for example: `Symb+a` is `!`.
|
||||
5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual.
|
||||
6. There's an extra `Tab` in the last line.
|
||||
|
||||
```
|
||||
Layer DVOR:
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| |Bsp|
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| |
|
||||
|------------------------------------------------------` Ent|
|
||||
|Ctrl | A| O| E| U| I| D| H| T| N| S| -| \| |
|
||||
|-----------------------------------------------------------|
|
||||
|Shft | ;| Q| J| K| X| B| M| W| V| Z| | Up| |
|
||||
|-----------------------------------------------------------|
|
||||
|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|RCmd|Tog|Lft|Dwn|Rgh|
|
||||
`-----------------------------------------------------------'
|
||||
```
|
||||
|
||||
```
|
||||
Layer QWER:
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =| |Bsp|
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |
|
||||
|------------------------------------------------------` Ent|
|
||||
|Ctrl | A| S| D| F| G| H| J| K| L| ;| '| \| |
|
||||
|-----------------------------------------------------------|
|
||||
|Shft | Z| X| C| V| B| N| M| ,| .| /| | Up| |
|
||||
|-----------------------------------------------------------|
|
||||
|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|Cmd|Tog|Lft|Dwn|Rgh|
|
||||
`-----------------------------------------------------------'
|
||||
```
|
||||
|
||||
```
|
||||
Layer Symb:
|
||||
,-----------------------------------------------------------.
|
||||
| | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | [| ]| | | {| }| | | | | |
|
||||
|------------------------------------------------------` |
|
||||
| | !| @| #| $| %| ^| &| *| (| )| '| \| |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | | | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
```
|
||||
|
||||
```
|
||||
Layer FUNC: HHKB mode (HHKB Fn)
|
||||
,-----------------------------------------------------------.
|
||||
|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | | | | | | | |Psc|Slk|Pus|Up | | |
|
||||
|------------------------------------------------------` |
|
||||
| |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig| | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | +| -|End|PgD|Dow| | | |
|
||||
|-----------------------------------------------------------|
|
||||
| || | | | | | | | | || | | |
|
||||
`-----------------------------------------------------------'
|
||||
```
|
||||
|
||||
```
|
||||
Empty Layer:
|
||||
,-----------------------------------------------------------.
|
||||
| | | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | |
|
||||
|------------------------------------------------------` |
|
||||
| | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | | | | | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | | | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
```
|
||||
<a name="cmdTab">1</a>: `NewCmd + Tab` does not work, you can use `RCmd+Tab` to switch among applications.
|
|
@ -0,0 +1,60 @@
|
|||
#include "hhkb.h"
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
enum {
|
||||
DVOR,
|
||||
QWER,
|
||||
NEW_CMD,
|
||||
SYMB,
|
||||
FUNC
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[DVOR] = KEYMAP_JP(
|
||||
KC_ESC, 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_JYEN, KC_BSPC,
|
||||
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_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_BSLS, KC_ENT,
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RO, KC_UP, KC_RSFT,
|
||||
MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[QWER] = KEYMAP_JP(
|
||||
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_JYEN, 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_LCTL, 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_UP, KC_RSFT,
|
||||
MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
[NEW_CMD] = KEYMAP_JP(
|
||||
_______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC),
|
||||
_______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC),
|
||||
_______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______,
|
||||
LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT)
|
||||
),
|
||||
|
||||
[SYMB] = KEYMAP_JP(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, LSFT(KC_LBRC), LSFT(KC_RBRC), _______, _______,_______, _______,
|
||||
_______, LSFT(KC_1),LSFT(KC_2),LSFT(KC_3),LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[FUNC] = KEYMAP_JP(
|
||||
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______,
|
||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT,
|
||||
_______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
}
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
|
@ -70,7 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
)
|
||||
|
||||
#define RGB_DI_PIN D3
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 12 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/* WS2812B RGB Underglow LED */
|
||||
#define RGB_DI_PIN F5 // Based on wiring depicted in ws2812_wiring.jpg
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 16 // Number of LEDs. Change this to match your use case.
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
|
|
|
@ -49,6 +49,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D4
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -75,7 +75,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D4
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -63,7 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/* Underlight configuration
|
||||
*/
|
||||
#define RGB_DI_PIN E2
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 20 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
# 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)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = no # 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
|
||||
|
@ -16,6 +16,7 @@ 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. Do not enable this with audio at the same time.
|
||||
API_SYSEX_ENABLE = yes # Enable SYSEX API (+5390)
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#define NO_DEBUG
|
||||
#define NO_PRINT
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
#define LEADER_TIMEOUT 300
|
||||
|
|
|
@ -62,6 +62,7 @@
|
|||
- How about Alt-F1 thru Alt-F8?
|
||||
- What's the keystroke to get from X to console these days?
|
||||
- A layer for doing console switching would not be a bad idea
|
||||
- I haven't got page-up/page-down, let's have that...
|
||||
*/
|
||||
|
||||
enum layers {
|
||||
|
@ -94,6 +95,7 @@ enum macro_id {
|
|||
#define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT)
|
||||
#define ALTRIGHT MT(MOD_LALT, KC_RGHT)
|
||||
#define MVERSION M(M_VERSION)
|
||||
#define ALTSLASH LALT(KC_SLSH)
|
||||
|
||||
|
||||
/* Note that Planck has dimensions 4 rows x 12 columns */
|
||||
|
@ -109,14 +111,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[_RAISE] = { /* RAISE */
|
||||
{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_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, QWERTY, KEYPAD, KEYPAD, RESET, _______},
|
||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH,_______},
|
||||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
|
||||
},
|
||||
[_LOWER] = { /* LOWER */
|
||||
{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_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, QWERTY, KEYPAD, KEYPAD, RESET, _______},
|
||||
{_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
|
||||
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH, _______},
|
||||
{_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
|
||||
},
|
||||
[_KEYPAD] = { /* Key Pad */
|
||||
{KC_ESC, USERNAME, MVERSION, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC},
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
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
|
||||
MIDI_ENABLE = yes # 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. Do not enable this with audio at the same time.
|
||||
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
|
||||
|
|
|
@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[_LOWER] = {
|
||||
{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_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}
|
||||
},
|
||||
|
||||
|
@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[_RAISE] = {
|
||||
{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_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}
|
||||
},
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN B1
|
||||
#define RGBLIGHT_TIMER
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# Build Options
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# Please remove if no longer applicable
|
||||
$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
|
||||
$(warning Please disable some options in the Makefile to resolve)
|
||||
|
||||
|
||||
# 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. Do not enable this with audio at the same time.
|
||||
PRINTING_ENABLE = 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
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
# define SERIAL_UART_BAUD 19200
|
||||
# define SERIAL_UART_DATA UDR1
|
||||
# define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
|
||||
# define SERIAL_UART_RXD_VECT USART1_RX_vect
|
||||
# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
|
||||
# define SERIAL_UART_INIT() do { \
|
||||
/* baud rate */ \
|
||||
UBRR1L = SERIAL_UART_UBRR; \
|
||||
/* baud rate */ \
|
||||
UBRR1H = SERIAL_UART_UBRR >> 8; \
|
||||
/* enable TX */ \
|
||||
UCSR1B = _BV(TXEN1); \
|
||||
/* 8-bit data */ \
|
||||
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
|
||||
sei(); \
|
||||
} while(0)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,314 @@
|
|||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
// this is the style you want to emulate.
|
||||
|
||||
#include "planck.h"
|
||||
#include "action_layer.h"
|
||||
#ifdef AUDIO_ENABLE
|
||||
#include "audio.h"
|
||||
#endif
|
||||
#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 _COLEMAK 1
|
||||
#define _DVORAK 2
|
||||
#define _LOWER 3
|
||||
#define _RAISE 4
|
||||
#define _PLOVER 5
|
||||
#define _ADJUST 16
|
||||
|
||||
enum planck_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
DVORAK,
|
||||
PLOVER,
|
||||
LOWER,
|
||||
RAISE,
|
||||
BACKLIT,
|
||||
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
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | 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] = {
|
||||
{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 },
|
||||
{BACKLIT, 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 |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = {
|
||||
{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 },
|
||||
{BACKLIT, 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 |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = {
|
||||
{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 },
|
||||
{BACKLIT, 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] = {
|
||||
{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] = {
|
||||
{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}
|
||||
},
|
||||
|
||||
/* Plover layer (http://opensteno.org)
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | # | # | # | # | # | # | # | # | # | # | # | # |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | S | T | P | H | * | * | F | P | L | T | D |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Exit | | | A | O | | E | U | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_PLOVER] = {
|
||||
{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| | Print|no prnt | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = {
|
||||
{_______, RESET, _______, PRINT_ON, PRINT_OFF, _______, _______, _______, _______, _______, _______, KC_DEL},
|
||||
{_______, _______, _______, 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 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
|
||||
|
||||
|
||||
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_NOTE_ARRAY(tone_qwerty, false, 0);
|
||||
#endif
|
||||
persistant_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
|
||||
persistant_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
|
||||
persistant_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 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_NOTE_ARRAY(tone_plover, false, 0);
|
||||
#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_NOTE_ARRAY(tone_plover_gb, false, 0);
|
||||
#endif
|
||||
layer_off(_PLOVER);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef AUDIO_ENABLE
|
||||
startup_user();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef AUDIO_ENABLE
|
||||
|
||||
void startup_user()
|
||||
{
|
||||
_delay_ms(20); // gets rid of tick
|
||||
PLAY_NOTE_ARRAY(tone_startup, false, 0);
|
||||
}
|
||||
|
||||
void shutdown_user()
|
||||
{
|
||||
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
|
||||
_delay_ms(150);
|
||||
stop_all_notes();
|
||||
}
|
||||
|
||||
void music_on_user(void)
|
||||
{
|
||||
music_scale_user();
|
||||
}
|
||||
|
||||
void music_scale_user(void)
|
||||
{
|
||||
PLAY_NOTE_ARRAY(music_scale, false, 0);
|
||||
}
|
||||
|
||||
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue