# Conflicts: # keyboards/planck/keymaps/dbroqua/keymap.cb6_b7_audio
@ -0,0 +1,93 @@ |
||||
# auto for anything unspecified |
||||
* text=auto |
||||
|
||||
# sources |
||||
*.c text |
||||
*.cc text |
||||
*.cxx text |
||||
*.cpp text |
||||
*.c++ text |
||||
*.hpp text |
||||
*.h text |
||||
*.h++ text |
||||
*.hh text |
||||
*.bat text |
||||
*.coffee text |
||||
*.css text |
||||
*.htm text |
||||
*.html text |
||||
*.inc text |
||||
*.ini text |
||||
*.js text |
||||
*.jsx text |
||||
*.json text |
||||
*.less text |
||||
*.php text |
||||
*.pl text |
||||
*.py text |
||||
*.rb text |
||||
*.sass text |
||||
*.scm text |
||||
*.scss text |
||||
*.sh text |
||||
*.sql text |
||||
*.styl text |
||||
*.ts text |
||||
*.xml text |
||||
*.xhtml text |
||||
|
||||
# make files (need to always use lf for compatibility with Windows 10 bash) |
||||
Makefile eol=lf |
||||
*.mk eol=lf |
||||
|
||||
# make files (need to always use lf for compatibility with Windows 10 bash) |
||||
*.sh eol=lf |
||||
|
||||
# documentation |
||||
*.markdown text |
||||
*.md text |
||||
*.mdwn text |
||||
*.mdown text |
||||
*.mkd text |
||||
*.mkdn text |
||||
*.mdtxt text |
||||
*.mdtext text |
||||
*.txt text |
||||
AUTHORS text |
||||
CHANGELOG text |
||||
CHANGES text |
||||
CONTRIBUTING text |
||||
COPYING text |
||||
INSTALL text |
||||
license text |
||||
LICENSE text |
||||
NEWS text |
||||
readme text |
||||
*README* text |
||||
TODO text |
||||
|
||||
GRAPHICS |
||||
*.ai binary |
||||
*.bmp binary |
||||
*.eps binary |
||||
*.gif binary |
||||
*.ico binary |
||||
*.jng binary |
||||
*.jp2 binary |
||||
*.jpg binary |
||||
*.jpeg binary |
||||
*.jpx binary |
||||
*.jxr binary |
||||
*.pdf binary |
||||
*.png binary |
||||
*.psb binary |
||||
*.psd binary |
||||
*.svg text |
||||
*.svgz binary |
||||
*.tif binary |
||||
*.tiff binary |
||||
*.wbmp binary |
||||
*.webp binary |
||||
|
||||
# hex files |
||||
*.hex binary |
@ -0,0 +1,70 @@ |
||||
|
||||
# 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
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
|
||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
|
||||
MIDI_ENABLE ?= no # MIDI controls
|
||||
AUDIO_ENABLE ?= no
|
||||
UNICODE_ENABLE ?= no # Unicode
|
||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
|
||||
ifndef QUANTUM_DIR |
||||
include ../../Makefile
|
||||
endif |
@ -0,0 +1,30 @@ |
||||
#include "amj60.h" |
||||
#include "led.h" |
||||
|
||||
void matrix_init_kb(void) { |
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user(); |
||||
led_init_ports(); |
||||
}; |
||||
|
||||
void matrix_scan_kb(void) { |
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
matrix_scan_user(); |
||||
}; |
||||
|
||||
void led_init_ports(void) { |
||||
// * Set our LED pins as output
|
||||
DDRB |= (1<<2); |
||||
} |
||||
|
||||
void led_set_kb(uint8_t usb_led) { |
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) { |
||||
// Turn capslock on
|
||||
PORTB &= ~(1<<2); |
||||
} else { |
||||
// Turn capslock off
|
||||
PORTB |= (1<<2); |
||||
} |
||||
} |
@ -0,0 +1,153 @@ |
||||
#ifndef AMJ60_H |
||||
#define AMJ60_H |
||||
|
||||
#include "quantum.h" |
||||
|
||||
// readability
|
||||
#define XXX KC_NO |
||||
|
||||
/* AMJ60 layout to the best of my knowledge matrix layout
|
||||
* ,-----------------------------------------------------------. |
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49| |
||||
* |-----------------------------------------------------------| |
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | |
||||
* |-----------------------------------------------------------| |
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | |
||||
* |-----------------------------------------------------------| |
||||
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d | |
||||
* |-----------------------------------------------------------| |
||||
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
#define KEYMAP( \ |
||||
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, k2c, k2d, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
|
||||
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
|
||||
} |
||||
|
||||
/*
|
||||
* ANSI |
||||
* ,-----------------------------------------------------------. |
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | |
||||
* |-----------------------------------------------------------| |
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | |
||||
* |-----------------------------------------------------------| |
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | |
||||
* |-----------------------------------------------------------| |
||||
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | |
||||
* |-----------------------------------------------------------| |
||||
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
#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 \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
|
||||
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||
} |
||||
|
||||
/* AMJ60 HHKB matrix layout
|
||||
* ,------------------------------------------------------------. |
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49 | |
||||
* |------------------------------------------------------------| |
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | |
||||
* |------------------------------------------------------------| |
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | |
||||
* |------------------------------------------------------------| |
||||
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c | |
||||
* |------------------------------------------------------------| |
||||
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | |
||||
* `------------------------------------------------------------' |
||||
*/ |
||||
|
||||
#define 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 \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
|
||||
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
|
||||
} |
||||
|
||||
/* ISO
|
||||
* ,-----------------------------------------------------------. |
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | |
||||
* |-----------------------------------------------------------| |
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | |
||||
* |-----------------------------------------------------------| |
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d | |
||||
* |-----------------------------------------------------------| |
||||
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | |
||||
* |-----------------------------------------------------------| |
||||
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
#define KEYMAP_ISO( \ |
||||
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, k3d, \
|
||||
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||
} |
||||
/* ISO w/ split right shift key matrix layout
|
||||
* ,-----------------------------------------------------------. |
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | |
||||
* |-----------------------------------------------------------| |
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | |
||||
* |-----------------------------------------------------------| |
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d | |
||||
* |-----------------------------------------------------------| |
||||
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c | |
||||
* |-----------------------------------------------------------| |
||||
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
#define KEYMAP_ISO_SPLITRSHIFT( \ |
||||
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, k3d, k3c, \
|
||||
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
|
||||
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
|
||||
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
|
||||
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
|
||||
} |
||||
|
||||
void matrix_init_user(void); |
||||
void matrix_scan_user(void); |
||||
|
||||
#endif |
@ -0,0 +1,94 @@ |
||||
/*
|
||||
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 0x6066 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER Han Chen |
||||
#define PRODUCT AMJ60 |
||||
#define DESCRIPTION qmk port of AMJ60 PCB |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 5 |
||||
#define MATRIX_COLS 14 |
||||
|
||||
// ROWS: Top to bottom, COLS: Left to right
|
||||
|
||||
#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5} |
||||
#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3} |
||||
#define UNUSED_PINS |
||||
|
||||
#define BACKLIGHT_PIN B6 |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
/* define if matrix has ghost */ |
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */ |
||||
#define DEBOUNCING_DELAY 5 |
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ |
||||
#define LOCKING_SUPPORT_ENABLE |
||||
/* Locking resynchronize hack */ |
||||
#define LOCKING_RESYNC_ENABLE |
||||
|
||||
/* key combination for command */ |
||||
#define IS_COMMAND() ( \ |
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
) |
||||
|
||||
/* Backlight configuration
|
||||
*/ |
||||
#define BACKLIGHT_LEVELS 4 |
||||
|
||||
/* Underlight configuration
|
||||
*/ |
||||
|
||||
#define RGB_DI_PIN E2 |
||||
#define RGBLIGHT_TIMER |
||||
#define RGBLED_NUM 8 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10 |
||||
#define RGBLIGHT_SAT_STEP 17 |
||||
#define RGBLIGHT_VAL_STEP 17 |
||||
|
||||
/*
|
||||
* 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,23 @@ |
||||
# 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 = 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,42 @@ |
||||
#!/bin/bash |
||||
# adjust for cpu |
||||
# -j 16 gave best result on a hyperthreaded quad core core i7 |
||||
|
||||
LIMIT=10 |
||||
THREADS="-j 16" |
||||
KMAP=iso_split_rshift |
||||
|
||||
echo "We need sudo later" |
||||
sudo ls 2>&1 /dev/null |
||||
|
||||
function wait_bootloader { |
||||
echo "Waiting for Bootloader..." |
||||
local STARTTIME=$(date +"%s") |
||||
local REMIND=0 |
||||
local EXEC=dfu-programmer |
||||
local TARGET=atmega32u4 |
||||
while true |
||||
do |
||||
sudo $EXEC $TARGET get > /dev/null 2>&1 |
||||
[ $? -eq 0 ] && break |
||||
ENDTIME=$(date +"%s") |
||||
DURATION=$(($ENDTIME-$STARTTIME)) |
||||
if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ] |
||||
then |
||||
echo "Did you forget to press the reset button?" |
||||
REMIND=1 |
||||
fi |
||||
sleep 1 |
||||
done |
||||
} |
||||
make clean |
||||
make KEYMAP=${KMAP} ${THREADS} |
||||
if [[ $? -eq 0 ]] |
||||
then |
||||
echo "please trigger flashing!" |
||||
wait_bootloader |
||||
sudo make KEYMAP=${KMAP} dfu ${THREADS} |
||||
else |
||||
echo "make failed" |
||||
exit 77 |
||||
fi |
@ -0,0 +1,147 @@ |
||||
// 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 "amj60.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 _DEF 0 |
||||
#define _SPC 1 |
||||
#define _TAB 2 |
||||
#define _SFX 3 |
||||
|
||||
// dual-role shortcuts
|
||||
#define TABDUAL LT(_TAB, KC_TAB) |
||||
#define CAPSDUAL CTL_T(KC_ESC) |
||||
#define SPACEDUAL LT(_SPC, KC_SPACE) |
||||
#define ENTERDUAL CTL_T(KC_ENT) |
||||
// arrow cluster duality bottom right corner
|
||||
#define ARRLEFT ALT_T(KC_LEFT) |
||||
#define ARRDOWN GUI_T(KC_DOWN) |
||||
#define ARRUP SFT_T(KC_UP) |
||||
#define ARRRIGHT CTL_T(KC_RIGHT) |
||||
// german brackets
|
||||
#define GER_CUR_L RALT(KC_7) // [
|
||||
#define GER_CUR_R RALT(KC_0) // ]
|
||||
#define GER_PAR_L LSFT(KC_8) // (
|
||||
#define GER_PAR_R LSFT(KC_9) // )
|
||||
#define GER_ANG_L KC_NUBS // <
|
||||
#define GER_ANG_R LSFT(KC_NUBS) // >
|
||||
#define GER_BRC_L RALT(KC_8) // [
|
||||
#define GER_BRC_R RALT(KC_9) // ]
|
||||
|
||||
// increase readability
|
||||
#define _______ KC_TRNS |
||||
#define XXXXXXX KC_NO |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
/* Keymap _DEF: Default Layer
|
||||
* ,-----------------------------------------------------------. |
||||
* |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |
||||
* |-----------------------------------------------------------| |
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1 |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | |
||||
* |-----------------------------------------------------------| |
||||
* |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is
|
||||
* `-----------------------------------------------------------' LEFT DWN RIGHT |
||||
*/ |
||||
[_DEF] = KEYMAP_ISO_SPLITRSHIFT( |
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||
TABDUAL, 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, \
|
||||
CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
|
||||
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), |
||||
|
||||
/* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
|
||||
* ,-----------------------------------------------------------. |
||||
* |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete| |
||||
* |-----------------------------------------------------------| |
||||
* | |Paus| Up| [ | ] | | | | ( | ) | | | | | |
||||
* |-----------------------------------------------------------| |
||||
* | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | < | > | |M0 | | | | | Vol+ | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | |Alt |Prev|Vol-|Next| |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_SPC] = KEYMAP_ISO_SPLITRSHIFT( |
||||
KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||
_______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
|
||||
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
|
||||
_______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
|
||||
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), |
||||
|
||||
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
|
||||
* ,-----------------------------------------------------------. |
||||
* |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | | | | { | } | | | | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | | |AF2| | | | | PgUp | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | |Alt |Pos1|PgDn|End | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_TAB] = KEYMAP_ISO_SPLITRSHIFT( |
||||
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
|
||||
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
|
||||
_______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
|
||||
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), |
||||
|
||||
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
|
||||
* ,-----------------------------------------------------------. |
||||
* |RSET| | | | | | | 7| 8| 9| | | |Backsp | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | | | 4 | 5 | 6 | | | | \ | |
||||
* |-----------------------------------------------------------| |
||||
* | | L | L | | | | | 1 | 2 | 3 | | | Return | |
||||
* |-----------------------------------------------------------| |
||||
* | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent |
||||
* |-----------------------------------------------------------| LED controlling |
||||
* |Ctrl|Win |Alt | |Alt |Left|Down|Right| |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_SFX] = KEYMAP_ISO_SPLITRSHIFT( |
||||
RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
|
||||
_______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
|
||||
_______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
|
||||
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), |
||||
}; |
||||
|
||||
enum function_id { |
||||
LAUNCH, |
||||
RGBLED_TOGGLE, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
[1] = ACTION_FUNCTION(LAUNCH), |
||||
[10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), |
||||
}; |
||||
|
||||
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: |
||||
return (record->event.pressed ?
|
||||
MACRO( D(RALT), T(SPC), U(RALT), END ) |
||||
:MACRO( END )); |
||||
break; |
||||
case 1: |
||||
return (record->event.pressed ?
|
||||
MACRO( D(LALT), T(F2), U(LALT), END ) |
||||
:MACRO( END )); |
||||
break; |
||||
} |
||||
return MACRO_NONE; |
||||
}; |
@ -0,0 +1,30 @@ |
||||
toneman77's custom spacefn Layout |
||||
===================== |
||||
|
||||
##Quantum MK Firmware |
||||
For the full Quantum feature list, see the parent readme.md. |
||||
|
||||
# Features |
||||
* heavily modified ISO (!) layout with split right shift key |
||||
* spaceFn |
||||
* Dual-Role keys: |
||||
* |
||||
| Original key | when tapped | when held | |
||||
| ---------------- | ------------- | ------------- | |
||||
| Space | Space | layer change | |
||||
| Caps lock | Escape | Control | |
||||
| Tab | Tab | layer change | |
||||
| Enter | Enter | Control | |
||||
|
||||
* vim-style arrow keys on hjkl (spacefn layer) |
||||
* corresponding Home/PgDn/PgUp/End on hjkl (tab layer) |
||||
* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift |
||||
* more bonus arrow keys on wasd (spacefn layer) |
||||
* media keys prev/next/play/vol+/vol- (spacefn layer) |
||||
* firmware bootloader button |
||||
* additional brackets that only work in german layout due to horrible placement |
||||
in the default qwertz layout |
||||
|
||||
|
||||
### Additional Credits |
||||
* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys) |
@ -0,0 +1,4 @@ |
||||
#!/bin/bash |
||||
git checkout amj60 # gets you on branch amj60 |
||||
git fetch origin # gets you up to date with origin |
||||
git merge origin/master |
@ -0,0 +1,57 @@ |
||||
AMJ60 keyboard firmware |
||||
====================== |
||||
DIY/Assembled compact 60% keyboard. |
||||
|
||||
## 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/amj60 |
||||
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. |
||||
|
||||
## Variations |
||||
KEYMAP macros for the following layouts are available: |
||||
|
||||
* default, for all the available, possible keys |
||||
* ANSI, for 60% ANSI keyboard |
||||
* ISO |
||||
* ISO w/ split right shift key |
||||
* HHKB |
||||
|
||||
Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge. |
||||
|
||||
### Original tmk firmware |
||||
The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60). |
||||
|
||||
## Further information |
||||
Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found |
||||
|
||||
* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0) |
||||
* [chinese discussion](https://www.v2ex.com/t/161887) |
||||
* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module |
||||
* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1). |
||||
* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/) |
@ -0,0 +1,10 @@ |
||||
These are notes on how to build and deploy the firmware to Ez, but they are |
||||
from before the qmk restructuring. |
||||
|
||||
cd qmk_firmware/keyboard/ergodox_ez |
||||
make KEYMAP=jafo |
||||
cp ergodox_ez.hex keymaps/jafo/ |
||||
/tmp/teensy.64bit |
||||
Open hex keymap file |
||||
Program |
||||
Upload |
After Width: | Height: | Size: 175 KiB |
@ -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
|
||||
* |
||||
* ,--------------------------------------------------. ,--------------------------------------------------. |
||||
* | Grv | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | |
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| |
||||
* | = | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | |
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| |
||||
* | Esc/Cmd| A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | |
||||
* |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------| |
||||
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' |
||||
* |Grv/L1| '" | Del | Left | Right| | Up | Down | [ | ] | ~L1 | |
||||
* `----------------------------------' `----------------------------------' |
||||
* ,-------------. ,-------------. |
||||
* |Ctrl/Esc| Alt| | Alt |Ctrl/Esc| |
||||
* ,------|------|------| |------+--------+------. |
||||
* | | | Home | | PgUp | | | |
||||
* | Space|Backsp|------| |------| Tab |Enter | |
||||
* | |ace | End | | PgDn | | | |
||||
* `--------------------' `----------------------' |
||||
*/ |
||||
// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, |
||||
KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), |
||||
GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, |
||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(MDIA), |
||||
LT(SYMB,KC_GRV),KC_QUOT, KC_DELT, KC_LEFT,KC_RGHT, |
||||
CTL_T(KC_ESC), KC_LALT, |
||||
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), |
||||
TG(MDIA), 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
|
||||
* |
||||
* ,--------------------------------------------------. ,--------------------------------------------------. |
||||
* | | 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
|
||||
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, |
||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, |
||||
KC_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| |------| |------| LEFT | DOWN | UP | RIGHT| | Play | |
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| |
||||
* | | | | | | | | | | | | Prev | Next | | | |
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' |
||||
* | | | Lclk | Mclk | 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_BTN1, KC_BTN3, 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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,20 @@ |
||||
# ErgoDox EZ "jafo" Configuration |
||||
|
||||
This is a layout based on the ErgoDox Ez default layout, but with some |
||||
customizations I made for my use-case. I use Linux, vi and the i3 window |
||||
manager, so I made these changes: |
||||
|
||||
- Arrow keys laid out in vi positions in media layer. |
||||
|
||||
- Esc (tap) and Win (held) to the left of A. i3 uses Win key for navigation |
||||
and having that be symmetric on the left and right makes it easier. |
||||
|
||||
- Grave accent below equals, I was having a hard time using ~ |
||||
|
||||
- Layer 2 switch below the L1 switch, so I can go into a mode where I get |
||||
arrow keys under my vi motion fingers. |
||||
|
||||
- Making the Ctrl (held) and Esc (tap) on my thumbs symmetric. Not sure I |
||||
need that with the Esc left of A and Ctrl on the Z and / keys when held... |
||||
|
||||
 |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 120 KiB |
