no idea what is mergedpull/640/head
@ -0,0 +1,311 @@ | |||
/* | |||
* The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak | |||
* software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner | |||
* keys. I've decided to continue using this layout with my ErgoDox. | |||
* | |||
* The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional | |||
* keys as shown in the diagrams. The Colemak layout is merely an adaptation of that. | |||
* | |||
* I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck | |||
* layouts. | |||
* | |||
* For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the | |||
* keymap is defined, beginning on line 81. | |||
* | |||
*/ | |||
#include "ergodox.h" | |||
#include "debug.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
#define _DV 0 // Dvorak layer | |||
#define _QW 1 // Qwerty layer | |||
#define _CM 2 // Colemak layer | |||
#define _MD 3 // Media Layer | |||
#define _KP 4 // Keypad Layer | |||
// Macro name shortcuts | |||
#define DVORAK M(_DV) | |||
#define QWERTY M(_QW) | |||
#define COLEMAK M(_CM) | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
/* Keymap 0: Dvorak layer | |||
* | |||
* ,--------------------------------------------------. ,--------------------------------------------------. | |||
* | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | | |||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | |||
* | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | | |||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |||
* | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | | |||
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| | |||
* | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | | |||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | |||
* | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | | |||
* `----------------------------------' `----------------------------------' | |||
* ,-------------. ,-------------. | |||
* | LCtr | LAlt | | Ralt | RCtr | | |||
* ,------|------|------| |------+------+------. | |||
* | | | Home | | PgUp | | | | |||
* | BkSp | Del |------| |------| Enter| Space| | |||
* | | | End | | PgDn | | | | |||
* `--------------------' `--------------------' | |||
* | |||
*/ | |||
// If it accepts an argument (i.e, is a function), it doesn't need KC_. | |||
// Otherwise, it needs KC_* | |||
[_DV] = { // layer 0 : Dvorak | |||
// left hand | |||
{KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, | |||
{KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, | |||
{KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL }, | |||
{KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC}, | |||
{KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME}, | |||
{KC_5, KC_Y, KC_I, KC_X, KC_NO, KC_LCTL}, | |||
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, | |||
// right hand | |||
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, | |||
{KC_6, KC_F, KC_D, KC_B, KC_NO, KC_RCTL}, | |||
{KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP}, | |||
{KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC }, | |||
{KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT }, | |||
{KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN}, | |||
{KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO } | |||
}, | |||
/* Keymap 1: QWERTY layer | |||
* | |||
* ,--------------------------------------------------. ,--------------------------------------------------. | |||
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | | |||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | |||
* | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | | |||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |||
* | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | | |||
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| | |||
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | | |||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | |||
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | | |||
* `----------------------------------' `----------------------------------' | |||
* ,-------------. ,-------------. | |||
* | LCtr | LAlt | | Ralt | RCtr | | |||
* ,------|------|------| |------+------+------. | |||
* | | | Home | | PgUp | | | | |||
* | BkSp | Del |------| |------| Enter| Space| | |||
* | | | End | | PgDn | | | | |||
* `--------------------' `--------------------' | |||
*/ | |||
// If it accepts an argument (i.e, is a function), it doesn't need KC_. | |||
// Otherwise, it needs KC_* | |||
[_QW] = { // layer 1 : QWERTY | |||
// left hand | |||
{KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, | |||
{KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, | |||
{KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL }, | |||
{KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC}, | |||
{KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME}, | |||
{KC_5, KC_T, KC_G, KC_B, KC_NO, KC_LCTL}, | |||
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, | |||
// right hand | |||
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, | |||
{KC_6, KC_Y, KC_H, KC_N, KC_NO, KC_RCTL}, | |||
{KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP}, | |||
{KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC }, | |||
{KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT }, | |||
{KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN}, | |||
{KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } | |||
}, | |||
/* Keymap 2: Colemak layer | |||
* | |||
* ,--------------------------------------------------. ,--------------------------------------------------. | |||
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | | |||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | |||
* | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | | |||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |||
* | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | | |||
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| | |||
* | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | | |||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | |||
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | | |||
* `----------------------------------' `----------------------------------' | |||
* ,-------------. ,-------------. | |||
* | LCtr | LAlt | | Ralt | RCtr | | |||
* ,------|------|------| |------+------+------. | |||
* | | | Home | | PgUp | | | | |||
* | BkSp | Del |------| |------| Enter| Space| | |||
* | | | End | | PgDn | | | | |||
* `--------------------' `--------------------' | |||
*/ | |||
// If it accepts an argument (i.e, is a function), it doesn't need KC_. | |||
// Otherwise, it needs KC_* | |||
[_CM] = { // layer 2 : Colemak | |||
// left hand | |||
{KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO }, | |||
{KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, | |||
{KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL }, | |||
{KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC}, | |||
{KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME}, | |||
{KC_5, KC_G, KC_D, KC_B, KC_NO, KC_LCTL}, | |||
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, | |||
// right hand | |||
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, | |||
{KC_6, KC_J, KC_H, KC_K, KC_NO, KC_RCTL}, | |||
{KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP}, | |||
{KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC }, | |||
{KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT }, | |||
{KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN}, | |||
{KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } | |||
}, | |||
/* Keymap 3: Symbol Layer | |||
* | |||
* ,--------------------------------------------------. ,--------------------------------------------------. | |||
* | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | | |||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | |||
* | | | PrSc | ScLk | Paus | | FN4 | | FN5 | | Mute | Vol- | Vol+ | | | | |||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |||
* | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | | |||
* |--------+------+------+------+------+------| FN4 | | FN5 |------+------+------+------+------+--------| | |||
* | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | | |||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | |||
* | | | | | | | | | | | | | |||
* `----------------------------------' `----------------------------------' | |||
* ,-------------. ,-------------. | |||
* | | | | | | | |||
* ,------|------|------| |------+------+------. | |||
* | | | | | | | | | |||
* | | |------| |------| | | | |||
* | | | | | | | | | |||
* `--------------------' `--------------------' | |||
*/ | |||
// Media Layer | |||
[_MD] = { // layer 3 : Media layer | |||
// left hand | |||
{RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }, | |||
{KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_F2, KC_PSCR, KC_TRNS, DVORAK, KC_TRNS, KC_TRNS}, | |||
{KC_F3, KC_SLCK, KC_TRNS, QWERTY, KC_TRNS, KC_TRNS}, | |||
{KC_F4, KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS}, | |||
{KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_F11, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, | |||
// right hand | |||
{KC_F12, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_F6, KC_TRNS, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_F7, KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_F8, KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_F9, KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_F10, KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO } | |||
}, | |||
/* Keymap 4: Keypad layer | |||
* | |||
* ,--------------------------------------------------. ,--------------------------------------------------. | |||
* | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | | | |||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | |||
* | Sleep | | | | | | FN5 | | FN4 | | KP 7 | KP 8 | KP 9 | KP + | | | |||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |||
* | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | | |||
* |--------+------+------+------+------+------| FN5 | | FN4 |------+------+------+------+------+--------| | |||
* | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | | |||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | |||
* | | | | | | | KP 0 | | KP . |KP Ent| | | |||
* `----------------------------------' `----------------------------------' | |||
* ,-------------. ,-------------. | |||
* | | | | | | | |||
* ,------|------|------| |------+------+------. | |||
* | | | | | | | | | |||
* | | |------| |------| | | | |||
* | | | | | | | | | |||
* `--------------------' `--------------------' | |||
*/ | |||
// Keypad Layer | |||
[_KP] = { // layer 4 : Keypad layer | |||
// left hand | |||
{KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, KC_TRNS, KC_NO }, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, | |||
// right hand | |||
{KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, | |||
{KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, KC_TRNS}, | |||
{KC_PSLS, KC_P8, KC_P5, KC_P2, KC_NO, KC_TRNS}, | |||
{KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, KC_TRNS}, | |||
{KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO } | |||
}, | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
}; | |||
void persistant_default_layer_set(uint16_t default_layer) { | |||
eeconfig_update_default_layer(default_layer); | |||
default_layer_set(default_layer); | |||
} | |||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||
{ | |||
switch(id) { | |||
case _DV: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_DV); | |||
} | |||
break; | |||
case _QW: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_QW); | |||
} | |||
break; | |||
case _CM: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_CM); | |||
} | |||
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,71 @@ | |||
# 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=512 | |||
# Build Options | |||
# change to "no" to disable the options, or define them in the Makefile in | |||
# the appropriate keymap folder that will get included automatically | |||
# | |||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) | |||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) | |||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) | |||
CONSOLE_ENABLE ?= no # Console for debug(+400) | |||
COMMAND_ENABLE ?= yes # Commands for debug and configuration | |||
NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality | |||
MIDI_ENABLE ?= no # MIDI controls | |||
AUDIO_ENABLE ?= no # Audio output on port C6 | |||
UNICODE_ENABLE ?= no # Unicode | |||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID | |||
RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | |||
# 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,80 @@ | |||
/* | |||
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 ME | |||
#define PRODUCT MinOrca | |||
#define DESCRIPTION Tiny Whale | |||
/* key matrix size */ | |||
#define MATRIX_ROWS 4 | |||
#define MATRIX_COLS 12 | |||
/* MinOrca PCB default pin-out */ | |||
#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 } | |||
#define MATRIX_ROW_PINS { B0, B1, B2, B3 } | |||
#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)) \ | |||
) | |||
/* | |||
* 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,25 @@ | |||
# Build Options | |||
# change to "no" to disable the options, or define them in the Makefile in | |||
# the appropriate keymap folder that will get included automatically | |||
# | |||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) | |||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | |||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | |||
CONSOLE_ENABLE = no # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | |||
MIDI_ENABLE = no # MIDI controls | |||
AUDIO_ENABLE = no # Audio output on port C6 | |||
UNICODE_ENABLE = 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. | |||
# 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,12 @@ | |||
#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 | |||
#endif |
@ -0,0 +1,44 @@ | |||
// 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 "minorca.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
// Each layer gets a name for readability, which is then used in the keymap matrix below. | |||
// The underscores don't mean anything - you can have a layer called STUFF or any other name. | |||
// Layer names don't all need to be of the same length, obviously, and you can also skip them | |||
// entirely and just use numbers. | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[0] = { /* Base */ | |||
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, | |||
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_ENT }, | |||
{KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 }, | |||
{KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO } | |||
}, | |||
[1] = { /* First */ | |||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT }, | |||
{KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI }, | |||
{KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 }, | |||
{KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } | |||
}, | |||
[2] = { /* Second */ | |||
{KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT }, | |||
{KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT }, | |||
{KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 }, | |||
{KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO } | |||
}, | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
[0] = ACTION_LAYER_MOMENTARY(1), // to First overlay | |||
[1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay | |||
}; |
@ -0,0 +1,5 @@ | |||
# The Default Minorca Layout | |||
Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c | |||
It looks incomplete. |
@ -0,0 +1,23 @@ | |||
# 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 Minorca keymaps | |||
* **default** default Minorca layout | |||
* **rgb** layout with WS2812b control |
@ -0,0 +1,25 @@ | |||
# Build Options | |||
# change to "no" to disable the options, or define them in the Makefile in | |||
# the appropriate keymap folder that will get included automatically | |||
# | |||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) | |||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | |||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | |||
CONSOLE_ENABLE = no # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | |||
MIDI_ENABLE = no # MIDI controls | |||
AUDIO_ENABLE = no # Audio output on port C6 | |||
UNICODE_ENABLE = no # Unicode | |||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | |||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | |||
# 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,20 @@ | |||
#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 | |||
/* ws2812 RGB LED */ | |||
#define RGB_DI_PIN D5 | |||
#define RGBLIGHT_TIMER | |||
#define RGBLED_NUM 13 // Number of LEDs | |||
#define RGBLIGHT_HUE_STEP 10 | |||
#define RGBLIGHT_SAT_STEP 17 | |||
#define RGBLIGHT_VAL_STEP 17 | |||
#endif |
@ -0,0 +1,65 @@ | |||
// 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 "minorca.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
// Each layer gets a name for readability, which is then used in the keymap matrix below. | |||
// The underscores don't mean anything - you can have a layer called STUFF or any other name. | |||
// Layer names don't all need to be of the same length, obviously, and you can also skip them | |||
// entirely and just use numbers. | |||
#define _QWERTY 0 | |||
#define _LOWER 1 | |||
#define _RAISE 2 | |||
#define _TB 3 | |||
// Macro name shortcuts | |||
#define QWERTY M(_QWERTY) | |||
#define LOWER M(_LOWER) | |||
#define RAISE M(_RAISE) | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[_QWERTY] = { /* Qwerty */ | |||
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, | |||
{FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT}, | |||
{KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)}, | |||
{KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL} | |||
}, | |||
[_RAISE] = { | |||
{S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)}, | |||
{KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT}, | |||
{KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY} | |||
}, | |||
[_LOWER] = { | |||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS}, | |||
{KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT}, | |||
{KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END} | |||
}, | |||
[_TB] = { /* Tab */ | |||
{KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS}, | |||
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS}, | |||
{KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT}, | |||
{BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT} | |||
} | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
[0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB), | |||
[1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), | |||
[2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC), | |||
[3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), | |||
}; |
@ -0,0 +1,25 @@ | |||
#RGB backlight for MinOrca | |||
![wiring](example.jpg) | |||
Example of adding WS2812b LEDs to a MinOrca. | |||
http://www.40percent.club/2016/08/tiny-whale.html | |||
The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. | |||
* Tab + Z Toggle on/off | |||
* Tab + X Mode | |||
* Tab + C Hue+ | |||
* Tab + V Hue- | |||
* Tab + B Saturation+ | |||
* Tab + N Saturation- | |||
* Tab + M Brightness+ | |||
* Tab + , Brightness- | |||
Example wiring: | |||
WS2812 data pin is connected to D5 | |||
![wiring](wiring1.jpg) | |||
![wiring closeup](wiring2.jpg) |
@ -0,0 +1,6 @@ | |||
#include "minorca.h" | |||
void matrix_init_kb(void) { | |||
matrix_init_user(); | |||
} |
@ -0,0 +1,6 @@ | |||
#ifndef MINORCA_H | |||
#define MINORCA_H | |||
#include "quantum.h" | |||
#endif |
@ -0,0 +1,33 @@ | |||
minorca keyboard firmware | |||
====================== | |||
Handwired 40% keyboard | |||
http://www.panc.co/blog/minorcasebright-information-page | |||
## Quantum MK Firmware | |||
For the full Quantum feature list, see [the parent readme.md](/readme.md). | |||
## Building | |||
Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. | |||
Depending on which keymap you would like to use, you will have to compile slightly differently. | |||
### Default | |||
To build with the default keymap, simply run `make`. | |||
### Other Keymaps | |||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. | |||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: | |||
``` | |||
$ make KEYMAP=[default|jack|<name>] | |||
``` | |||
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. | |||
### Notable forks (which some of the keymap files are from) | |||
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) | |||
- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) | |||
- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) | |||
- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) |
@ -0,0 +1,104 @@ | |||
#include "phantom.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
// Used for SHIFT_ESC | |||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) | |||
// 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 _QW 0 | |||
#define _DV 1 | |||
#define _CM 2 | |||
#define _FL 3 | |||
// Macro name shortcuts | |||
#define QWERTY M(_QW) | |||
#define DVORAK M(_DV) | |||
#define COLEMAK M(_CM) | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[_QW] = { /* Layer 0: Qwerty */ | |||
{KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, | |||
{KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, | |||
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, | |||
{KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, | |||
{KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, | |||
{KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} | |||
}, | |||
[_DV] = { /* Layer 1: Dvorak */ | |||
{KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, | |||
{KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, | |||
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, | |||
{KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, | |||
{KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, | |||
{KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} | |||
}, | |||
[_CM] = { /* Layer 2: Colemak */ | |||
{KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS}, | |||
{KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP}, | |||
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN}, | |||
{KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX}, | |||
{KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX}, | |||
{KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT} | |||
}, | |||
[_FL] = { /* Layer 3: Functions */ | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, RESET, KC_MPRV, KC_MPLY, KC_MNXT}, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU}, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX}, | |||
{_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX}, | |||
{QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______}, | |||
}, | |||
}; | |||
enum function_id { | |||
SHIFT_ESC, | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
}; | |||
void persistant_default_layer_set(uint16_t default_layer) { | |||
eeconfig_update_default_layer(default_layer); | |||
default_layer_set(default_layer); | |||
} | |||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||
{ | |||
switch(id) { | |||
case _DV: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_DV); | |||
} | |||
break; | |||
case _QW: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_QW); | |||
} | |||
break; | |||
case _CM: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_CM); | |||
} | |||
break; | |||
} | |||
return MACRO_NONE; | |||
}; |
@ -0,0 +1,20 @@ | |||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | |||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | |||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | |||
CONSOLE_ENABLE = no # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | |||
MIDI_ENABLE = no # MIDI controls | |||
AUDIO_ENABLE = 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. | |||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | |||
ifndef QUANTUM_DIR | |||
include ../../../../Makefile | |||
endif |
@ -0,0 +1,8 @@ | |||
#ifndef CONFIG_USER_H | |||
#define CONFIG_USER_H | |||
#include "../../config.h" | |||
#define FORCE_NKRO 1 | |||
#endif |
@ -0,0 +1,215 @@ | |||
#include "preonic.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
#include "keymap_nordic.h" | |||
#ifdef AUDIO_ENABLE | |||
#include "audio.h" | |||
#endif | |||
// Each layer gets a name for readability, which is then used in the keymap matrix below. | |||
// The underscores don't mean anything - you can have a layer called STUFF or any other name. | |||
// Layer names don't all need to be of the same length, obviously, and you can also skip them | |||
// entirely and just use numbers. | |||
#define _QWERTY 0 | |||
#define _LOWER 3 | |||
#define _RAISE 4 | |||
#define _ADJUST 16 | |||
enum preonic_keycodes { | |||
QWERTY = SAFE_RANGE, | |||
LOWER, | |||
RAISE, | |||
BACKLIT | |||
}; | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
/* Qwerty | |||
* ,-----------------------------------------------------------------------------------. | |||
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | Bksp | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | Esc | Q | W | E | R | T | Y | U | I | O | P | Å | | |||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||
* | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä | | |||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||
* | Shift| < | Z | X | C | V | B | N | M | . | , | - | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | Ctrl | GUI | Alt |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | | |||
* `-----------------------------------------------------------------------------------' | |||
*/ | |||
[_QWERTY] = { | |||
{KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC}, | |||
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM }, | |||
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH}, | |||
{KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS}, | |||
{KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} | |||
}, | |||
/* Lower | |||
* ,-----------------------------------------------------------------------------------. | |||
* | | @ | £ | $ | | | { | [ | ] | } | \ | Del | | |||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||
* | | | | | | | | |VolUp | | | ~ | | |||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||
* | | | | | | | |LastS |PauseP|NextS | | * | | |||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||
* | | | | | | | | | |VolDwn| | | | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | | | | | | |Bspc | | | | | | | |||
* `-----------------------------------------------------------------------------------' | |||
*/ | |||
[_LOWER] = { | |||
{_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL}, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, | |||
{_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)}, | |||
{_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, | |||
{_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} | |||
}, | |||
/* Raise | |||
* ,-----------------------------------------------------------------------------------. | |||
* | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | | | |Mouse^| | | | |ScrlUp| | | ^ | | |||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||
* | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | " | | |||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||
* | | > | | | | | | |ScrlDown| : | ; | _ | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | | | | | |Bspc | | | | | | | | |||
* `-----------------------------------------------------------------------------------' | |||
*/ | |||
[_RAISE] = { | |||
{LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS}, | |||
{_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC}, | |||
{_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT}, | |||
{_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS}, | |||
{_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______} | |||
}, | |||
/* Adjust (Lower + Raise) | |||
* ,-----------------------------------------------------------------------------------. | |||
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | | | | Reset| | | | | | | | | | |||
* |------+------+------+------+------+-------------+------+------+------+------+------| | |||
* | | | | | | | | | | | |Rsft | | |||
* |------+------+------+------+------+------|------+------+------+------+------+------| | |||
* | |MusOn |MusOff| | | | | | | | | Reset| | |||
* |------+------+------+------+------+------+------+------+------+------+------+------| | |||
* | | | | | | | | | | | | | |||
* `-----------------------------------------------------------------------------------' | |||
*/ | |||
[_ADJUST] = { | |||
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, | |||
{_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______}, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT}, | |||
{_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET }, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | |||
} | |||
}; | |||
#ifdef AUDIO_ENABLE | |||
float tone_startup[][2] = { | |||
{NOTE_B5, 20}, | |||
{NOTE_B6, 8}, | |||
{NOTE_DS6, 20}, | |||
{NOTE_B6, 8} | |||
}; | |||
float tone_qwerty[][2] = SONG(QWERTY_SOUND); | |||
float tone_goodbye[][2] = SONG(GOODBYE_SOUND); | |||
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | |||
#endif | |||
void persistant_default_layer_set(uint16_t default_layer) { | |||
eeconfig_update_default_layer(default_layer); | |||
default_layer_set(default_layer); | |||
} | |||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
switch (keycode) { | |||
case QWERTY: | |||
if (record->event.pressed) { | |||
#ifdef AUDIO_ENABLE | |||
PLAY_NOTE_ARRAY(tone_qwerty, false, 0); | |||
#endif | |||
persistant_default_layer_set(1UL<<_QWERTY); | |||
} | |||
return false; | |||
break; | |||
case LOWER: | |||
if (record->event.pressed) { | |||
layer_on(_LOWER); | |||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||
} else { | |||
layer_off(_LOWER); | |||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||
} | |||
return false; | |||
break; | |||
case RAISE: | |||
if (record->event.pressed) { | |||
layer_on(_RAISE); | |||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||
} else { | |||
layer_off(_RAISE); | |||
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |||
} | |||
return false; | |||
break; | |||
case BACKLIT: | |||
if (record->event.pressed) { | |||
register_code(KC_RSFT); | |||
#ifdef BACKLIGHT_ENABLE | |||
backlight_step(); | |||
#endif | |||
} else { | |||
unregister_code(KC_RSFT); | |||
} | |||
return false; | |||
break; | |||
} | |||
return true; | |||
}; | |||
void matrix_init_user(void) { | |||
#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 |
@ -0,0 +1,3 @@ | |||
# Jacwib's preonic keymap. | |||
Designed for use with a swedish language. |
@ -0,0 +1,75 @@ | |||
# MCU name | |||
#MCU = at90usb1287 | |||
MCU = atmega32u4 | |||
# Processor frequency. | |||
# This will define a symbol, F_CPU, in all source code files equal to the | |||
# processor frequency in Hz. You can then use this symbol in your source code to | |||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done | |||
# automatically to create a 32-bit value in your source code. | |||
# | |||
# This will be an integer division of F_USB below, as it is sourced by | |||
# F_USB after it has run through any CPU prescalers. Note that this value | |||
# does not *change* the processor frequency - it should merely be updated to | |||
# reflect the processor speed set externally so that the code can use accurate | |||
# software delays. | |||
F_CPU = 16000000 | |||
# | |||
# LUFA specific | |||
# | |||
# Target architecture (see library "Board Types" documentation). | |||
ARCH = AVR8 | |||
# Input clock frequency. | |||
# This will define a symbol, F_USB, in all source code files equal to the | |||
# input clock frequency (before any prescaling is performed) in Hz. This value may | |||
# differ from F_CPU if prescaling is used on the latter, and is required as the | |||
# raw input clock is fed directly to the PLL sections of the AVR for high speed | |||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' | |||
# at the end, this will be done automatically to create a 32-bit value in your | |||
# source code. | |||
# | |||
# If no clock division is performed on the input clock inside the AVR (via the | |||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. | |||
F_USB = $(F_CPU) | |||
# Interrupt driven control endpoint task(+60) | |||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT | |||
# Boot Section Size in *bytes* | |||
# Teensy halfKay 512 | |||
# Teensy++ halfKay 1024 | |||
# Atmel DFU loader 4096 | |||
# LUFA bootloader 4096 | |||
# USBaspLoader 2048 | |||
OPT_DEFS += -DBOOTLOADER_SIZE=4096 | |||
# Build Options | |||
# change yes to no to disable | |||
# | |||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) | |||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) | |||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) | |||
CONSOLE_ENABLE ?= yes # Console for debug(+400) | |||
COMMAND_ENABLE ?= yes # Commands for debug and configuration | |||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE | |||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend | |||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |||
NKRO_ENABLE ?= yes # USB Nkey Rollover | |||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default | |||
MIDI_ENABLE ?= no # MIDI controls | |||
UNICODE_ENABLE ?= no # Unicode | |||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID | |||
AUDIO_ENABLE ?= no # Audio output on port C6 | |||
ifndef QUANTUM_DIR | |||
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 0xFEAE | |||
#define PRODUCT_ID 0x8844 | |||
#define DEVICE_VER 0x0002 | |||
#define MANUFACTURER Evan Sailer | |||
#define PRODUCT TheVan 44 | |||
#define DESCRIPTION keyboard firmware for TV44 | |||
/* key matrix size */ | |||
#define MATRIX_ROWS 4 | |||
#define MATRIX_COLS 12 | |||
/* | |||
* Keyboard Matrix Assignments | |||
* | |||
* Change this to how you wired your keyboard | |||
* COLS: AVR pins used for columns, left to right | |||
* ROWS: AVR pins used for rows, top to bottom | |||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) | |||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) | |||
* | |||
*/ | |||
#define MATRIX_ROW_PINS { D7, B5, F7, D4 } | |||
#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 } | |||
#define UNUSED_PINS | |||
/* COL2ROW or ROW2COL */ | |||
#define DIODE_DIRECTION COL2ROW | |||
// #define BACKLIGHT_PIN B7 | |||
// #define BACKLIGHT_BREATHING | |||
// #define BACKLIGHT_LEVELS 3 | |||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ | |||
#define DEBOUNCING_DELAY 5 | |||
/* define if matrix has ghost (lacks anti-ghosting diodes) */ | |||
//#define MATRIX_HAS_GHOST | |||
/* number of backlight levels */ | |||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | |||
#define LOCKING_SUPPORT_ENABLE | |||
/* Locking resynchronize hack */ | |||
#define LOCKING_RESYNC_ENABLE | |||
/* | |||
* Force NKRO | |||
* | |||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved | |||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the | |||
* makefile for this to work.) | |||
* | |||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) | |||
* until the next keyboard reset. | |||
* | |||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is | |||
* fully operational during normal computer usage. | |||
* | |||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) | |||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by | |||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a | |||
* power-up. | |||
* | |||
*/ | |||
//#define FORCE_NKRO | |||
/* | |||
* Magic Key Options | |||
* | |||
* Magic keys are hotkey commands that allow control over firmware functions of | |||
* the keyboard. They are best used in combination with the HID Listen program, | |||
* found here: https://www.pjrc.com/teensy/hid_listen.html | |||
* | |||
* The options below allow the magic key functionality to be changed. This is | |||
* useful if your keyboard/keypad is missing keys and you want magic key support. | |||
* | |||
*/ | |||
/* key combination for magic key command */ | |||
#define IS_COMMAND() ( \ | |||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | |||
) | |||
/* control how magic key switches layers */ | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false | |||
/* override magic key keymap */ | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS | |||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM | |||
//#define MAGIC_KEY_HELP1 H | |||
//#define MAGIC_KEY_HELP2 SLASH | |||
//#define MAGIC_KEY_DEBUG D | |||
//#define MAGIC_KEY_DEBUG_MATRIX X | |||
//#define MAGIC_KEY_DEBUG_KBD K | |||
//#define MAGIC_KEY_DEBUG_MOUSE M | |||
//#define MAGIC_KEY_VERSION V | |||
//#define MAGIC_KEY_STATUS S | |||
//#define MAGIC_KEY_CONSOLE C | |||
//#define MAGIC_KEY_LAYER0_ALT1 ESC | |||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE | |||
//#define MAGIC_KEY_LAYER0 0 | |||
//#define MAGIC_KEY_LAYER1 1 | |||
//#define MAGIC_KEY_LAYER2 2 | |||
//#define MAGIC_KEY_LAYER3 3 | |||
//#define MAGIC_KEY_LAYER4 4 | |||
//#define MAGIC_KEY_LAYER5 5 | |||
//#define MAGIC_KEY_LAYER6 6 | |||
//#define MAGIC_KEY_LAYER7 7 | |||
//#define MAGIC_KEY_LAYER8 8 | |||
//#define MAGIC_KEY_LAYER9 9 | |||
//#define MAGIC_KEY_BOOTLOADER PAUSE | |||
//#define MAGIC_KEY_LOCK CAPS | |||
//#define MAGIC_KEY_EEPROM E | |||
//#define MAGIC_KEY_NKRO N | |||
//#define MAGIC_KEY_SLEEP_LED Z | |||
/* | |||
* Feature disable options | |||
* These options are also useful to firmware size reduction. | |||
*/ | |||
/* disable debug print */ | |||
//#define NO_DEBUG | |||
/* disable print */ | |||
//#define NO_PRINT | |||
/* disable action features */ | |||
//#define NO_ACTION_LAYER | |||
//#define NO_ACTION_TAPPING | |||
//#define NO_ACTION_ONESHOT | |||
//#define NO_ACTION_MACRO | |||
//#define NO_ACTION_FUNCTION | |||
#endif |
@ -0,0 +1,21 @@ | |||
# 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 = no # Enable keyboard backlight functionality | |||
MIDI_ENABLE = no # MIDI controls | |||
AUDIO_ENABLE = no # Audio output on port C6 | |||
UNICODE_ENABLE = no # Unicode | |||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | |||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | |||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | |||
ifndef QUANTUM_DIR | |||
include ../../../../Makefile | |||
endif |
@ -0,0 +1,8 @@ | |||
#ifndef CONFIG_USER_H | |||
#define CONFIG_USER_H | |||
#include "../../config.h" | |||
// place overrides here | |||
#endif |
@ -0,0 +1,97 @@ | |||
#include "tv44.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
// Each layer gets a name for readability, which is then used in the keymap matrix below. | |||
// The underscores don't mean anything - you can have a layer called STUFF or any other name. | |||
// Layer names don't all need to be of the same length, obviously, and you can also skip them | |||
// entirely and just use numbers. | |||
#define _QW 0 | |||
#define _DV 1 | |||
#define _CM 2 | |||
#define _L1 3 | |||
#define _L2 4 | |||
#define _L3 5 | |||
// Macro name shortcuts | |||
#define QWERTY M(_QW) | |||
#define DVORAK M(_DV) | |||
#define COLEMAK M(_CM) | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[_QW] = { /* 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 }, | |||
{MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, | |||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, | |||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } | |||
}, | |||
[_DV] = { /* Dvorak */ | |||
{KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, | |||
{MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, | |||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, | |||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } | |||
}, | |||
[_CM] = { /* 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 }, | |||
{MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) }, | |||
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, | |||
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } | |||
}, | |||
[_L1] = { /* LAYER 1 */ | |||
{KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, | |||
{_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, | |||
{_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, | |||
{_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } | |||
}, | |||
[_L2] = { /* LAYER 2 */ | |||
{_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ }, | |||
{KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT }, | |||
{_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ }, | |||
{_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ } | |||
}, | |||
[_L3] = { /* LAYER 3 */ | |||
{_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ }, | |||
{KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ }, | |||
{KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ }, | |||
{_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ } | |||
} | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
}; | |||
void persistant_default_layer_set(uint16_t default_layer) { | |||
eeconfig_update_default_layer(default_layer); | |||
default_layer_set(default_layer); | |||
} | |||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||
{ | |||
switch(id) { | |||
case _DV: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_DV); | |||
} | |||
break; | |||
case _QW: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_QW); | |||
} | |||
break; | |||
case _CM: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_CM); | |||
} | |||
break; | |||
} | |||
return MACRO_NONE; | |||
}; |
@ -0,0 +1 @@ | |||
# The default keymap for tv44 |
@ -0,0 +1,21 @@ | |||
# 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 = no # Enable keyboard backlight functionality | |||
MIDI_ENABLE = no # MIDI controls | |||
AUDIO_ENABLE = no # Audio output on port C6 | |||
UNICODE_ENABLE = no # Unicode | |||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | |||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | |||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | |||
ifndef QUANTUM_DIR | |||
include ../../../../Makefile | |||
endif |
@ -0,0 +1,8 @@ | |||
#ifndef CONFIG_USER_H | |||
#define CONFIG_USER_H | |||
#include "../../config.h" | |||
// place overrides here | |||
#endif |
@ -0,0 +1,92 @@ | |||
#include "tv44.h" | |||
#include "action_layer.h" | |||
#include "eeconfig.h" | |||
extern keymap_config_t keymap_config; | |||
#define _DV 0 | |||
#define _QW 1 | |||
#define _CM 2 | |||
#define _L1 3 | |||
#define _L2 4 | |||
// Macro name shortcuts | |||
#define DVORAK M(_DV) | |||
#define QWERTY M(_QW) | |||
#define COLEMAK M(_CM) | |||
// Fillers to make layering more clear | |||
#define _______ KC_TRNS | |||
#define XXXXXXX KC_NO | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
[_DV] = { /* 0: 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 }, | |||
{MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT }, | |||
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT }, | |||
{KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } | |||
}, | |||
[_QW] = { /* 1: 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 }, | |||
{MO(_L1), 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_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } | |||
}, | |||
[_CM] = { /* 2: 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 }, | |||
{MO(_L1), 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_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) } | |||
}, | |||
[_L1] = {/* 1: FN 1 */ | |||
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, | |||
{_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ }, | |||
{_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT }, | |||
{KC_ESC, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ } | |||
}, | |||
[_L2] = { /* 2: FN 2 */ | |||
{KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC }, | |||
{_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT }, | |||
{_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ }, | |||
{QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ } | |||
} | |||
}; | |||
const uint16_t PROGMEM fn_actions[] = { | |||
}; | |||
void persistant_default_layer_set(uint16_t default_layer) { | |||
eeconfig_update_default_layer(default_layer); | |||
default_layer_set(default_layer); | |||
} | |||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||
{ | |||
switch(id) { | |||
case _DV: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_DV); | |||
} | |||
break; | |||
case _QW: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_QW); | |||
} | |||
break; | |||
case _CM: | |||
if (record->event.pressed) { | |||
persistant_default_layer_set(1UL<<_CM); | |||
} | |||
break; | |||
} | |||
return MACRO_NONE; | |||
}; | |||
@ -0,0 +1 @@ | |||
# The default keymap for tv44 |
@ -0,0 +1,28 @@ | |||
tv44 keyboard firmware | |||
====================== | |||
## Quantum MK Firmware | |||
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md). | |||
## Building | |||
Download or clone the whole firmware and navigate to the keyboards/tv44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. | |||
Depending on which keymap you would like to use, you will have to compile slightly differently. | |||
### Default | |||
To build with the default keymap, simply run `make`. | |||
### Other Keymaps | |||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files. | |||
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like: | |||
``` | |||
$ make keymap=[default|jack|<name>] | |||
``` | |||
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` |
@ -0,0 +1,28 @@ | |||
#include "tv44.h" | |||
void matrix_init_kb(void) { | |||
// put your keyboard start-up code here | |||
// runs once when the firmware starts up | |||
matrix_init_user(); | |||
} | |||
void matrix_scan_kb(void) { | |||
// put your looping keyboard code here | |||
// runs every cycle (a lot) | |||
matrix_scan_user(); | |||
} | |||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { | |||
// put your per-action keyboard code here | |||
// runs for every action, just before processing by the firmware | |||
return process_record_user(keycode, record); | |||
} | |||
void led_set_kb(uint8_t usb_led) { | |||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here | |||
led_set_user(usb_led); | |||
} |
@ -0,0 +1,22 @@ | |||
#ifndef TV44_H | |||
#define TV44_H | |||
#include "quantum.h" | |||
// This a shortcut to help you visually see your layout. | |||
// The following is an example using the Planck MIT 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, K37, K38, K39, K3B \ | |||
) \ | |||
{ \ | |||
{ 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, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \ | |||
#endif |