commit
4225f0353c
@ -0,0 +1,135 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = atomic_lufa
|
||||
|
||||
# Directory common source filess exist
|
||||
TOP_DIR = ../..
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_plain.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# 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 = 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
|
||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||
|
||||
|
||||
# Optimize size but this may cause error "relocation truncated to fit"
|
||||
#EXTRALDFLAGS = -Wl,--relax
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TOP_DIR)
|
||||
|
||||
include $(TOP_DIR)/protocol/lufa.mk
|
||||
include $(TOP_DIR)/common.mk
|
||||
include $(TOP_DIR)/rules.mk
|
@ -0,0 +1,116 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = gh60_pjrc
|
||||
|
||||
# Directory common source filess exist
|
||||
TOP_DIR = ../..
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_poker.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# MCU name, you MUST set this to match the board you are using
|
||||
# type "make clean" after changing this, so all files will be rebuilt
|
||||
MCU = atmega32u4
|
||||
#MCU = at90usb1286
|
||||
|
||||
|
||||
# Processor frequency.
|
||||
# Normally the first thing your program should do is set the clock prescaler,
|
||||
# so your program will run at the correct speed. You should also set this
|
||||
# variable to same clock speed. The _delay_ms() macro uses this, and many
|
||||
# examples use this variable to calculate timings. Do not add a "UL" here.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover(+500)
|
||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TOP_DIR)
|
||||
|
||||
include $(TOP_DIR)/protocol/pjrc.mk
|
||||
include $(TOP_DIR)/common.mk
|
||||
include $(TOP_DIR)/rules.mk
|
||||
|
||||
plain: OPT_DEFS += -DKEYMAP_PLAIN
|
||||
plain: all
|
||||
|
||||
poker: OPT_DEFS += -DKEYMAP_POKER
|
||||
poker: all
|
||||
|
||||
poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
|
||||
poker_set: all
|
||||
|
||||
poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
|
||||
poker_bit: all
|
@ -0,0 +1,141 @@
|
||||
GH60 keyboard firmware
|
||||
======================
|
||||
DIY compact keyboard designed and run by komar007 and Geekhack community.
|
||||
|
||||
- Both Rev.A and Rev.B PCB are supported by one firmware binary(issue #64)
|
||||
|
||||
## GH60 Resources
|
||||
- [KOMAR's project page](http://blog.komar.be/projects/gh60-programmable-keyboard/)
|
||||
- [Prototyping](http://geekhack.org/index.php?topic=34959.0)
|
||||
- [Rev.A PCB test](http://geekhack.org/index.php?topic=37570.0)
|
||||
- [Rev.B PCB test](http://geekhack.org/index.php?topic=50685.0)
|
||||
- [Group buy](http://geekhack.org/index.php?topic=41464.0)
|
||||
|
||||
|
||||
## Build
|
||||
Move to this directory then just run `make` like:
|
||||
|
||||
$ make
|
||||
|
||||
Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason to do so now.
|
||||
|
||||
|
||||
## Keymap
|
||||
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 `keymap_<name>.c` and see keymap document(you can find in top README.md) and existent keymap files.
|
||||
|
||||
To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:
|
||||
|
||||
$ make KEYMAP=[poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
|
||||
|
||||
|
||||
### 1 Poker
|
||||
[keymap_poker.c](keymap_poker.c) emulates original Poker layers
|
||||
while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
|
||||
|
||||
Fn + Esc = `
|
||||
Fn + {left, down, up, right} = {home, pgdown, pgup, end}
|
||||
|
||||
#### 1.0 Default layer
|
||||
,-----------------------------------------------------------.
|
||||
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space |Fn |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
#### 1.1 Poker Fn layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
|
||||
|-----------------------------------------------------------|
|
||||
| |FnQ| Up| | | | | | |Cal| |Hom|Ins| |
|
||||
|-----------------------------------------------------------|
|
||||
| |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
|
||||
|-----------------------------------------------------------|
|
||||
| |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| Up |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | FnS |Fn |Left|Down|Righ|
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 2. Plain
|
||||
Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
|
||||
See [keymap_plain.c](keymap_plain.c) for detail.
|
||||
|
||||
#### 1.0 Plain Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 3. Hasu
|
||||
This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
|
||||
|
||||
|
||||
### 4. SpaceFN
|
||||
This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
|
||||
|
||||
#### 4.0 Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space/Fn |Alt |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
#### 4.1 SpaceFN layer
|
||||
,-----------------------------------------------------------.
|
||||
|` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | |PgU|Lef|Dow|Rig| | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | |Spc|PgD|` |~ | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | Fn | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 5. HHKB
|
||||
[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
|
||||
#### 5.0: Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
|
||||
|-----------------------------------------------------------|
|
||||
| |Gui |Alt | Space | |Alt |Gui | |
|
||||
`-----------------------------------------------------------'
|
||||
#### 5.1: HHKB Fn layer
|
||||
,-----------------------------------------------------------.
|
||||
|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | | | | | | | |Psc|Slk|Pus|Up | | |
|
||||
|-----------------------------------------------------------|
|
||||
| |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | +| -|End|PgD|Dow| | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
|
@ -0,0 +1,70 @@
|
||||
/*
|
||||
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
|
||||
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Ortholinear Keyboards
|
||||
#define PRODUCT Atomic Keyboard
|
||||
#define DESCRIPTION t.m.k. keyboard firmware for Atomic
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2012,2013 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/>.
|
||||
*/
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
/* translates key to keycode */
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||
{
|
||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||
}
|
||||
|
||||
/* translates Fn keycode to action */
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 2012,2013 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 KEYMAP_COMMON_H
|
||||
#define KEYMAP_COMMON_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "keycode.h"
|
||||
#include "action.h"
|
||||
#include "action_macro.h"
|
||||
#include "report.h"
|
||||
#include "host.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "keymap.h"
|
||||
|
||||
|
||||
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||
extern const uint16_t fn_actions[];
|
||||
|
||||
|
||||
#define KEYMAP( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3E, \
|
||||
K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_NO, KC_##K0E }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D, KC_##K2E }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_##K3C, KC_##K3D, KC_##K3E }, \
|
||||
{ KC_##K40, KC_##K41, KC_NO, KC_##K43, KC_NO, KC_NO, KC_##K46, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,145 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
/*
|
||||
* Hasu
|
||||
*/
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Default Layer
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space |Alt |Fn4 |Fn4 |Fn1 |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
||||
LCTL,A, S, D, F, G, H, J, K, L, FN2, QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, FN9, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,FN3, FN3, FN0),
|
||||
/* Keymap 1: colemak */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, \
|
||||
BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
|
||||
/* Keymap 2: dvorak */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, \
|
||||
TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, \
|
||||
CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, \
|
||||
LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
|
||||
/* Keymap 3: workman */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, \
|
||||
BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, \
|
||||
LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
|
||||
|
||||
/* Overlay 4: HHKB mode
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | | | | | | | |Psc|Slk|Pus|Up | |Inser|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | | | | | | +| -|End|PgD|Dow|Shift |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space |Alt |Gui |App | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
|
||||
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, TRNS,INS, \
|
||||
LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, ENT, \
|
||||
LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,RGUI,FN4, TRNS),
|
||||
/* Overlay 5: Vi mode (Slash)
|
||||
* ,-----------------------------------------------------------.
|
||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backsp |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgU|End| | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | | | | | |Hom|PgD|PgU|End| |Shift |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
|
||||
TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, TRNS,TRNS,TRNS,TRNS, \
|
||||
LCTL,TRNS,LEFT,DOWN,RGHT,TRNS,LEFT,DOWN,UP, RGHT,TRNS,TRNS, ENT, \
|
||||
LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGDN,PGUP,END, TRNS, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL),
|
||||
/* Overlay 6: Mouse mode (Semicolon/App)
|
||||
* ,-----------------------------------------------------------.
|
||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backsp |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | | | | | |MwL|MwD|MwU|MwR| | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Contro| |Ac0|Ac1|Ac1| |McL|McD|McU|McR| | |Return |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
|
||||
TAB, TRNS,TRNS,TRNS,TRNS,TRNS,WH_L,WH_D,WH_U,WH_R,TRNS,TRNS,TRNS,TRNS, \
|
||||
LCTL,TRNS,ACL0,ACL1,ACL2,TRNS,MS_L,MS_D,MS_U,MS_R,TRNS,TRNS, ENT, \
|
||||
LSFT,TRNS,TRNS,TRNS,TRNS,BTN3,BTN2,BTN1,BTN4,BTN5,TRNS, RSFT, \
|
||||
LCTL,LGUI,LALT, BTN1, TRNS,TRNS,TRNS,RCTL),
|
||||
/* Overlay 7: Layout selector
|
||||
* ,-----------------------------------------------------------.
|
||||
* | Lq| Lc| Ld| Lw| | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |Lq |Lw | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | |Ld | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | |Lc | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
* Lq: set Qwerty layout
|
||||
* Lc: set Colemak layout
|
||||
* Ld: set Dvorak layout
|
||||
* Lw: set Workman layout
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
FN5, FN6, FN7, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,FN5, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,FN6, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_LAYER_MOMENTARY(4),
|
||||
[1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH),
|
||||
[2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN),
|
||||
[3] = ACTION_LAYER_MOMENTARY(6),
|
||||
[4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
|
||||
[5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
|
||||
[6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
|
||||
[7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
|
||||
[8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
|
||||
[9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRV),
|
||||
};
|
@ -0,0 +1,52 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
/*
|
||||
* HHKB Layout
|
||||
*/
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: Default layer
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |Gui |Alt | Space | |Alt |Gui | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_HHKB(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
|
||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,FN0, \
|
||||
NO, LGUI,LALT, SPC, NO, RALT,RGUI,NO),
|
||||
/* 1: HHKB Fn layer
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | +| -|End|PgD|Dow| | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_HHKB(
|
||||
PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
|
||||
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, TRNS,TRNS, \
|
||||
TRNS,VOLD,VOLU,MUTE,EJCT,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, PENT, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN, TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_LAYER_MOMENTARY(1),
|
||||
};
|
@ -0,0 +1,44 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
[0] = KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, \
|
||||
ESC, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, MPLY, \
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
|
||||
LCTL, LALT, LGUI, SPC, FN1, LEFT, DOWN, UP, RGHT),
|
||||
[1] = KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, \
|
||||
TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, DEL, \
|
||||
ESC, A, R, S, T, D, H, N, E, I, O, QUOT, ENT, MPLY, \
|
||||
LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
|
||||
LCTL, LALT, LGUI, SPC, FN1, LEFT, DOWN, UP, RGHT),
|
||||
[2] = KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
|
||||
TAB, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, BSLS, DEL, \
|
||||
ESC, FN3, FN4, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS, ENT, MPLY, \
|
||||
LSFT, FN9, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, VOLD, VOLU, \
|
||||
LCTL, LALT, LGUI, SPC, TRNS, MNXT, VOLD, VOLU, MPLY),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
|
||||
[3] = ACTION_DEFAULT_LAYER_SET(0),
|
||||
[4] = ACTION_DEFAULT_LAYER_SET(1),
|
||||
|
||||
[9] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
|
||||
|
||||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
|
||||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
|
||||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
|
||||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
|
||||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
|
||||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
|
||||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
|
||||
};
|
@ -0,0 +1,104 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 1: colemak */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, \
|
||||
BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 2: dvorak */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, \
|
||||
TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, \
|
||||
CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, \
|
||||
LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 3: workman */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, \
|
||||
BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, \
|
||||
LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 4: Poker with Arrow */
|
||||
KEYMAP_ANSI(
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,LEFT,DOWN,RGHT),
|
||||
/* 5: Poker with Esc */
|
||||
KEYMAP_ANSI(
|
||||
ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
/* 6: Poker Fn
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |FnQ| Up| | | | | | |Cal| |Hom|Ins|FnL |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | FnS | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
* Fn: to Fn overlay
|
||||
* FnL: to Layout selector overaly
|
||||
* FnQ: toggle Esc overlay
|
||||
* FnS: toggle Arrow overlay
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,FN2, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, FN4, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN3, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
|
||||
TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS),
|
||||
/* 7: Layout selector
|
||||
* ,-----------------------------------------------------------.
|
||||
* | Lq| Lc| Ld| Lw| | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | |Lq |Lw | | | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | |Ld | | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | |Lc | | | | | | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
* Lq: set Qwerty layout
|
||||
* Lc: set Colemak layout
|
||||
* Ld: set Dvorak layout
|
||||
* Lw: set Workman layout
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
FN5, FN6, FN7, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,FN5, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,FN6, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
/* Poker Layout */
|
||||
[0] = ACTION_LAYER_MOMENTARY(6), // to Fn overlay
|
||||
[1] = ACTION_LAYER_TOGGLE(4), // toggle arrow overlay
|
||||
[2] = ACTION_LAYER_TOGGLE(5), // toggle Esc overlay
|
||||
[3] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // Task(RControl,RShift+Esc)
|
||||
[4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
|
||||
[5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
|
||||
[6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
|
||||
[7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
|
||||
[8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
// Poker fix with toggle and bit operation
|
||||
// Fn + Esc = `
|
||||
// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 4: Poker Default + Fn'd */
|
||||
[4] = KEYMAP_ANSI(
|
||||
TRNS,F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
CAPS,FN2, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN4, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
|
||||
TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS),
|
||||
/* 5: Poker with Arrow */
|
||||
KEYMAP_ANSI(
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, PGUP, \
|
||||
TRNS,TRNS,TRNS, TRNS, FN3, HOME,PGDN,END),
|
||||
/* 6: Poker with Esc */
|
||||
KEYMAP_ANSI(
|
||||
ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
/* 7: Poker with Arrow + Fn'd */
|
||||
KEYMAP_ANSI(
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,LEFT,DOWN,RGHT),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
/* Poker Layout */
|
||||
[0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH), // Poker Fn(with fix for Esc)
|
||||
[1] = ACTION_LAYER_TOGGLE(5), // Poker Arrow toggle
|
||||
[2] = ACTION_LAYER_TOGGLE(6), // Poker Esc toggle
|
||||
[3] = ACTION_LAYER_BIT_XOR(1, 0b1101, ON_BOTH), // Poker Fn(with fix for Arrow)
|
||||
[4] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN3 Task(RControl,RShift+Esc)
|
||||
};
|
@ -0,0 +1,82 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
// Poker fix with set(state transition)
|
||||
// Fn + Esc = `
|
||||
// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
KEYMAP_ANSI(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
||||
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
|
||||
/* 1: Poker with Arrow */
|
||||
KEYMAP_ANSI(
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
|
||||
TRNS,TRNS,TRNS, TRNS, FN1, LEFT,DOWN,RGHT),
|
||||
/* 2: Poker with Esc */
|
||||
KEYMAP_ANSI(
|
||||
ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, FN2, TRNS,TRNS,TRNS),
|
||||
/* 3: Poker with Arrow and Esc */
|
||||
KEYMAP_ANSI(
|
||||
ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
|
||||
TRNS,TRNS,TRNS, TRNS, FN3, LEFT,DOWN,RGHT),
|
||||
/* 4: Poker Fn'd */
|
||||
KEYMAP_ANSI(
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,FN6, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
|
||||
TRNS,TRNS,TRNS, FN5, FN4, TRNS,TRNS,TRNS),
|
||||
/* 5: Poker Fn'd arrow */
|
||||
KEYMAP_ANSI(
|
||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,FN7, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, PGUP, \
|
||||
TRNS,TRNS,TRNS, FN4, FN5, HOME,PGDN,END),
|
||||
/* 6: Poker Fn'd Esc */
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,FN4, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
|
||||
TRNS,TRNS,TRNS, FN7, FN6, TRNS,TRNS,TRNS),
|
||||
/* 7: Poker Fn'd Arrow + Esc */
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
|
||||
TRNS,FN5, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
|
||||
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
|
||||
TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, PGUP, \
|
||||
TRNS,TRNS,TRNS, FN6, FN7, HOME,PGDN,END),
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
/* Poker Layout */
|
||||
[0] = ACTION_LAYER_SET(4, ON_PRESS), // FN0 move to Fn'd when press
|
||||
[1] = ACTION_LAYER_SET(5, ON_PRESS), // FN1 move to Fn'd arrow when press
|
||||
[2] = ACTION_LAYER_SET(6, ON_PRESS), // FN2 move to Fn'd Esc when press
|
||||
[3] = ACTION_LAYER_SET(7, ON_PRESS), // FN3 move to Fn'd arrow + Esc when press
|
||||
|
||||
//[4] = ACTION_LAYER_CLEAR(ON_RELEASE), // FN4 clear overlay when release
|
||||
[4] = ACTION_LAYER_SET(0, ON_RELEASE), // FN4 clear overlay when release
|
||||
[5] = ACTION_LAYER_SET(1, ON_RELEASE), // FN5 move to arrow when release
|
||||
[6] = ACTION_LAYER_SET(2, ON_RELEASE), // FN6 move to Esc when release
|
||||
[7] = ACTION_LAYER_SET(3, ON_RELEASE), // FN7 move to arrow + Esc when release
|
||||
|
||||
[8] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN8 Task(RControl,RShift+Esc)
|
||||
};
|
@ -0,0 +1,55 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
/*
|
||||
* SpaceFN
|
||||
* http://geekhack.org/index.php?topic=51069.0
|
||||
*/
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Default Layer
|
||||
* ,-----------------------------------------------------------.
|
||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
* |-----------------------------------------------------------|
|
||||
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
* |-----------------------------------------------------------|
|
||||
* |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
|
||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
|
||||
LCTL,LGUI,LALT, FN0, RALT,RGUI,APP, RCTL),
|
||||
|
||||
/* Overlay 1: SpaceFN
|
||||
* ,-----------------------------------------------------------.
|
||||
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | |PgU|Lef|Dow|Rig| | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | |Spc|PgD|` |~ | | | |
|
||||
* |-----------------------------------------------------------|
|
||||
* | | | | | | | | |
|
||||
* `-----------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP_ANSI(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
|
||||
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,TRNS, TRNS, \
|
||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
|
||||
[1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
|
||||
};
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "stdint.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
void led_set(uint8_t usb_led)
|
||||
{
|
||||
if (usb_led & (1<<USB_LED_FUNCTION)) {
|
||||
// Output high.
|
||||
DDRF |= (1<<0);
|
||||
PORTF |= (1<<0);
|
||||
} else {
|
||||
// Output low.
|
||||
DDRF &= ~(1<<0);
|
||||
PORTF &= ~(1<<0);
|
||||
}
|
||||
}
|
@ -0,0 +1,219 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* scan matrix
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include "action_layer.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
# define DEBOUNCE 10
|
||||
#endif
|
||||
static uint8_t debouncing = DEBOUNCE;
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
|
||||
static matrix_row_t read_cols(void);
|
||||
static void init_cols(void);
|
||||
static void unselect_rows(void);
|
||||
static void select_row(uint8_t row);
|
||||
|
||||
|
||||
inline
|
||||
uint8_t matrix_rows(void)
|
||||
{
|
||||
return MATRIX_ROWS;
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_cols(void)
|
||||
{
|
||||
return MATRIX_COLS;
|
||||
}
|
||||
|
||||
static
|
||||
void setup_leds(void) {
|
||||
DDRF |= 0x00;
|
||||
PORTF |= 0x00;
|
||||
}
|
||||
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
// initialize row and col
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
setup_leds();
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
matrix_debouncing[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
select_row(i);
|
||||
_delay_us(30); // without this wait read unstable value.
|
||||
matrix_row_t cols = read_cols();
|
||||
if (matrix_debouncing[i] != cols) {
|
||||
matrix_debouncing[i] = cols;
|
||||
if (debouncing) {
|
||||
debug("bounce!: "); debug_hex(debouncing); debug("\n");
|
||||
}
|
||||
debouncing = DEBOUNCE;
|
||||
}
|
||||
unselect_rows();
|
||||
}
|
||||
|
||||
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;
|
||||
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++) {
|
||||
phex(row); print(": ");
|
||||
pbin_reverse16(matrix_get_row(row));
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop16(matrix[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Column pin configuration
|
||||
* col: 0 1 2 3 4 5 6 7 8 9 10 11
|
||||
* pin: F0 F1 F4 F5 F6 F7 B6 B5 B4 D7 D5 D4
|
||||
*/
|
||||
|
||||
static void init_cols(void)
|
||||
{
|
||||
DDRC &= ~(1<<6 | 1<<7);
|
||||
PORTC |= (1<<6 | 1<<7);
|
||||
DDRD &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
PORTD |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
DDRB &= ~(1<<4 | 1<<5 | 1<<6);
|
||||
PORTB |= (1<<4 | 1<<5 | 1<<6);
|
||||
DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
}
|
||||
|
||||
static matrix_row_t read_cols(void)
|
||||
{
|
||||
return (PINC&(1<<6) ? 0 : (1<< 0)) |
|
||||
(PINC&(1<<7) ? 0 : (1<< 1)) |
|
||||
(PIND&(1<<5) ? 0 : (1<< 2)) |
|
||||
(PIND&(1<<4) ? 0 : (1<< 3)) |
|
||||
(PIND&(1<<6) ? 0 : (1<< 4)) |
|
||||
(PIND&(1<<7) ? 0 : (1<< 5)) |
|
||||
(PINB&(1<<4) ? 0 : (1<< 6)) |
|
||||
(PINB&(1<<5) ? 0 : (1<< 7)) |
|
||||
(PINB&(1<<6) ? 0 : (1<< 8)) |
|
||||
(PINF&(1<<7) ? 0 : (1<< 9)) |
|
||||
(PINF&(1<<6) ? 0 : (1<<10)) |
|
||||
(PINF&(1<<5) ? 0 : (1<<11)) |
|
||||
(PINF&(1<<4) ? 0 : (1<<12)) |
|
||||
(PINF&(1<<1) ? 0 : (1<<13)) |
|
||||
(PINF&(1<<0) ? 0 : (1<<14));
|
||||
}
|
||||
|
||||
/* Row pin configuration
|
||||
* row: 0 1 2 3
|
||||
* pin: B0 B1 B2 B3
|
||||
*/
|
||||
static void unselect_rows(void)
|
||||
{
|
||||
// Hi-Z(DDR:0, PORT:0) to unselect
|
||||
DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
|
||||
PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
|
||||
}
|
||||
|
||||
static void select_row(uint8_t row)
|
||||
{
|
||||
switch (row) {
|
||||
case 0:
|
||||
DDRB |= (1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
break;
|
||||
case 1:
|
||||
DDRB |= (1<<1);
|
||||
PORTB &= ~(1<<1);
|
||||
break;
|
||||
case 2:
|
||||
DDRB |= (1<<2);
|
||||
PORTB &= ~(1<<2);
|
||||
break;
|
||||
case 3:
|
||||
DDRB |= (1<<3);
|
||||
PORTB &= ~(1<<3);
|
||||
break;
|
||||
case 4:
|
||||
DDRB |= (1<<7);
|
||||
PORTB &= ~(1<<7);
|
||||
break;
|
||||
}
|
||||
}
|
@ -0,0 +1,135 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = planck_lufa
|
||||
|
||||
# Directory common source filess exist
|
||||
TOP_DIR = ../..
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_sean.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# 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 = 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
|
||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||
|
||||
|
||||
# Optimize size but this may cause error "relocation truncated to fit"
|
||||
#EXTRALDFLAGS = -Wl,--relax
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TOP_DIR)
|
||||
|
||||
include $(TOP_DIR)/protocol/lufa.mk
|
||||
include $(TOP_DIR)/common.mk
|
||||
include $(TOP_DIR)/rules.mk
|
@ -0,0 +1,116 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = gh60_pjrc
|
||||
|
||||
# Directory common source filess exist
|
||||
TOP_DIR = ../..
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_jack.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# MCU name, you MUST set this to match the board you are using
|
||||
# type "make clean" after changing this, so all files will be rebuilt
|
||||
MCU = atmega32u4
|
||||
#MCU = at90usb1286
|
||||
|
||||
|
||||
# Processor frequency.
|
||||
# Normally the first thing your program should do is set the clock prescaler,
|
||||
# so your program will run at the correct speed. You should also set this
|
||||
# variable to same clock speed. The _delay_ms() macro uses this, and many
|
||||
# examples use this variable to calculate timings. Do not add a "UL" here.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover(+500)
|
||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TOP_DIR)
|
||||
|
||||
include $(TOP_DIR)/protocol/pjrc.mk
|
||||
include $(TOP_DIR)/common.mk
|
||||
include $(TOP_DIR)/rules.mk
|
||||
|
||||
plain: OPT_DEFS += -DKEYMAP_PLAIN
|
||||
plain: all
|
||||
|
||||
poker: OPT_DEFS += -DKEYMAP_POKER
|
||||
poker: all
|
||||
|
||||
poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
|
||||
poker_set: all
|
||||
|
||||
poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
|
||||
poker_bit: all
|
@ -0,0 +1,141 @@
|
||||
GH60 keyboard firmware
|
||||
======================
|
||||
DIY compact keyboard designed and run by komar007 and Geekhack community.
|
||||
|
||||
- Both Rev.A and Rev.B PCB are supported by one firmware binary(issue #64)
|
||||
|
||||
## GH60 Resources
|
||||
- [KOMAR's project page](http://blog.komar.be/projects/gh60-programmable-keyboard/)
|
||||
- [Prototyping](http://geekhack.org/index.php?topic=34959.0)
|
||||
- [Rev.A PCB test](http://geekhack.org/index.php?topic=37570.0)
|
||||
- [Rev.B PCB test](http://geekhack.org/index.php?topic=50685.0)
|
||||
- [Group buy](http://geekhack.org/index.php?topic=41464.0)
|
||||
|
||||
|
||||
## Build
|
||||
Move to this directory then just run `make` like:
|
||||
|
||||
$ make
|
||||
|
||||
Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason to do so now.
|
||||
|
||||
|
||||
## Keymap
|
||||
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 `keymap_<name>.c` and see keymap document(you can find in top README.md) and existent keymap files.
|
||||
|
||||
To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:
|
||||
|
||||
$ make KEYMAP=[poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
|
||||
|
||||
|
||||
### 1 Poker
|
||||
[keymap_poker.c](keymap_poker.c) emulates original Poker layers
|
||||
while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
|
||||
|
||||
Fn + Esc = `
|
||||
Fn + {left, down, up, right} = {home, pgdown, pgup, end}
|
||||
|
||||
#### 1.0 Default layer
|
||||
,-----------------------------------------------------------.
|
||||
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space |Fn |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
#### 1.1 Poker Fn layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
|
||||
|-----------------------------------------------------------|
|
||||
| |FnQ| Up| | | | | | |Cal| |Hom|Ins| |
|
||||
|-----------------------------------------------------------|
|
||||
| |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
|
||||
|-----------------------------------------------------------|
|
||||
| |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| Up |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | FnS |Fn |Left|Down|Righ|
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 2. Plain
|
||||
Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
|
||||
See [keymap_plain.c](keymap_plain.c) for detail.
|
||||
|
||||
#### 1.0 Plain Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 3. Hasu
|
||||
This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
|
||||
|
||||
|
||||
### 4. SpaceFN
|
||||
This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
|
||||
|
||||
#### 4.0 Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl|Gui |Alt | Space/Fn |Alt |Gui |App |Ctrl|
|
||||
`-----------------------------------------------------------'
|
||||
#### 4.1 SpaceFN layer
|
||||
,-----------------------------------------------------------.
|
||||
|` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | |PgU|Lef|Dow|Rig| | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | |Spc|PgD|` |~ | | | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | Fn | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
|
||||
|
||||
### 5. HHKB
|
||||
[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
|
||||
#### 5.0: Default layer
|
||||
,-----------------------------------------------------------.
|
||||
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
|
||||
|-----------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
|
||||
|-----------------------------------------------------------|
|
||||
|Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
|
||||
|-----------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
|
||||
|-----------------------------------------------------------|
|
||||
| |Gui |Alt | Space | |Alt |Gui | |
|
||||
`-----------------------------------------------------------'
|
||||
#### 5.1: HHKB Fn layer
|
||||
,-----------------------------------------------------------.
|
||||
|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||
|-----------------------------------------------------------|
|
||||
|Caps | | | | | | | |Psc|Slk|Pus|Up | | |
|
||||
|-----------------------------------------------------------|
|
||||
| |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | +| -|End|PgD|Dow| | |
|
||||
|-----------------------------------------------------------|
|
||||
| | | | | | | | |
|
||||
`-----------------------------------------------------------'
|
||||
|
@ -0,0 +1,70 @@
|
||||
/*
|
||||
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
|
||||
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER jackhumbert
|
||||
#define PRODUCT Planck
|
||||
#define DESCRIPTION t.m.k. keyboard firmware for the Planck
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2012,2013 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/>.
|
||||
*/
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
/* translates key to keycode */
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||
{
|
||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||
}
|
||||
|
||||
/* translates Fn keycode to action */
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
Copyright 2012,2013 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 KEYMAP_COMMON_H
|
||||
#define KEYMAP_COMMON_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "keycode.h"
|
||||
#include "action.h"
|
||||
#include "action_macro.h"
|
||||
#include "report.h"
|
||||
#include "host.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "keymap.h"
|
||||
|
||||
|
||||
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||
extern const uint16_t fn_actions[];
|
||||
|
||||
|
||||
/* GH60 keymap definition macro
|
||||
* K2C, K31 and K3C are extra keys for ISO
|
||||
*/
|
||||
#define KEYMAP( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||
K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
|
||||
) { \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_NO, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,34 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP(
|
||||
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
|
||||
FN1, A, S, D, F, G, H, J, K, L, SCLN, ENT,
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, LBRC,
|
||||
LCTL, BSLS, QUOT, LALT, FN22, SPC, LEFT, UP, DOWN, RGHT, RBRC),
|
||||
[1] = KEYMAP(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
|
||||
TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, TRNS, TRNS, TRNS,
|
||||
TRNS, FN18, FN19, FN22, EQL, MINS, FN20, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, VOLD, VOLU, TRNS),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||
|
||||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
|
||||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
|
||||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
|
||||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
|
||||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
|
||||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
|
||||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
|
||||
};
|
@ -0,0 +1,49 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP( /* Jack */
|
||||
ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
|
||||
TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
|
||||
RSFT, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
|
||||
[1] = KEYMAP( /* Jack colemak */
|
||||
ESC, Q, W, F, P, G, J, L, U, Y, SCLN, BSPC,
|
||||
TAB, A, R, S, T, D, H, N, E, I, O, QUOT,
|
||||
LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, ENT,
|
||||
FN3, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
|
||||
[2] = KEYMAP( /* Jack RAISE */
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
|
||||
TRNS, FN3, FN4, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
|
||||
TRNS, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY),
|
||||
[3] = KEYMAP( /* Jack LOWER */
|
||||
FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
|
||||
TRNS, FN3, FN4, TRNS, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
|
||||
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
|
||||
[2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
|
||||
// [1] = ACTION_LAYER_ON_OFF(1),
|
||||
// [2] = ACTION_LAYER_ON_OFF(2),
|
||||
[3] = ACTION_DEFAULT_LAYER_SET(0),
|
||||
[4] = ACTION_DEFAULT_LAYER_SET(1),
|
||||
|
||||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
|
||||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
|
||||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
|
||||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
|
||||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
|
||||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
|
||||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
|
||||
};
|
@ -0,0 +1,51 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP( /* Native */
|
||||
ESC, Q, W, E, R, T, Y, U, I, O, P, FN2,
|
||||
BSPC, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
|
||||
TAB, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
|
||||
DEL, LCTL, NO, LSFT, LALT, SPC, NO, LEFT, DOWN, UP, RGHT),
|
||||
[1] = KEYMAP( /* QWERTY->PHOTOSHOP */
|
||||
DELETE, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, FN1,
|
||||
O, G, S, U, T, FN27, F21, F10, F11, F7, F8, F9,
|
||||
TAB, FN4, FN5, FN6, F1, FN7, F18, F19, F23, F20, F22, FN9,
|
||||
COMM, DOT, FN10, FN11, FN3, SPC, FN12, F2, FN8, F3, F14),
|
||||
[2] = KEYMAP( /* 2: FN3 PHOTOSHOP */
|
||||
ESC, FN25, FN26, NO, NO, NO, NO, NO, NO, NO, NO, NO,
|
||||
NO, NO, NO, NO, NO, NO, NO, NO, NO, FN19, FN20, FN21,
|
||||
C, NO, FN22, FN5, NO, FN23, NO, NO, NO, NO, FN13, NO,
|
||||
FN14, FN15, FN16, FN17, FN3, SPC, FN18, NO, NO, F24, NO),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout
|
||||
[2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets
|
||||
[3] = ACTION_LAYER_ON_OFF(2), // Photoshop function layer
|
||||
|
||||
[4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK
|
||||
[5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse
|
||||
[6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select
|
||||
[7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill
|
||||
[8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp
|
||||
[9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer
|
||||
[10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out
|
||||
[11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders
|
||||
[12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy
|
||||
[14] = ACTION_MODS_KEY(MOD_LALT, KC_LBRC), // prev layer
|
||||
[15] = ACTION_MODS_KEY(MOD_LALT, KC_RBRC), // next layer
|
||||
[16] = ACTION_MODS_KEY(MOD_LCTL, KC_EQL), // zoom in
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F11), // save as PNG
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LALT, KC_N), // normal layer blending
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending
|
||||
[25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back
|
||||
[26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward
|
||||
[27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize
|
||||
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP( /* Matrix Dvorak */
|
||||
QUOT, COMM, DOT, P, Y, SLSH, EQL, F, G, C, R, L,
|
||||
A, O, E, U, I, ESC, BSPC, D, H, T, N, S,
|
||||
SCLN, Q, J, K, X, TAB, ENT, B, M, W, V, Z,
|
||||
LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
|
||||
|
||||
[1] = KEYMAP( /* Matrix Qwerty */
|
||||
Q, W, E, R, T, SLSH, EQL, Y, U, I, O, P,
|
||||
A, S, D, F, G, ESC, BSPC, H, J, K, L, SCLN,
|
||||
Z, X, C, V, B, TAB, ENT, N, M, COMM, DOT, SLSH,
|
||||
LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
|
||||
|
||||
[2] = KEYMAP( /* fn1 */
|
||||
F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10,
|
||||
1, 2, 3, 4, 5, ESC, DEL, 6, 7, 8, 9, 0,
|
||||
FN3, FN4, NO, GRV, MINS, F18, INS, BSLS, LBRC, RBRC, NO, NO,
|
||||
TRNS, TRNS, TRNS, TRNS, FN1, TRNS, FN3, HOME, PGDN, PGUP, END),
|
||||
|
||||
[3] = KEYMAP( /* fn2 */
|
||||
F11, F12, F13, F14, F15, NO, NO, F16, F17, F18, F19, F20,
|
||||
F1, F2, F3, F4, F5, ESC, DEL, F6, F7, F8, F9, F10,
|
||||
FN3, FN4, NO, GRV, MINS, F18, INS, INS, PSCR, SLCK, PAUS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, FN3, TRNS, FN2, MUTE, VOLD, VOLU, MPLY),
|
||||
};
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
|
||||
[2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
|
||||
[3] = ACTION_DEFAULT_LAYER_SET(0),
|
||||
[4] = ACTION_DEFAULT_LAYER_SET(1),
|
||||
|
||||
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
|
||||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
|
||||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
|
||||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
|
||||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
|
||||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
|
||||
[28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
|
||||
};
|
@ -0,0 +1,100 @@
|
||||
// https://github.com/shanecelis/tmk_keyboard/blob/master/keyboard/planck/keymap_shane.c
|
||||
|
||||
#include "keymap_common.h"
|
||||
#include "action_layer.h"
|
||||
#include "action.h"
|
||||
#include "action_util.h"
|
||||
|
||||
/*
|
||||
Shane's Planck Layout
|
||||
http://www.keyboard-layout-editor.com/#/layouts/015d9011102619d7695c86ffe57cf441
|
||||
*/
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP_AND_SWAP( /* Base */
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, MINS,
|
||||
LCTL, A, S, D, F, G, H, J, K, L, SCLN, BSPC,
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
|
||||
/*ALPHA*/FN3, /*HYPER*/ /*SUPER*/LGUI, /*META*/LALT, LCTL, FN2, FN6, FN1, LEFT, DOWN, UP, RGHT),
|
||||
[2] = KEYMAP_AND_SWAP( /* More modifiers */
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RCTL, RALT, RGUI, TRNS),
|
||||
[4] = KEYMAP_AND_SWAP( /* WASD */
|
||||
TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, LEFT, DOWN, RIGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
|
||||
[6] = KEYMAP_AND_SWAP( /* Raise/FN1 */
|
||||
FN23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, EQL,
|
||||
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, ENT,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, BSLS, TRNS,
|
||||
PAUS, TRNS, TRNS, TRNS, TRNS, BSPC, TRNS, MUTE, PGUP, PGDN, MNXT),
|
||||
[8] = KEYMAP_AND_SWAP( /* Lower/FN2 */
|
||||
ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN19, FN20, TRNS,
|
||||
TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT,
|
||||
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN24, FN25, LBRC, RBRC, TRNS, TRNS,
|
||||
FN4, TRNS, TRNS, TRNS, TRNS, ENT, TRNS, MPLY, VOLD, VOLU, MPRV),
|
||||
};
|
||||
|
||||
enum function_id {
|
||||
SPACE_FN,
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
switch (id) {
|
||||
case SPACE_FN:
|
||||
if (record->event.pressed) {
|
||||
// Change the keyboard maps.
|
||||
// Whatever even layer's are on, turn on the odd one's too.
|
||||
for (uint8_t i = 0; i < 9; i += 2) {
|
||||
if (layer_state & (1UL << i))
|
||||
layer_on(i + 1);
|
||||
}
|
||||
layer_on(1);
|
||||
} else {
|
||||
// turn off all the even layers.
|
||||
for (uint8_t i = 0; i < 9; i += 2)
|
||||
layer_off(i + 1);
|
||||
|
||||
if (record->tap.count != 0) {
|
||||
// Space was tapped rather than used like a modifier.
|
||||
// So send a space up and down event.
|
||||
add_key(KC_SPC);
|
||||
send_keyboard_report();
|
||||
del_key(KC_SPC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_MOMENTARY(6), // to fist Fn overlay
|
||||
[2] = ACTION_LAYER_MOMENTARY(8), // to second Fn overlay
|
||||
[3] = ACTION_LAYER_TOGGLE(2), // toggle more modifiers
|
||||
[4] = ACTION_LAYER_TOGGLE(4), // toggle wasd
|
||||
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
|
||||
[6] = ACTION_FUNCTION_TAP(SPACE_FN),
|
||||
|
||||
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
|
||||
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
|
||||
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
|
||||
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
|
||||
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
|
||||
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
|
||||
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
|
||||
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
|
||||
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
|
||||
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
|
||||
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
|
||||
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
|
||||
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
|
||||
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
|
||||
[25] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
|
||||
[26] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
|
||||
};
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "stdint.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
void led_set(uint8_t usb_led)
|
||||
{
|
||||
if (usb_led & (1<<USB_LED_FUNCTION)) {
|
||||
// Output high.
|
||||
DDRF |= (1<<0);
|
||||
PORTF |= (1<<0);
|
||||
} else {
|
||||
// Output low.
|
||||
DDRF &= ~(1<<0);
|
||||
PORTF &= ~(1<<0);
|
||||
}
|
||||
}
|
@ -0,0 +1,193 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako
|
||||
Generated by planckkeyboard.com (2014 Jack Humbert)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* scan matrix
|
||||
*/
|
||||
#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 DEBOUNCE
|
||||
# define DEBOUNCE 10
|
||||
#endif
|
||||
static uint8_t debouncing = DEBOUNCE;
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
|
||||
static matrix_row_t read_cols(void);
|
||||
static void init_cols(void);
|
||||
static void unselect_rows(void);
|
||||
static void select_row(uint8_t row);
|
||||
|
||||
inline
|
||||
uint8_t matrix_rows(void)
|
||||
{
|
||||
return MATRIX_ROWS;
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_cols(void)
|
||||
{
|
||||
return MATRIX_COLS;
|
||||
}
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
// initialize row and col
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
matrix_debouncing[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
select_row(i);
|
||||
_delay_us(30); // without this wait read unstable value.
|
||||
matrix_row_t cols = read_cols();
|
||||
if (matrix_debouncing[i] != cols) {
|
||||
matrix_debouncing[i] = cols;
|
||||
if (debouncing) {
|
||||
debug("bounce!: "); debug_hex(debouncing); debug("\n");
|
||||
}
|
||||
debouncing = DEBOUNCE;
|
||||
}
|
||||
unselect_rows();
|
||||
}
|
||||
|
||||
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;
|
||||
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++) {
|
||||
phex(row); print(": ");
|
||||
pbin_reverse16(matrix_get_row(row));
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop16(matrix[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static void init_cols(void)
|
||||
{
|
||||
DDRB &= ~(1<<6 | 1<<5 | 1<<4);
|
||||
PORTB |= (1<<6 | 1<<5 | 1<<4);
|
||||
DDRD &= ~(1<<7 | 1<<6 | 1<<4);
|
||||
PORTD |= (1<<7 | 1<<6 | 1<<4);
|
||||
DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
|
||||
|
||||
}
|
||||
|
||||
static matrix_row_t read_cols(void)
|
||||
{
|
||||
return (PIND&(1<<4) ? 0 : (1<<0)) |
|
||||
(PIND&(1<<6) ? 0 : (1<<1)) |
|
||||
(PIND&(1<<7) ? 0 : (1<<2)) |
|
||||
(PINB&(1<<4) ? 0 : (1<<3)) |
|
||||
(PINB&(1<<5) ? 0 : (1<<4)) |
|
||||
(PINB&(1<<6) ? 0 : (1<<5)) |
|
||||
(PINF&(1<<7) ? 0 : (1<<6)) |
|
||||
(PINF&(1<<6) ? 0 : (1<<7)) |
|
||||
(PINF&(1<<5) ? 0 : (1<<8)) |
|
||||
(PINF&(1<<4) ? 0 : (1<<9)) |
|
||||
(PINF&(1<<1) ? 0 : (1<<10)) |
|
||||
(PINF&(1<<0) ? 0 : (1<<11));
|
||||
|
||||
}
|
||||
|
||||
static void unselect_rows(void)
|
||||
{
|
||||
DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
|
||||
PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3);
|
||||
|
||||
}
|
||||
|
||||
static void select_row(uint8_t row)
|
||||
{
|
||||
switch (row) {
|
||||
case 0:
|
||||
DDRB |= (1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
break;
|
||||
case 1:
|
||||
DDRB |= (1<<1);
|
||||
PORTB &= ~(1<<1);
|
||||
break;
|
||||
case 2:
|
||||
DDRB |= (1<<2);
|
||||
PORTB &= ~(1<<2);
|
||||
break;
|
||||
case 3:
|
||||
DDRB |= (1<<3);
|
||||
PORTB &= ~(1<<3);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in new issue