@ -1,27 +1,27 @@ |
||||
[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], |
||||
[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], |
||||
[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], |
||||
[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], |
||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], |
||||
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], |
||||
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"], |
||||
[{y:-0.375,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], |
||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#1e8fff"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], |
||||
[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#1e8fff",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#9977ee"},"Print\n\n\n\n\n\nScreen"], |
||||
[{y:-0.875,c:"#000000",t:"#3f68ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#3f68ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], |
||||
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], |
||||
[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], |
||||
[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], |
||||
[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], |
||||
[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], |
||||
[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], |
||||
[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], |
||||
[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#c6c600",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], |
||||
[{y:-0.625,x:6.5,c:"#1e8fff",t:"#000000",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], |
||||
[{y:-0.75,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"], |
||||
[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""], |
||||
[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], |
||||
[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"], |
||||
[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"], |
||||
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], |
||||
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], |
||||
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], |
||||
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], |
||||
[{x:2},"Home\n\n\nBrowser"], |
||||
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], |
||||
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], |
||||
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] |
||||
[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#6633ee",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], |
||||
[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nDown"] |
||||
|
||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 99 KiB |
@ -0,0 +1,17 @@ |
||||
# Workman dead with spacefn (kc60 @ QMK) |
||||
|
||||
## Layout reference |
||||
 |
||||
|
||||
## Build |
||||
|
||||
To build this keymap, simply run `make KEYMAP=workman-dead`. |
||||
|
||||
## Notes |
||||
|
||||
* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though) |
||||
* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference) |
||||
* hold `space` to access the `function` layer (marked blue in the reference) |
||||
* hold `tab` to activate the mouse layer |
||||
* the `function` layer contains mostly osx specific shortcuts |
||||
* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout |
After Width: | Height: | Size: 114 KiB |
@ -0,0 +1,183 @@ |
||||
#include "kc60.h" |
||||
|
||||
#define _WM 0 |
||||
#define _QW 1 |
||||
#define _DK 2 |
||||
#define _FUN 3 |
||||
#define _MS 4 |
||||
|
||||
#define _______ KC_NO |
||||
#define XXXXXXX KC_TRNS |
||||
|
||||
#define _DK_ACT 0 |
||||
#define _DK_REL 1 |
||||
#define _KC_COMS 2 |
||||
#define _KC_CENT 3 |
||||
|
||||
#define DK_ACT M(_DK_ACT) // activate dead key layer
|
||||
#define DK_REL M(_DK_REL) // release dead key layer
|
||||
#define KC_COMS M(_KC_COMS) // comma + space
|
||||
#define KC_CENT M(_KC_CENT) // comma + enter
|
||||
#define KC_TABM LT(_MS, KC_TAB) // press for tab, hold for mouse layer
|
||||
#define KC_SPFN LT(_FUN, KC_SPC) // press for space, hold for function layer (aka spacefn)
|
||||
#define KC_DFQW DF(_QW) // set default layer to qwerty
|
||||
#define KC_DFWM DF(_WM) // set default layer to workman
|
||||
#define KC_CMDQ LGUI(KC_Q) // command + q
|
||||
#define KC_CMDD LGUI(KC_D) // command + d
|
||||
#define KC_CMDA LGUI(KC_A) // command + a
|
||||
#define KC_CMDS LGUI(KC_S) // command + s
|
||||
#define KC_CMDZ LGUI(KC_Z) // command + z
|
||||
#define KC_CMDX LGUI(KC_X) // command + x
|
||||
#define KC_CMDC LGUI(KC_C) // command + c
|
||||
#define KC_CMDV LGUI(KC_V) // command + v
|
||||
#define KC_CSTB S(RCTL(KC_TAB)) // shift + control + tab
|
||||
#define KC_C_TB RCTL(KC_TAB) // control + tab
|
||||
#define KC_C_LF RCTL(KC_LEFT) // control + left
|
||||
#define KC_C_RT RCTL(KC_RGHT) // control + right
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
// Workman
|
||||
/*
|
||||
* ,-----------------------------------------------------------. |
||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp | |
||||
* |-----------------------------------------------------------| |
||||
* |Tab/M| Q| D| R| W| B| J| F| U| P| ;| [| ]| \ | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | A| S| H| T| G| Y| N| E| O| I| '| Return | |
||||
* |-----------------------------------------------------------| |
||||
* |Shift | Z| X| M| C| V| K| L| ,| .| /| Shift | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | qwerty | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_WM] = KEYMAP( /* Workman */ |
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||
KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||
KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \
|
||||
KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW), |
||||
|
||||
// QWERTY
|
||||
/*
|
||||
* ,-----------------------------------------------------------. |
||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp | |
||||
* |-----------------------------------------------------------| |
||||
* |Tab/M| Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return | |
||||
* |-----------------------------------------------------------| |
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | workman | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_QW] = KEYMAP( /* QWERTY */ |
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
|
||||
KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \
|
||||
KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN), |
||||
|
||||
// dead key layer
|
||||
/*
|
||||
* ,-----------------------------------------------------------. |
||||
* | | | | | | | | | | | | | | Bsp | |
||||
* |-----------------------------------------------------------| |
||||
* | | %| &| ?| +| @| $| _| [| ]| !| ~| ^| | |
||||
* |-----------------------------------------------------------| |
||||
* | | #| (| =| 0| {| }| 1| *| )| -| `| Return | |
||||
* |-----------------------------------------------------------| |
||||
* | | 6| 7| 8| 9| || \| 2| 3| 4| 5| | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | Alt | GUI | , | Alt | GUI | Ctrl | | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_DK] = KEYMAP( /* dead key layer */ |
||||
XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, \
|
||||
XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \
|
||||
_______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \
|
||||
_______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_RALT, KC_RGUI, KC_RCTL, _______), |
||||
|
||||
// function layer
|
||||
/*
|
||||
* ,-----------------------------------------------------------. |
||||
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|Del | |
||||
* |-----------------------------------------------------------| |
||||
* |Esc | Cq| Cd|cstb|ctb| | |pgd| up|pgu| | | |ins | |
||||
* |-----------------------------------------------------------| |
||||
* |Shift | Ca| Cs|clt|crt| | | lt| dw| rt|home|end| Bsp | |
||||
* |-----------------------------------------------------------| |
||||
* |Shift | Cz| Cx| | Cc| Cv| V-| V+|mute| | | | |
||||
* |-----------------------------------------------------------| |
||||
* |Ctrl | Alt | GUI | | Alt | GUI | Ctrl | Reset | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_FUN] = KEYMAP( /* function layer */ |
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||
KC_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \
|
||||
KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \
|
||||
KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_RALT, KC_RGUI, KC_RCTL, RESET), |
||||
|
||||
// mouse layer
|
||||
/*
|
||||
* ,-----------------------------------------------------------. |
||||
* | | | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------| |
||||
* | |fast|med|slow| | | | | up| | | | | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | | | lt| dw| rt| rc| | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------| |
||||
* | | | | lc | | | | | |
||||
* `-----------------------------------------------------------' |
||||
*/ |
||||
[_MS] = KEYMAP( /* mouse layer */ |
||||
XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, KC_BTN1, _______, _______, _______, _______), |
||||
}; |
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
||||
{ |
||||
switch(id) { |
||||
case _KC_COMS: |
||||
if (record->event.pressed) { |
||||
return MACRO(T(COMM), T(SPC), END); // comma + space
|
||||
} |
||||
break; |
||||
case _KC_CENT: |
||||
if (record->event.pressed) { |
||||
return MACRO(T(COMM), T(ENT), END); // comma + enter
|
||||
} |
||||
break; |
||||
case _DK_ACT: |
||||
if (record->event.pressed) { |
||||
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <)
|
||||
register_code(KC_COMM); |
||||
} else { // activate oneshot dead key layer otherwise
|
||||
layer_on(_DK); |
||||
set_oneshot_layer(_DK, ONESHOT_START); |
||||
} |
||||
} else { // make sure to deactive dead key layer on key release
|
||||
clear_oneshot_layer_state(ONESHOT_PRESSED); |
||||
unregister_code(KC_COMM); |
||||
} |
||||
break; |
||||
case _DK_REL: |
||||
if (record->event.pressed) { // act as 3 on keypress
|
||||
register_code(KC_3); |
||||
} else { // make sure to deactive dead key layer on key release
|
||||
clear_oneshot_layer_state(ONESHOT_PRESSED); |
||||
unregister_code(KC_3); |
||||
} |
||||
break; |
||||
} |
||||
|
||||
return MACRO_NONE; |
||||
}; |
@ -0,0 +1,77 @@ |
||||
|
||||
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u2
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= yes # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE ?= no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE ?= no # MIDI controls
|
||||
UNICODE_ENABLE ?= no # Unicode
|
||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||
|
||||
CUSTOM_MATRIX = yes
|
||||
SRC += matrix.c led.c
|
||||
|
||||
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 0xFEED |
||||
#define PRODUCT_ID 0x6050 |
||||
#define DEVICE_VER 0x0104 |
||||
#define MANUFACTURER Costar |
||||
#define PRODUCT Majestouch |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 8 |
||||
#define MATRIX_COLS 18 |
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments |
||||
* |
||||
* Change this to how you wired your keyboard |
||||
* COLS: AVR pins used for columns, left to right |
||||
* ROWS: AVR pins used for rows, top to bottom |
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) |
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) |
||||
* |
||||
*/ |
||||
//#define MATRIX_ROW_PINS { D0, D5 }
|
||||
//#define MATRIX_COL_PINS { F1, F0, B0 }
|
||||
//#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,51 @@ |
||||
#include "kitten_paw.h" |
||||
|
||||
enum layers { |
||||
DEFAULT, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
[DEFAULT] = KEYMAP(\
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
|
||||
KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
|
||||
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
|
||||
}; |
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |
||||
{ |
||||
// MACRODOWN only works in this function
|
||||
switch(id) { |
||||
case 0: |
||||
if (record->event.pressed) { |
||||
register_code(KC_RSFT); |
||||
} else { |
||||
unregister_code(KC_RSFT); |
||||
} |
||||
break; |
||||
} |
||||
return MACRO_NONE; |
||||
}; |
||||
|
||||
|
||||
void matrix_init_user(void) { |
||||
|
||||
} |
||||
|
||||
void matrix_scan_user(void) { |
||||
|
||||
} |
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
||||
return true; |
||||
} |
||||
|
||||
void led_set_user(uint8_t usb_led) { |
||||
|
||||
} |
@ -0,0 +1,30 @@ |
||||
#include "kitten_paw.h" |
||||
|
||||
void matrix_init_kb(void) { |
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_quantum(); |
||||
matrix_init_user(); |
||||
} |
||||
|
||||
void matrix_scan_kb(void) { |
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_quantum(); |
||||
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,47 @@ |
||||
#ifndef KITTEN_PAW_H |
||||
#define KITTEN_PAW_H |
||||
|
||||
#include "quantum.h" |
||||
|
||||
// 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
|
||||
/*
|
||||
Matrix col/row mapping |
||||
|
||||
,----. ,-------------------. ,-------------------. ,-------------------. ,--------------. |
||||
| J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 | |
||||
`----' `-------------------' `-------------------' `-------------------' `--------------' |
||||
,-------------------------------------------------------------------------. ,--------------. ,-------------------. |
||||
| J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 | |
||||
|-------------------------------------------------------------------------| |--------------| |-------------------| |
||||
| J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 | |
||||
|-------------------------------------------------------------------------| '--------------' |-------------- | |
||||
| O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | | |
||||
|-------------------------------------------------------------------------| ,----. |-------------------| |
||||
| N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 | |
||||
|-------------------------------------------------------------------------| ,--------------. |-------------- | |
||||
| A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | | |
||||
`-------------------------------------------------------------------------' `--------------' `-------------------' |
||||
*/ |
||||
|
||||
#define KEYMAP( \ |
||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
||||
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
|
||||
KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
|
||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
|
||||
) \
|
||||
{ \
|
||||
{KC_NO, KB0, KC0, KD0,KC_NO, KF0, KG0,KC_NO,KC_NO,KC_NO, KK0, KL0,KC_NO,KC_NO, KO0,KC_NO, KQ0, KR0}, \
|
||||
{ KA1, KB1,KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1,KC_NO,KC_NO,KC_NO,KC_NO, KQ1,KC_NO}, \
|
||||
{KC_NO, KB2,KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2,KC_NO, KN2,KC_NO, KP2, KQ2, KR2}, \
|
||||
{KC_NO, KB3,KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3,KC_NO, KQ3, KR3}, \
|
||||
{ KA4, KB4,KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4,KC_NO,KC_NO, KO4,KC_NO, KQ4, KR4}, \
|
||||
{ KA5,KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5,KC_NO,KC_NO, KO5,KC_NO, KQ5, KR5}, \
|
||||
{KC_NO, KB6, KC6,KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6,KC_NO,KC_NO, KO6,KC_NO, KQ6, KR6}, \
|
||||
{ KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7,KC_NO,KC_NO,KC_NO,KC_NO, KO7,KC_NO, KQ7, KR7} \
|
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,47 @@ |
||||
/*
|
||||
Copyright 2014 Ralf Schmitt <ralf@bunkertor.net> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <avr/io.h> |
||||
#include "stdint.h" |
||||
#include "led.h" |
||||
|
||||
/* LED pin configuration
|
||||
* |
||||
* Scroll Lock PC5 |
||||
* Caps Lock PC6 |
||||
* Num Lock PB7 |
||||
* |
||||
*/ |
||||
void led_set(uint8_t usb_led) { |
||||
DDRB |= (1<<7); |
||||
DDRC |= (1<<5) | (1<<6); |
||||
|
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) |
||||
PORTC &= ~(1<<6); |
||||
else |
||||
PORTC |= (1<<6); |
||||
|
||||
if (usb_led & (1<<USB_LED_NUM_LOCK)) |
||||
PORTB &= ~(1<<7); |
||||
else |
||||
PORTB |= (1<<7); |
||||
|
||||
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) |
||||
PORTC &= ~(1<<5); |
||||
else |
||||
PORTC |= (1<<5); |
||||
} |
@ -0,0 +1,164 @@ |
||||
/*
|
||||
Copyright 2014 Ralf Schmitt <ralf@bunkertor.net> |
||||
|
||||
This program is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 2 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <avr/io.h> |
||||
#include <util/delay.h> |
||||
#include "print.h" |
||||
#include "debug.h" |
||||
#include "util.h" |
||||
#include "matrix.h" |
||||
|
||||
#ifndef DEBOUNCING_DELAY |
||||
# define DEBOUNCING_DELAY 5 |
||||
#endif |
||||
static uint8_t debouncing = DEBOUNCING_DELAY; |
||||
|
||||
static matrix_row_t matrix[MATRIX_ROWS]; |
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS]; |
||||
|
||||
static uint8_t read_rows(void); |
||||
static void select_col(uint8_t col); |
||||
|
||||
inline uint8_t matrix_rows(void) { |
||||
return MATRIX_ROWS; |
||||
} |
||||
|
||||
inline uint8_t matrix_cols(void) { |
||||
return MATRIX_COLS; |
||||
} |
||||
|
||||
/* Column pin configuration
|
||||
* |
||||
* col: 0 1 2 3 4 5 6 7 |
||||
* pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2 |
||||
* |
||||
* Rrr pin configuration
|
||||
* |
||||
* These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low |
||||
* active), together with 2 rrrs driven directly from the micro |
||||
* controller, to control the 18 rrrs. The rrrs are driven from |
||||
* pins B6,5,4,3,2,1,0. |
||||
*/ |
||||
void matrix_init(void) { |
||||
DDRC &= ~0b10000100; // Row input pins
|
||||
DDRD &= ~0b01111110; |
||||
PORTC |= 0b10000100; |
||||
PORTD |= 0b01111110; |
||||
|
||||
DDRB |= 0b01111111; // Column output pins
|
||||
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) { |
||||
matrix[i] = 0; |
||||
matrix_debouncing[i] = 0; |
||||
} |
||||
} |
||||
|
||||
uint8_t matrix_scan(void) { |
||||
for (uint8_t col = 0; col < MATRIX_COLS; col++) { |
||||
select_col(col); |
||||
_delay_us(3); |
||||
uint8_t rows = read_rows(); |
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { |
||||
bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col); |
||||
bool curr_bit = rows & (1<<row); |
||||
if (prev_bit != curr_bit) { |
||||
matrix_debouncing[row] ^= ((matrix_row_t)1<<col); |
||||
debouncing = DEBOUNCING_DELAY; |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (debouncing) { |
||||
if (--debouncing) { |
||||
_delay_ms(1); |
||||
} |
||||
else { |
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
matrix[i] = matrix_debouncing[i]; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return 1; |
||||
} |
||||
|
||||
bool matrix_is_modified(void) { |
||||
if (debouncing) |
||||
return false; |
||||
else |
||||
return true; |
||||
} |
||||
|
||||
inline bool matrix_is_on(uint8_t row, uint8_t col) { |
||||
return (matrix[row] & ((matrix_row_t)1<<col)); |
||||
} |
||||
|
||||
inline matrix_row_t matrix_get_row(uint8_t row) { |
||||
return matrix[row]; |
||||
} |
||||
|
||||
void matrix_print(void) { |
||||
print("\nr/c 0123456789ABCDEF\n"); |
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { |
||||
xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row))); |
||||
} |
||||
} |
||||
|
||||
uint8_t matrix_key_count(void) { |
||||
uint8_t count = 0; |
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { |
||||
count += bitpop32(matrix[i]); |
||||
} |
||||
return count; |
||||
} |
||||
|
||||
static uint8_t read_rows(void) { |
||||
return |
||||
(PINC&(1<<7) ? 0 : (1<<0)) | |
||||
(PIND&(1<<5) ? 0 : (1<<1)) | |
||||
(PIND&(1<<3) ? 0 : (1<<2)) | |
||||
(PIND&(1<<1) ? 0 : (1<<3)) | |
||||
(PINC&(1<<2) ? 0 : (1<<4)) | |
||||
(PIND&(1<<2) ? 0 : (1<<5)) | |
||||
(PIND&(1<<4) ? 0 : (1<<6)) | |
||||
(PIND&(1<<6) ? 0 : (1<<7)); |
||||
} |
||||
|
||||
static void select_col(uint8_t col) { |
||||
switch (col) { |
||||
case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break; |
||||
case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break; |
||||
case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break; |
||||
case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break; |
||||
case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break; |
||||
case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break; |
||||
case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break; |
||||
case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break; |
||||
case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break; |
||||
case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break; |
||||
case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break; |
||||
case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break; |
||||
case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break; |
||||
case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break; |
||||
case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break; |
||||
case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break; |
||||
case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break; |
||||
case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break; |
||||
} |
||||
} |
@ -0,0 +1,32 @@ |
||||
kitten_paw keyboard firmware |
||||
====================== |
||||
This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. |
||||
Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies). |
||||
|
||||
NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me. |
||||
|
||||
## 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/kitten_paw 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/` |