aboutsummaryrefslogtreecommitdiff
path: root/keyboards/hhkb/ansi
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/hhkb/ansi')
-rw-r--r--keyboards/hhkb/ansi/ansi.c1
-rw-r--r--keyboards/hhkb/ansi/ansi.h23
-rw-r--r--keyboards/hhkb/ansi/config.h104
-rw-r--r--keyboards/hhkb/ansi/hhkb_avr.h157
-rw-r--r--keyboards/hhkb/ansi/info.json73
-rw-r--r--keyboards/hhkb/ansi/keymaps/blakedietz/README.md134
-rw-r--r--keyboards/hhkb/ansi/keymaps/blakedietz/config.h24
-rw-r--r--keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c125
-rw-r--r--keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk3
-rw-r--r--keyboards/hhkb/ansi/keymaps/brett/config.h17
-rw-r--r--keyboards/hhkb/ansi/keymaps/brett/keymap.c119
-rw-r--r--keyboards/hhkb/ansi/keymaps/brett/readme.md13
-rw-r--r--keyboards/hhkb/ansi/keymaps/brett/rules.mk4
-rw-r--r--keyboards/hhkb/ansi/keymaps/cinaeco/README.md23
-rw-r--r--keyboards/hhkb/ansi/keymaps/cinaeco/config.h20
-rw-r--r--keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c178
-rw-r--r--keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk20
-rw-r--r--keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c89
-rw-r--r--keyboards/hhkb/ansi/keymaps/dbroqua/readme.md26
-rw-r--r--keyboards/hhkb/ansi/keymaps/default/keymap.c56
-rw-r--r--keyboards/hhkb/ansi/keymaps/eric/keymap.c73
-rw-r--r--keyboards/hhkb/ansi/keymaps/krusli/config.h1
-rw-r--r--keyboards/hhkb/ansi/keymaps/krusli/keymap.c75
-rw-r--r--keyboards/hhkb/ansi/keymaps/lxol/keymap.c200
-rw-r--r--keyboards/hhkb/ansi/keymaps/mjt/config.h72
-rw-r--r--keyboards/hhkb/ansi/keymaps/mjt/keymap.c112
-rw-r--r--keyboards/hhkb/ansi/keymaps/mjt/readme.md16
-rw-r--r--keyboards/hhkb/ansi/keymaps/mjt/rules.mk1
-rw-r--r--keyboards/hhkb/ansi/keymaps/schaeferdev/README.md36
-rw-r--r--keyboards/hhkb/ansi/keymaps/schaeferdev/config.h9
-rw-r--r--keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c76
-rw-r--r--keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk1
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c143
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h15
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/config.h12
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/keymap.c186
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h32
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/readme.md14
-rw-r--r--keyboards/hhkb/ansi/keymaps/shela/rules.mk1
-rw-r--r--keyboards/hhkb/ansi/keymaps/smt/keymap.c172
-rw-r--r--keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c20
-rw-r--r--keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md22
-rw-r--r--keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore3
-rw-r--r--keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c12
-rw-r--r--keyboards/hhkb/ansi/keymaps/via/keymap.c68
-rw-r--r--keyboards/hhkb/ansi/keymaps/via/rules.mk1
-rw-r--r--keyboards/hhkb/ansi/keymaps/xyverz/keymap.c137
-rw-r--r--keyboards/hhkb/ansi/matrix.c211
-rw-r--r--keyboards/hhkb/ansi/readme.md14
-rw-r--r--keyboards/hhkb/ansi/rules.mk71
50 files changed, 3015 insertions, 0 deletions
diff --git a/keyboards/hhkb/ansi/ansi.c b/keyboards/hhkb/ansi/ansi.c
new file mode 100644
index 000000000..cefc4e069
--- /dev/null
+++ b/keyboards/hhkb/ansi/ansi.c
@@ -0,0 +1 @@
#include "ansi.h" \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/ansi.h b/keyboards/hhkb/ansi/ansi.h
new file mode 100644
index 000000000..28e8d2fef
--- /dev/null
+++ b/keyboards/hhkb/ansi/ansi.h
@@ -0,0 +1,23 @@
1#pragma once
2
3#include "quantum.h"
4
5#define LAYOUT( \
6 K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \
7 K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \
8 K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \
9 K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \
10 K35, K36, K37, K57, K56) \
11 \
12{ \
13 { K00, K01, K02, K03, K04, K05, K06, K07 }, \
14 { K10, K11, K12, K13, K14, K15, K16, K17 }, \
15 { K20, K21, K22, K23, K24, K25, K26, KC_NO }, \
16 { K30, K31, K32, K33, K34, K35, K36, K37 }, \
17 { K40, K41, K42, K43, K44, K45, K46, KC_NO }, \
18 { K50, K51, K52, K53, K54, K55, K56, K57 }, \
19 { K60, K61, K62, K63, K64, K65, K66, KC_NO }, \
20 { K70, K71, K72, K73, K74, K75, K76, KC_NO } \
21}
22
23#define LAYOUT_60_hhkb LAYOUT
diff --git a/keyboards/hhkb/ansi/config.h b/keyboards/hhkb/ansi/config.h
new file mode 100644
index 000000000..689fd5568
--- /dev/null
+++ b/keyboards/hhkb/ansi/config.h
@@ -0,0 +1,104 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x4848 // HH = happy hacking
24#define PRODUCT_ID 0x0001 // ANSI HHKB
25#define DEVICE_VER 0x0104
26#define MANUFACTURER q.m.k
27#define PRODUCT HHKB mod
28#define DESCRIPTION q.m.k keyboard firmware for HHKB
29
30/* key matrix size */
31#define MATRIX_ROWS 8
32#define MATRIX_COLS 8
33
34#define TAPPING_TERM 200
35
36/* number of backlight levels */
37#define BACKLIGHT_LEVELS 3
38
39/* Set 0 if debouncing isn't needed */
40#define DEBOUNCE 5
41
42/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
43//#define LOCKING_SUPPORT_ENABLE
44/* Locking resynchronize hack */
45//#define LOCKING_RESYNC_ENABLE
46
47#ifdef HHKB_RN42_ENABLE
48// rn42 support -- acquired from the tmk repo. This is almost certainly not
49// integrated with qmk in the correct way.
50
51#define SUART_OUT_PORT PORTD
52#define SUART_OUT_BIT 0
53#define SUART_IN_PIN PIND
54#define SUART_IN_BIT 1
55
56#ifdef __AVR_ATmega32U4__
57 /* iom32u4.h has no definition of UCSR1D. copy from iom32u2.h */
58 #define UCSR1D _SFR_MEM8(0xCB)
59 #define RTSEN 0
60 #define CTSEN 1
61
62 #define SERIAL_UART_BAUD 115200
63 #define SERIAL_UART_DATA UDR1
64 #define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
65 #define SERIAL_UART_RXD_VECT USART1_RX_vect
66 #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
67 #define SERIAL_UART_INIT() do { \
68 UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
69 UBRR1H = ((uint16_t)SERIAL_UART_UBRR>>8); /* baud rate */ \
70 UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
71 UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
72 UCSR1C |= (0<<UPM11) | (0<<UPM10); /* parity: none(00), even(01), odd(11) */ \
73 UCSR1D |= (0<<RTSEN) | (0<<CTSEN); /* RTS, CTS(no flow control by hardware) */ \
74 DDRD |= (1<<5); PORTD &= ~(1<<5); /* RTS for flow control by firmware */ \
75 sei(); \
76 } while(0)
77 #define SERIAL_UART_RTS_LO() do { PORTD &= ~(1<<5); } while (0)
78 #define SERIAL_UART_RTS_HI() do { PORTD |= (1<<5); } while (0)
79#else
80 #error "USART configuration is needed."
81#endif
82
83/* power control of key switch board */
84#define HHKB_POWER_SAVING
85
86#endif
87
88/*
89 * Feature disable options
90 * These options are also useful to firmware size reduction.
91*/
92
93/* disable debug print */
94//#define NO_DEBUG
95
96/* disable print */
97//#define NO_PRINT
98
99/* disable action features */
100//#define NO_ACTION_LAYER
101//#define NO_ACTION_TAPPING
102//#define NO_ACTION_ONESHOT
103//#define NO_ACTION_MACRO
104//#define NO_ACTION_FUNCTION
diff --git a/keyboards/hhkb/ansi/hhkb_avr.h b/keyboards/hhkb/ansi/hhkb_avr.h
new file mode 100644
index 000000000..f9446deef
--- /dev/null
+++ b/keyboards/hhkb/ansi/hhkb_avr.h
@@ -0,0 +1,157 @@
1#pragma once
2
3#include <stdint.h>
4#include <stdbool.h>
5#include <avr/io.h>
6#include <avr/interrupt.h>
7#include <util/delay.h>
8
9
10// Timer resolution check
11#if (1000000/TIMER_RAW_FREQ > 20)
12# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
13#endif
14
15
16/*
17 * HHKB Matrix I/O
18 *
19 * row: HC4051[A,B,C] selects scan row0-7
20 * row-ext: [En0,En1] row extention for JP
21 * col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
22 * key: on: 0/off: 1
23 * prev: hysteresis control: assert(1) when previous key state is on
24 */
25
26
27#if defined(__AVR_ATmega32U4__)
28/*
29 * For TMK HHKB alt controller(ATMega32U4)
30 *
31 * row: PB0-2
32 * col: PB3-5,6
33 * key: PD7(pull-uped)
34 * prev: PB7
35 * power: PD4(L:off/H:on)
36 * row-ext: PC6,7 for HHKB JP(active low)
37 */
38static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
39static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
40static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
41static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
42static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
43#ifdef HHKB_POWER_SAVING
44static inline void KEY_POWER_ON(void) {
45 DDRB = 0xFF; PORTB = 0x40; // change pins output
46 DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
47 /* Without this wait you will miss or get false key events. */
48 _delay_ms(5); // wait for powering up
49}
50static inline void KEY_POWER_OFF(void) {
51 /* input with pull-up consumes less than without it when pin is open. */
52 DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
53 DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
54}
55static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
56#else
57static inline void KEY_POWER_ON(void) {}
58static inline void KEY_POWER_OFF(void) {}
59static inline bool KEY_POWER_STATE(void) { return true; }
60#endif
61static inline void KEY_INIT(void)
62{
63 /* row,col,prev: output */
64 DDRB = 0xFF;
65 PORTB = 0x40; // unable
66 /* key: input with pull-up */
67 DDRD &= ~0x80;
68 PORTD |= 0x80;
69
70 KEY_UNABLE();
71 KEY_PREV_OFF();
72
73 KEY_POWER_OFF();
74}
75static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
76{
77 PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
78
79}
80
81
82#elif defined(__AVR_AT90USB1286__)
83/*
84 * For Teensy++(AT90USB1286)
85 *
86 * HHKB pro HHKB pro2
87 * row: PB0-2 (6-8) (5-7)
88 * col: PB3-5,6 (9-12) (8-11)
89 * key: PE6(pull-uped) (4) (3)
90 * prev: PE7 (5) (4)
91 *
92 * TODO: convert into 'staitc inline' function
93 */
94#define KEY_INIT() do { \
95 DDRB |= 0x7F; \
96 DDRE |= (1<<7); \
97 DDRE &= ~(1<<6); \
98 PORTE |= (1<<6); \
99} while (0)
100#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
101 (((COL) & 0x07)<<3) | \
102 ((ROW) & 0x07))
103#define KEY_ENABLE() (PORTB &= ~(1<<6))
104#define KEY_UNABLE() (PORTB |= (1<<6))
105#define KEY_STATE() (PINE & (1<<6))
106#define KEY_PREV_ON() (PORTE |= (1<<7))
107#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
108#define KEY_POWER_ON()
109#define KEY_POWER_OFF()
110#define KEY_POWER_STATE() true
111
112
113#else
114# error "define code for matrix scan"
115#endif
116
117
118#if 0
119// For ATMega328P with V-USB
120//
121// #elif defined(__AVR_ATmega328P__)
122// Ports for V-USB
123// key: PB0(pull-uped)
124// prev: PB1
125// row: PB2-4
126// col: PC0-2,3
127// power: PB5(Low:on/Hi-z:off)
128#define KEY_INIT() do { \
129 DDRB |= 0x3E; \
130 DDRB &= ~(1<<0); \
131 PORTB |= 1<<0; \
132 DDRC |= 0x0F; \
133 KEY_UNABLE(); \
134 KEY_PREV_OFF(); \
135} while (0)
136#define KEY_SELECT(ROW, COL) do { \
137 PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
138 PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
139} while (0)
140#define KEY_ENABLE() (PORTC &= ~(1<<3))
141#define KEY_UNABLE() (PORTC |= (1<<3))
142#define KEY_STATE() (PINB & (1<<0))
143#define KEY_PREV_ON() (PORTB |= (1<<1))
144#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
145// Power supply switching
146#define KEY_POWER_ON() do { \
147 KEY_INIT(); \
148 PORTB &= ~(1<<5); \
149 _delay_ms(1); \
150} while (0)
151#define KEY_POWER_OFF() do { \
152 DDRB &= ~0x3F; \
153 PORTB &= ~0x3F; \
154 DDRC &= ~0x0F; \
155 PORTC &= ~0x0F; \
156} while (0)
157#endif
diff --git a/keyboards/hhkb/ansi/info.json b/keyboards/hhkb/ansi/info.json
new file mode 100644
index 000000000..a36f1d44c
--- /dev/null
+++ b/keyboards/hhkb/ansi/info.json
@@ -0,0 +1,73 @@
1{
2 "keyboard_name": "HHKB",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 15,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 { "label": "Esc", "x": 0, "y": 0 },
11 { "label": "!", "x": 1, "y": 0 },
12 { "label": "@", "x": 2, "y": 0 },
13 { "label": "#", "x": 3, "y": 0 },
14 { "label": "$", "x": 4, "y": 0 },
15 { "label": "%", "x": 5, "y": 0 },
16 { "label": "^", "x": 6, "y": 0 },
17 { "label": "&", "x": 7, "y": 0 },
18 { "label": "*", "x": 8, "y": 0 },
19 { "label": "(", "x": 9, "y": 0 },
20 { "label": ")", "x": 10, "y": 0 },
21 { "label": "_", "x": 11, "y": 0 },
22 { "label": "+", "x": 12, "y": 0 },
23 { "label": "|", "x": 13, "y": 0 },
24 { "label": "~", "x": 14, "y": 0 },
25 { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
26 { "label": "Q", "x": 1.5, "y": 1 },
27 { "label": "W", "x": 2.5, "y": 1 },
28 { "label": "E", "x": 3.5, "y": 1 },
29 { "label": "R", "x": 4.5, "y": 1 },
30 { "label": "T", "x": 5.5, "y": 1 },
31 { "label": "Y", "x": 6.5, "y": 1 },
32 { "label": "U", "x": 7.5, "y": 1 },
33 { "label": "I", "x": 8.5, "y": 1 },
34 { "label": "O", "x": 9.5, "y": 1 },
35 { "label": "P", "x": 10.5, "y": 1 },
36 { "label": "{", "x": 11.5, "y": 1 },
37 { "label": "}", "x": 12.5, "y": 1 },
38 { "label": "Delete", "x": 13.5, "y": 1, "w": 1.5 },
39 { "label": "Control", "x": 0, "y": 2, "w": 1.75 },
40 { "label": "A", "x": 1.75, "y": 2 },
41 { "label": "S", "x": 2.75, "y": 2 },
42 { "label": "D", "x": 3.75, "y": 2 },
43 { "label": "F", "x": 4.75, "y": 2 },
44 { "label": "G", "x": 5.75, "y": 2 },
45 { "label": "H", "x": 6.75, "y": 2 },
46 { "label": "J", "x": 7.75, "y": 2 },
47 { "label": "K", "x": 8.75, "y": 2 },
48 { "label": "L", "x": 9.75, "y": 2 },
49 { "label": ":", "x": 10.75, "y": 2 },
50 { "label": "\"", "x": 11.75, "y": 2 },
51 { "label": "Return", "x": 12.75, "y": 2, "w": 2.25 },
52 { "label": "Shift", "x": 0, "y": 3, "w": 2.25 },
53 { "label": "Z", "x": 2.25, "y": 3 },
54 { "label": "X", "x": 3.25, "y": 3 },
55 { "label": "C", "x": 4.25, "y": 3 },
56 { "label": "V", "x": 5.25, "y": 3 },
57 { "label": "B", "x": 6.25, "y": 3 },
58 { "label": "N", "x": 7.25, "y": 3 },
59 { "label": "M", "x": 8.25, "y": 3 },
60 { "label": "<", "x": 9.25, "y": 3 },
61 { "label": ">", "x": 10.25, "y": 3 },
62 { "label": "?", "x": 11.25, "y": 3 },
63 { "label": "Shift", "x": 12.25, "y": 3, "w": 1.75 },
64 { "label": "Fn", "x": 14, "y": 3 },
65 { "label": "", "x": 1.5, "y": 4 },
66 { "label": "", "x": 2.5, "y": 4, "w": 1.5 },
67 { "x": 4, "y": 4, "w": 6 },
68 { "label": "", "x": 10, "y": 4, "w": 1.5 },
69 { "label": "", "x": 11.5, "y": 4 }
70 ]
71 }
72 }
73}
diff --git a/keyboards/hhkb/ansi/keymaps/blakedietz/README.md b/keyboards/hhkb/ansi/keymaps/blakedietz/README.md
new file mode 100644
index 000000000..4dff47a6e
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/blakedietz/README.md
@@ -0,0 +1,134 @@
1# QMK HHKB Keymap: blakedietz
2
3<!-- TODO: Link to Hasu's geekhack page from his name -->
4<!-- TODO: Link to the ergodox ez layout in this repository -->
5
6This is my (Blake Dietz's) own take on a QMK keymap for the Happy Hacking Keyboard Pro 2 alternate controller made by Hasu. A lot of the
7 functionality was inspired by the ergodox ez default layout.
8
9## Dependencies
10
11### macOS
12
13```bash
14brew tap osx-cross/avr
15brew install avr-libc
16brew install dfu-programmer
17```
18
19### Windows/Linux
20
21[Build Environment Setup](https://github.com/jackhumbert/qmk_firmware/wiki#build-environment-setup)
22
23## Flashing
24
25You will need to make sure that you have something that you can use to press the button on the alternate controller in
26order to put it into boot mode.
27
28From the hhkb directory run the following:
29
30```bash
31make clean
32make hhkb:blakedietz:dfu
33```
34
35Press the button on the alternate controller to put the board into boot mode.
36
37You'll see an output similar to the following:
38
39```bash
40make hhkb:blakedietz:dfu
41
42Making hhkb with keymap blakedietz and target dfu
43
44avr-gcc (GCC) 6.2.0
45Copyright (C) 2016 Free Software Foundation, Inc.
46This is free software; see the source for copying conditions. There is NO
47warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
48
49Size before:
50 text data bss dec hex filename
51 0 22162 0 22162 5692 hhkb_blakedietz.hex
52
53Compiling: keyboards/hhkb/keymaps/blakedietz/keymap.c [OK]
54Compiling: ./tmk_core/common/command.c [OK]
55Linking: .build/hhkb_blakedietz.elf [OK]
56Creating load file for Flash: .build/hhkb_blakedietz.hex [OK]
57
58Size after:
59 text data bss dec hex filename
60 0 22162 0 22162 5692 hhkb_blakedietz.hex
61
62dfu-programmer: no device present.
63Error: Bootloader not found. Trying again in 5s.
64dfu-programmer: no device present.
65Error: Bootloader not found. Trying again in 5s.
66Bootloader Version: 0x00 (0)
67Erasing flash... Success
68Checking memory from 0x0 to 0x6FFF... Empty.
69Checking memory from 0x0 to 0x56FF... Empty.
700% 100% Programming 0x5700 bytes...
71[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
720% 100% Reading 0x7000 bytes...
73[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
74Validating... Success
750x5700 bytes written into 0x7000 bytes memory (77.68%).
76```
77
78### Layers
79
80#### Default
81
82##### A more "standard" layout
83
84This layout places tilde in the standard location. Backspace is moved to the two upper-right-most keys and pipe
85is put back where it belongs (where backspace is on the default hhkb2 keymapping).
86
87##### Hyper key
88
89<!-- TODO: Link to Brett's article about the thyper key -->
90
91This layout throws out the HHKB's control key in favor of a Hyper key. Ctrl is instead placed on the z and / keys and
92can be activated with a long press. I find that this is far more ergonomic as it's less of a reach and it allows you to
93alternate to either hand when you need to use `ctrl` as a modifier.
94
95The hyper key can be held for hyper and tapped for escape. You'll find that this is quite nice for vim.
96
97Enter is also a hyper key. This allows for symmetry between control and enter. Hold for hyper, tap for enter.
98
99##### Tap to Hold
100
101###### CTL, ALT, GUI
102
103Since the HHKB does not have three super/meta keys, these keys were moved to pinky, ring and middle finger for ctrl, alt/
104 option and super respectively. This is closer to home row which I've found causes less strain.
105
106The Alt and Super keys are instead replaced with layer toggle keys to go to dev and mouse mode respectively.
107
108###### Space
109
110Hold space to switch to dev mode. This will put you on a layer to have vim like arrow functionality on h,j,k and l. Use
111this in editors that don't have vim keybindings.
112
113### Dev
114
115The Dev layer can be activated holding space or hitting the HHKB's Alt key. This will put you in a mode
116where all function keys are available and left, right, up and down are mapped to their vim equivalents. The function
117 keys are mapped in such a way that you can use them for debugging. Typically I map debugging functions in all IDEs to
118 the following for a seamless debugging experience (e.g. jumping from Intellij to chrome dev tools and back):
119
120 - f1 -> step over
121 - f2 -> step into
122 - f3 -> step out
123 - f4 -> continue
124 - f5 -> set break point on current line
125
126### Media
127
128The media layer can be activated by pressing and holding the semi-colon. I've also placed the play and pause key on the
129apostrophe key in the media layer. This allows you to easily roll your pinky from the media toggle (semi-colon) to the
130play/pause key in one fluid motion.
131
132I've also tried to logically map next/previous track along with volume up/down vim behavior. In vim since middle finger
133goes up on k and index finger goes down on j, next/prev track is k/j respectively. ,/m changes volume up/down
134respectively while toggled to the media layer.
diff --git a/keyboards/hhkb/ansi/keymaps/blakedietz/config.h b/keyboards/hhkb/ansi/keymaps/blakedietz/config.h
new file mode 100644
index 000000000..e0d2bce0f
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/blakedietz/config.h
@@ -0,0 +1,24 @@
1// Based off of this section:
2// https://github.com/qmk/qmk_firmware/blob/master/doc/BUILD_GUIDE.md#the-configh-file
3#ifndef CONFIG_BLAKEDIETZ_H
4#define CONFIG_BLAKEDIETZ_H
5
6// Bring in original defaults
7#include "../../config.h"
8
9// Define mousekey settings
10#define MOUSEKEY_DELAY 0
11#define MOUSEKEY_INTERVAL 20
12#define MOUSEKEY_MAX_SPEED 2
13#define MOUSEKEY_TIME_TO_MAX 5
14#define MOUSEKEY_WHEEL_DELAY 0
15
16// Set up tapdance functionality
17//#define TAPPING_TOGGLE 1
18// TAPPING_TERM is set in config.h this defaults to 200
19
20// This makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when
21// you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
22#define IGNORE_MOD_TAP_INTERRUPT
23
24#endif
diff --git a/keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c b/keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c
new file mode 100644
index 000000000..a9146a4a0
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c
@@ -0,0 +1,125 @@
1#include QMK_KEYBOARD_H
2
3// Layer names
4#define BASE 0
5#define DEV 1
6#define MOUSE 2
7#define MEDIA 3
8
9// Required for leader function. Measured in ms
10// #define LEADER_TIMEOUT 300
11
12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
13
14 /* BASE Level: Default Layer
15 |-----------+-------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+----|
16 | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bksp |Lead|
17 |-----------+-------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+----|
18 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | \ |
19 |-----------+-------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+----|
20 | Esc/Hyper | A | S | D | F | G | H | J | K | L |;/Media| ' | Enter | | |
21 |-----------+-------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+----|
22 | Shift | Z/Ctl | X/Alt | C/Gui | V | B | N | M | ,/Gui | ./Alt | //Ctl | Shift | Dev | | |
23 |-----------+-------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+----|
24 TODO: Maybe add a photoshop layer for when I need to hold spacebar down. Maybe just make it a layer that you
25 |------+------+-----------------------+------+------|
26 | Dev |Mouse | ******* Space ******* | Dev |Mouse |
27 |------+------+-----------------------+------+------|
28 */
29
30 [BASE] = LAYOUT( // default layer
31 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_LEAD,
32 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
33 ALL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MEDIA, KC_SCLN), KC_QUOT, ALL_T(KC_ENT),
34 KC_LSFT, CTL_T(KC_Z), ALT_T(KC_X), GUI_T(KC_C), KC_V, KC_B, KC_N, KC_M, GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_SLSH), KC_RSFT, TG(DEV),
35 TG(DEV), TG(MOUSE), LT(DEV, KC_SPC), TG(MOUSE), TG(DEV)),
36
37 /* Layer DEV: DEV mode (DEV Fn)
38 TODO: Add a cmd/tab function to the developer layer for quick switching between different applications when debugging
39 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
40 | | | | | | | | | | | | | | | |
41 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
42 | | | | | | | | | | | | | | | |
43 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
44 | | F1 | F2 | F3 | F4 | F5 | Left | Down | Up | Right | | | | | |
45 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
46 | | | | | | | | | | | | | | | |
47 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
48
49 |------+------+----------------------+------+------+
50 | **** | **** | ******************** | **** | **** |
51 |------+------+----------------------+------+------+
52 */
53
54 [DEV] = LAYOUT(
55 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
57 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS,
58 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV),
59 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
60
61 /* Layer MOUSE: MOUSE mode (MOUSE Fn)
62 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
63 | | | | | | | | | | | | | | | |
64 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
65 | | | | | | | | | | | | | | | |
66 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
67 | | | | | | | | | | | | | | | |
68 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
69 | | | | | | | | | | | | | | | |
70 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
71
72 |------+------+----------------------+------+------+
73 | **** | **** | ******************** | **** | **** |
74 |------+------+----------------------+------+------+
75 */
76
77 [MOUSE] = LAYOUT(
78 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
79 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
80 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
81 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV),
82 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
83
84 /* Layer MEDIA: mode (Hold Semi-colon)
85 |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
86 | | | | | | | | | | | | | | | |
87 |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
88 | | | | | | | | | | | | | | | |
89 |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
90 | | | | | | | | Previous | Next | | Play/Pause | | | | |
91 |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
92 | | | | | | | | Volume Down | Volume Up | Mute | | | | | |
93 |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
94
95 |------+------+----------------------+------+------+
96 | **** | **** | ******************** | **** | **** |
97 |------+------+----------------------+------+------+
98
99 */
100
101 [MEDIA] = LAYOUT(
102 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
103 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
104 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_MUTE, KC_TRNS, KC_MPLY, KC_TRNS,
105 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV),
106 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
107
108const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
109{
110 // MACRODOWN only works in this function
111 switch (id)
112 {
113 case 0:
114 if (record->event.pressed)
115 {
116 register_code(KC_RSFT);
117 }
118 else
119 {
120 unregister_code(KC_RSFT);
121 }
122 break;
123 }
124 return MACRO_NONE;
125};
diff --git a/keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk b/keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk
new file mode 100644
index 000000000..7d97e7a52
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk
@@ -0,0 +1,3 @@
1TAP_DANCE_ENABLE = no
2UNICODE_ENABLE = no
3LEADER_ENABLE = yes
diff --git a/keyboards/hhkb/ansi/keymaps/brett/config.h b/keyboards/hhkb/ansi/keymaps/brett/config.h
new file mode 100644
index 000000000..b9a61e10a
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/brett/config.h
@@ -0,0 +1,17 @@
1#pragma once
2
3// Define mousekey settings
4#define MOUSEKEY_DELAY 0
5#define MOUSEKEY_INTERVAL 20
6#define MOUSEKEY_MAX_SPEED 2
7#define MOUSEKEY_TIME_TO_MAX 5
8#define MOUSEKEY_WHEEL_DELAY 0
9
10#define LSPO_KEY KC_9
11#define RSPC_KEY KC_0
12#define LSPO_MOD KC_LSHIFT
13#define RSPC_MOD KC_RSHIFT
14
15// This makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when
16// you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
17#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/hhkb/ansi/keymaps/brett/keymap.c b/keyboards/hhkb/ansi/keymaps/brett/keymap.c
new file mode 100644
index 000000000..1201146b0
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/brett/keymap.c
@@ -0,0 +1,119 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * Brettm12345 HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5#include "brett.h"
6
7enum layers {
8 BASE = 0,
9 HHKB = 1,
10 PROG = 2,
11 MOUSE = 3
12};
13
14// Tap for tab hold for MOUSE
15#define TAB_MOUSE LT(MOUSE, KC_TAB)
16
17// Tap for space hold for PROG
18#define SPACE_PROG LT(PROG, KC_SPC)
19
20// Tap for ESC hold for CTRL
21#define CTL_ESC CTL_T(KC_ESC)
22
23// Tab for ; hold for PROG
24#define PROG_SCLN LT(PROG, KC_SCLN)
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27 /* BASE Level: Default Layer
28 |---------+---+---+---+---+---+---+---+---+---+---+--------+--------+-----------+---|
29 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
30 |---------+---+---+---+---+---+---+---+---+---+---+--------+--------+-----------+---|
31 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backspace | * |
32 |---------+---+---+---+---+---+---+---+---+---+---+--------+--------+-----------+---|
33 | Control | A | S | D | F | G | H | J | K | L | ; | ' | Return | ****** | * |
34 |---------+---+---+---+---+---+---+---+---+---+---+--------+--------+-----------+---|
35 | LShift | Z | X | C | V | B | N | M | , | . | / | RShift | HHKB | ****** | * |
36 |---------+---+---+---+---+---+---+---+---+---+---+--------+--------+-----------+---|
37
38 |------+------+----------------------------+------+------|
39 | LAlt | LGUI | ******* Space/Prog ******* | RGUI | RAlt |
40 |------+------+----------------------------+------+------|
41 */
42
43 [BASE] = LAYOUT(
44 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
45 TAB_MOUSE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
46 CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, PROG_SCLN, KC_QUOT, KC_ENT,
47 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(HHKB),
48 KC_LALT, KC_LGUI, SPACE_PROG, KC_RGUI, KC_RALT),
49
50 /* HHKB Level: Function Layer
51 |---------+------+------+--------+---------+-------+-----------+---------+---------+---------+----------------+--------+------+--------+-----|
52 | Flash | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
53 |---------+------+------+--------+---------+-------+-----------+---------+---------+---------+----------------+--------+------+--------+-----|
54 | Caps | Calc | Mail | Media | Browser | My PC | Browser | u | i | o | Print | [ | ] | Backsp | * |
55 | | | | Player | Refresh | | Favorites | | | | Screen | | | | |
56 |---------+------+------+--------+---------+-------+-----------+---------+---------+---------+----------------+--------+------+--------+-----|
57 | Control | Prev | Next | Find | f | g | Browser | Browser | Browser | Browser | ; | ' | Exec | ****** | * |
58 | | | | | | | Back | Home | Search | Forward | | | | | |
59 |---------+------+------+--------+---------+-------+-----------+---------+---------+---------+----------------+--------+------+--------+-----|
60 | LShift | Vol+ | Vol- | Mute | Select | b | n | m | , | Again | Browser Search | RShift | HHKB | ****** | * |
61 |---------+------+------+--------+---------+-------+-----------+---------+---------+---------+----------------+--------+------+--------+-----|
62
63 |------+------+----------------------+------+------|
64 | Menu | LGUI | ******* Play ******* | RGUI | Menu |
65 |------+------+----------------------+------+------|
66 */
67 [HHKB] = LAYOUT(
68 FLASH, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
69 KC_CAPS, KC_CALC, KC_MAIL, KC_MSEL, KC_WREF, KC_MYCM, KC_WFAV, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_BSPC,
70 KC_TRNS, KC_MPRV, KC_MNXT, KC_FIND, KC_TRNS, KC_TRNS, KC_WBAK, KC_WHOM, KC_WSCH, KC_WFWD, KC_TRNS, KC_TRNS, KC_EXEC,
71 KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_SLCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AGIN, KC_WSCH, KC_TRNS, KC_TRNS,
72 KC_MENU, KC_TRNS, KC_MPLY, KC_TRNS, KC_MENU),
73
74
75 /* Programming Level: Symbols Layer
76 |--------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+---|
77 | Esc | TTY 1 | TTY 2 | TTY 3 | TTY 4 | TTY 5 | TTY 6 | TTY 7 | TTY 8 | TTY 9 | TTY 10 | TTY 11 | TTY 12 | \ | ` |
78 |--------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+---|
79 | Tab/Mouse | => | @ | >>= | =<< | ‖ | <> | <|> | <*> | <@> | |> | <$ | $> | Backsp | * |
80 |--------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+---|
81 | Toggle Mouse | -> | * | <$> | <#> | && | Left | Down | Up | Right | :: | ` | Return | ****** | * |
82 |--------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+---|
83 | LShift | z | x | c | v | b | n | m | <- | -> | <> | Shift | HHKB | ****** | * |
84 |--------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+---|
85
86 |------+------+----------------------------+------+------|
87 | LAlt | LGUI | ******* Space/Prog ******* | RGUI | RAlt |
88 |------+------+----------------------------+------+------|
89 */
90 [PROG] = LAYOUT(
91 KC_GESC, LCA(KC_F1), LCA(KC_F2), LCA(KC_F3), LCA(KC_F4), LCA(KC_F5), LCA(KC_F6), LCA(KC_F7), LCA(KC_F8), LCA(KC_F9), LCA(KC_F10), LCA(KC_F11), LCA(KC_F12), KC_TRNS, KC_TRNS,
92 KC_TRNS, FAT_ARROW, KC_AT, BIND, BIND_FLIPPED, OR, CONCAT, ALT, APPLY, FLAP, PIPE, VOID_LEFT, VOID_RIGHT, KC_TRNS,
93 TG(MOUSE), SKINNY_ARROW, KC_ASTR, MAP, MAP_FLIPPED, AND, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, DOUBLE_COLON, KC_GRV, KC_TRNS,
94 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, REVERSE_ARROW, SKINNY_ARROW, CONCAT, KC_TRNS, KC_TRNS,
95 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
96
97
98 /* Mouse Level: Mouse Layer
99 |--------------+---------+---------+---------+---------+---------+-------+-------+---------+---------+---------+-----------+-----------------+--------+---|
100 | Esc | Speed 1 | Speed 2 | Speed 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
101 |--------------+---------+---------+---------+---------+---------+-------+-------+---------+---------+---------+-----------+-----------------+--------+---|
102 | Mouse(Tab) | Q | Up | Button3 | Button4 | Button5 | Y | U | Button3 | Button4 | Button5 | [ | ] | Backsp | * |
103 |--------------+---------+---------+---------+---------+---------+-------+-------+---------+---------+---------+-----------+-----------------+--------+---|
104 | Control(Esc) | Left | Down | Right | Button1 | Button2 | SLeft | SDown | SUp | SRight | Button1 | Button2 | Control(Return) | ****** | * |
105 |--------------+---------+---------+---------+---------+---------+-------+-------+---------+---------+---------+-----------+-----------------+--------+---|
106 | LShift(() | Z | X | C | V | B | N | M | Button5 | Button4 | Button3 | RShift()) | HHKB | ****** | * |
107 |--------------+---------+---------+---------+---------+---------+-------+-------+---------+---------+---------+-----------+-----------------+--------+---|
108
109 |---------+---------+----------------------------+---------+---------|
110 | LAlt([) | LGUI({) | ******* Space/Prog ******* | RGUI(}) | RAlt(]) |
111 |---------+---------+----------------------------+---------+---------|
112 */
113 [MOUSE] = LAYOUT(
114 KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
115 KC_TRNS, KC_MS_U, KC_BTN3, KC_BTN4, KC_BTN5, KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN4, KC_BTN5, KC_TRNS, KC_TRNS, KC_TRNS,
116 TG(MOUSE), KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, KC_BTN2, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN1, KC_BTN2, KC_TRNS,
117 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
118 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
119};
diff --git a/keyboards/hhkb/ansi/keymaps/brett/readme.md b/keyboards/hhkb/ansi/keymaps/brett/readme.md
new file mode 100644
index 000000000..fd07b155f
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/brett/readme.md
@@ -0,0 +1,13 @@
1# Generated Keymap Layout
2
3This layout was generated by the QMK API. You can find the JSON data used to
4generate this keymap in the file layers.json.
5
6To make use of this file you will need follow the following steps:
7
8* Download or Clone QMK Firmware: <https://github.com/qmk/qmk_firmware/>
9* Extract QMK Firmware to a location on your hard drive
10* Copy this folder into %s
11* You are now ready to compile or use your keymap with the source
12
13More information can be found in the QMK docs: <https://docs.qmk.fm> \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/keymaps/brett/rules.mk b/keyboards/hhkb/ansi/keymaps/brett/rules.mk
new file mode 100644
index 000000000..88f57515f
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/brett/rules.mk
@@ -0,0 +1,4 @@
1MOUSEKEY_ENABLE = yes
2TAP_DANCE_ENABLE = no
3LEADER_ENABLE = no
4UNICODE_ENABLE = no
diff --git a/keyboards/hhkb/ansi/keymaps/cinaeco/README.md b/keyboards/hhkb/ansi/keymaps/cinaeco/README.md
new file mode 100644
index 000000000..c1c48e609
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/cinaeco/README.md
@@ -0,0 +1,23 @@
1# QMK Keyboard Firmware for HHKB
2
3## Modifications
4
5### HHKB Fn Layer
6
7Added some Media keys.
8
9### Utility Layer (SpaceFN)
10
11Hold `Space` for:
12
13- Vi-style direction keys.
14- WASD-style mouse keys.
15- Dynamic macro playback on `1` and `2`.
16- Qwerty/Colemak/Dvorak layout selection on `-`, `=` and `\ `
17
18### Dynamic Macros
19
20Hold `q` and press:
21
22- `1` or `2` to record macro 1 or 2.
23- `s` to stop recording.
diff --git a/keyboards/hhkb/ansi/keymaps/cinaeco/config.h b/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
new file mode 100644
index 000000000..c7b4c784c
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
@@ -0,0 +1,20 @@
1#ifndef CONFIG_CINAECO_H
2#define CONFIG_CINAECO_H
3
4#include "../../config.h"
5
6#undef MANUFACTURER
7#undef PRODUCT
8#undef DESCRIPTION
9#define MANUFACTURER QMK
10#define PRODUCT HHKB QMK cinaeco
11#define DESCRIPTION HHKB on QMK Firmware with cinaeco keymap
12
13// Increase "Tap" detection window. Avoid missing 'q' or 'z' when typing slowly.
14#undef TAPPING_TERM
15#define TAPPING_TERM 230
16
17// Uncomment to enable NKRO by default. May cause issues with KVM switches.
18//#define FORCE_NKRO
19
20#endif
diff --git a/keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c b/keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c
new file mode 100644
index 000000000..c27e37d8a
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c
@@ -0,0 +1,178 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * cinaeco's HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6// Layers.
7#define QWER 0
8#define COLE 1
9#define DVOR 2
10#define HHKB 3
11#define UTIL 4
12#define MREC 5
13
14// Easier-to-read Layer Arrays.
15#define ____ KC_TRNS
16
17enum hhkb_keycodes
18{
19 DYNAMIC_MACRO_RANGE = SAFE_RANGE,
20};
21
22#include "dynamic_macro.h"
23
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25
26 /* QWER Layer: Qwerty Default
27 *
28 * ,--------------------------------------------------------------.
29 * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
30 * |--------------------------------------------------------------|
31 * |Tab |Q/MREC| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
32 * |--------------------------------------------------------------|
33 * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ent/Ctrl|
34 * |--------------------------------------------------------------|
35 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
36 * `--------------------------------------------------------------'
37 * |Alt|Gui | Space/UTIL |Gui |Alt|
38 * `-------------------------------------------'
39 *
40 */
41
42 [QWER] = LAYOUT(
43 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
44 KC_TAB, LT(MREC, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
45 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, CTL_T(KC_ENT),
46 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
47 KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT),
48
49 /* COLE Layer: Colemak
50 *
51 * ,--------------------------------------------------------------.
52 * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
53 * |--------------------------------------------------------------|
54 * |Tab |Q/MREC| W| F| P| G| J| L| U| Y| ;| [| ]|Backs|
55 * |--------------------------------------------------------------|
56 * |Ctrl | A| R| S| T| D| H| N| E| I| O| '|Ent/Ctrl|
57 * |--------------------------------------------------------------|
58 * |Shift | Z| X| C| V| K| B| M| ,| .| /|Shift |Fn0|
59 * `--------------------------------------------------------------'
60 * |Alt|Gui | Space/UTIL |Gui |Alt|
61 * `-------------------------------------------'
62 *
63 */
64
65 [COLE] = LAYOUT(
66 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
67 KC_TAB, LT(MREC, KC_Q), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
68 KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, CTL_T(KC_ENT),
69 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_K, KC_B, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
70 KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT),
71
72 /* DVOR Layer: Dvorak
73 *
74 * ,--------------------------------------------------------------.
75 * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `|
76 * |--------------------------------------------------------------|
77 * |Tab |'/MREC| ,| .| P| Y| F| G| C| R| L| /| =|Backs|
78 * |--------------------------------------------------------------|
79 * |Ctrl | A| O| E| U| I| D| H| T| N| S| -|Ent/Ctrl|
80 * |--------------------------------------------------------------|
81 * |Shift | ;| Q| J| K| X| B| M| W| V| Z|Shift |Fn0|
82 * `--------------------------------------------------------------'
83 * |Alt|Gui | Space/UTIL |Gui |Alt|
84 * `-------------------------------------------'
85 *
86 */
87
88 [DVOR] = LAYOUT(
89 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
90 KC_TAB, LT(MREC, KC_QUOT), KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC,
91 KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, CTL_T(KC_ENT),
92 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB),
93 KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT),
94
95 /* HHKB Layer: HHKB mode (HHKB Fn)
96 *
97 * ,-----------------------------------------------------------.
98 * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
99 * |-----------------------------------------------------------|
100 * |Caps |PLA|PRV|NXT| | | | |Psc|Slk|Pus|Up | |Backs|
101 * |-----------------------------------------------------------|
102 * | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
103 * |-----------------------------------------------------------|
104 * | | | | | | | +| -|End|PgD|Dow| | |
105 * `-----------------------------------------------------------'
106 * | | | |STOP | |
107 * `-------------------------------------------'
108 */
109
110 [HHKB] = LAYOUT(
111 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
112 KC_CAPS, KC_MPLY, KC_MPRV, KC_MNXT, ____, ____, ____, ____, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ____, KC_BSPC,
113 ____, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, ____, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
114 ____, ____, ____, ____, ____, ____, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ____, ____,
115 ____, ____, ____, KC_MSTP, ____),
116
117 /* UTIL Layer: Extra utilities
118 *
119 * ,-------------------------------------------------------------.
120 * |DFU|PLY1|PLY2| | | | | | | | |QWE|COL|DVO|DBG|
121 * |-------------------------------------------------------------|
122 * | |MLB |M-Up|MRB|MwU| |Hom|PgD|PgU|End| | | | |
123 * |-------------------------------------------------------------|
124 * | |M-Lt|M-Dn|M-R|MwD| |LEF|DOW|UP |RIG| | | |
125 * |-------------------------------------------------------------|
126 * | | | | | |SPC| | | | | | | |
127 * `-------------------------------------------------------------'
128 * | | | | | |
129 * `-------------------------------------------'
130 *
131 */
132
133 [UTIL] = LAYOUT(
134 RESET, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, ____, ____, ____, ____, ____, ____, ____, ____, DF(QWER), DF(COLE), DF(DVOR), DEBUG,
135 ____, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, ____, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ____, ____, ____, ____,
136 ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, ____, ____, ____,
137 ____, ____, ____, ____, ____, KC_SPC, ____, ____, ____, ____, ____, ____, ____,
138 ____, ____, ____, ____, ____),
139
140 /* MREC Layer: Record macros with `q`
141 *
142 * ,-------------------------------------------------------------.
143 * | |REC1|REC2| | | | | | | | | | | | |
144 * |-------------------------------------------------------------|
145 * | | | | | | | | | | | | | | |
146 * |-------------------------------------------------------------|
147 * | | |RSTP| | | | | | | | | | |
148 * |-------------------------------------------------------------|
149 * | | | | | | | | | | | | | |
150 * `-------------------------------------------------------------'
151 * | | | | | |
152 * `-------------------------------------------'
153 *
154 */
155
156 [MREC] = LAYOUT(
157 ____, DYN_REC_START1, DYN_REC_START2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
158 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
159 ____, ____, DYN_REC_STOP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
160 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
161 ____, ____, ____, ____, ____)
162
163};
164
165const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
166{
167 return MACRO_NONE;
168};
169
170// For Dynamic Macros.
171bool process_record_user(uint16_t keycode, keyrecord_t *record)
172{
173 if (!process_record_dynamic_macro(keycode, record))
174 {
175 return false;
176 }
177 return true;
178}
diff --git a/keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk b/keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk
new file mode 100644
index 000000000..a85669aa2
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk
@@ -0,0 +1,20 @@
1# cinaeco's HHKB firmware
2
3# Build Options
4# change to "no" to disable the options, or define them in the Makefile in
5# the appropriate keymap folder that will get included automatically
6#
7BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
8MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
9EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
10CONSOLE_ENABLE = no # Console for debug(+400)
11COMMAND_ENABLE = yes # Commands for debug and configuration
12NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
13BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
14MIDI_ENABLE = no # MIDI controls
15AUDIO_ENABLE = no # Audio output on port C6
16UNICODE_ENABLE = no # Unicode
17BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
18RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
19SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
20
diff --git a/keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c b/keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..e230a87fb
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c
@@ -0,0 +1,89 @@
1/*
2 * dbroqua HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6enum planck_layers {
7 _DEFAULT,
8 _ALTERNATE,
9 _FN
10};
11
12const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
13 /* BASE layer: Default Layer
14 * ,-----------------------------------------------------------------------------------------.
15 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
16 * |-----------------------------------------------------------------------------------------+
17 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
18 * |-----------------------------------------------------------------------------------------+
19 * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
20 * |-----------------------------------------------------------------------------------------+
21 * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | fn |
22 * +-----------------------------------------------------------------------------------------+
23 * | Alt | Gui | Space | Gui |RCtrl|
24 * `----------------------------------------------------------------´
25 */
26 [_DEFAULT] = LAYOUT(
27 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
28 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
29 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
30 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
31 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RCTL),
32 /* Alternamte layer: swap alt/gui
33 * ,-----------------------------------------------------------------------------------------.
34 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
35 * |-----------------------------------------------------------------------------------------+
36 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
37 * |-----------------------------------------------------------------------------------------+
38 * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
39 * |-----------------------------------------------------------------------------------------+
40 * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | fn |
41 * +-----------------------------------------------------------------------------------------+
42 * | Gui | Alt | Space | AltGr |RCtrl|
43 * `----------------------------------------------------------------´
44 */
45 [_ALTERNATE] = LAYOUT(
46 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
47 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
48 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
49 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
50 KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RCTL),
51
52 /* FN Layer
53 * ,-----------------------------------------------------------------------------------------.
54 * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del|
55 * |-----------------------------------------------------------------------------------------+
56 * | Caps | | | | | | | |PrtSc| Slck| Paus| Up | | |
57 * |-----------------------------------------------------------------------------------------+
58 * | | Vol-| Vol+| Mute|Eject| | * | / | Home| PgUp| Left |Right| |
59 * |-----------------------------------------------------------------------------------------+
60 * | | Prev| Play| Next| | | + | - | End |PgDwn| Down| | |
61 * +-----------------------------------------------------------------------------------------+
62 * | | | Adjust | Stop | |
63 * `----------------------------------------------------------------´
64 */
65 [_FN] = LAYOUT(
66 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
67 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
68 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
69 KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
70 DF(_DEFAULT), DF(_ALTERNATE), KC_TRNS, KC_MSTP, KC_TRNS)};
71
72const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
73{
74 // MACRODOWN only works in this function
75 switch (id)
76 {
77 case 0:
78 if (record->event.pressed)
79 {
80 register_code(KC_RSFT);
81 }
82 else
83 {
84 unregister_code(KC_RSFT);
85 }
86 break;
87 }
88 return MACRO_NONE;
89};
diff --git a/keyboards/hhkb/ansi/keymaps/dbroqua/readme.md b/keyboards/hhkb/ansi/keymaps/dbroqua/readme.md
new file mode 100644
index 000000000..3b8950fee
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/dbroqua/readme.md
@@ -0,0 +1,26 @@
1# Dbroqua Layout
2
3* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01
4
5## Switch layout
6
7Default bottom layer:
8
9* LALT / LGUI / SPACE / RGUI / RCTRL
10
11Alternate bottom layer:
12
13* LGUI / LALT / SPACE / RALT / RCTRL
14
15To switch from default to alternate (or alternate to default) simple press FN + (LALT/LGUI).
16
17
18## Media keys :
19
20* fn + a = vol_dn
21* fn + s = vol_up
22* fn + d = mute
23* fn + z = previous song
24* fn + x = play/pause
25* fn + c = next song
26* fn + (RGUI/RALT) = stop
diff --git a/keyboards/hhkb/ansi/keymaps/default/keymap.c b/keyboards/hhkb/ansi/keymaps/default/keymap.c
new file mode 100644
index 000000000..c63ef6a57
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define HHKB 1
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10
11 /* BASE Level: Default Layer
12 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
13 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
14 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
15 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
16 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
17 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
18 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
19 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
20 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
21
22 |------+------+-----------------------+------+------|
23 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
24 |------+------+-----------------------+------+------|
25 */
26
27 [BASE] = LAYOUT( // default layer
28 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
29 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
30 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
31 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
32 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
33
34 /* Layer HHKB: HHKB mode (HHKB Fn)
35 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
36 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
37 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
38 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
39 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
40 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
41 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
42 | | | | | | | + | - | End | PgD | Dow | | | | |
43 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
44
45 |------+------+----------------------+------+------+
46 | **** | **** | ******************** | **** | **** |
47 |------+------+----------------------+------+------+
48
49 */
50
51 [HHKB] = LAYOUT(
52 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
53 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
54 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
55 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
diff --git a/keyboards/hhkb/ansi/keymaps/eric/keymap.c b/keyboards/hhkb/ansi/keymaps/eric/keymap.c
new file mode 100644
index 000000000..bf788b2ff
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/eric/keymap.c
@@ -0,0 +1,73 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define HHKB 1
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10
11 /* BASE Level: Default Layer
12 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
13 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
14 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
15 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
16 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
17 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
18 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
19 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
20 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
21 |------+------+-----------------------+------+------|
22 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
23 |------+------+-----------------------+------+------|
24 */
25
26 [BASE] = LAYOUT( // default layer
27 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
28 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
29 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
30 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
31 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
32
33 /* Layer HHKB: HHKB mode (HHKB Fn)
34 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
35 | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
36 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
37 | | PgU | Up | PgD | Hm | & | ~ | | | | Psc | Up | Del | Backs | |
38 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
39 | | Lef | Dow | Rig | En | * | | | PgU | Hom | Lef | Rig | Enter | | |
40 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
41 | | _ | + | ( | ) | | | | | PgD | End | Dow | | | | |
42 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
43 |------+------+----------------------+------+------+
44 | **** | **** | ******************** | **** | **** |
45 |------+------+----------------------+------+------+
46
47 */
48
49 [HHKB] = LAYOUT(
50 KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
51 KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC,
52 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS,
53 KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS,
54 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
55
56const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
57{
58 // MACRODOWN only works in this function
59 switch (id)
60 {
61 case 0:
62 if (record->event.pressed)
63 {
64 register_code(KC_RSFT);
65 }
66 else
67 {
68 unregister_code(KC_RSFT);
69 }
70 break;
71 }
72 return MACRO_NONE;
73};
diff --git a/keyboards/hhkb/ansi/keymaps/krusli/config.h b/keyboards/hhkb/ansi/keymaps/krusli/config.h
new file mode 100644
index 000000000..af2fb9d8a
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/krusli/config.h
@@ -0,0 +1 @@
#define USB_MAX_POWER_CONSUMPTION 100
diff --git a/keyboards/hhkb/ansi/keymaps/krusli/keymap.c b/keyboards/hhkb/ansi/keymaps/krusli/keymap.c
new file mode 100644
index 000000000..af6102f10
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/krusli/keymap.c
@@ -0,0 +1,75 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define HHKB 1
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10
11 /* BASE Level: Default Layer
12 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
13 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
14 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
15 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
16 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
17 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
18 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
19 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
20 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
21
22 |------+------+-----------------------+------+------|
23 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
24 |------+------+-----------------------+------+------|
25 */
26
27 [BASE] = LAYOUT( // default layer
28 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
29 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
30 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
31 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
32 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
33
34 /* Layer HHKB: HHKB mode (HHKB Fn)
35 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
36 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
37 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
38 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
39 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
40 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
41 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
42 | | | | | | | + | - | End | PgD | Dow | | | | |
43 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
44
45 |------+------+----------------------+------+------+
46 | **** | **** | ******************** | **** | **** |
47 |------+------+----------------------+------+------+
48
49 */
50
51 [HHKB] = LAYOUT(
52 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
53 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
54 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
55 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
57
58const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
59{
60 // MACRODOWN only works in this function
61 switch (id)
62 {
63 case 0:
64 if (record->event.pressed)
65 {
66 register_code(KC_RSFT);
67 }
68 else
69 {
70 unregister_code(KC_RSFT);
71 }
72 break;
73 }
74 return MACRO_NONE;
75};
diff --git a/keyboards/hhkb/ansi/keymaps/lxol/keymap.c b/keyboards/hhkb/ansi/keymaps/lxol/keymap.c
new file mode 100644
index 000000000..462a98047
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/lxol/keymap.c
@@ -0,0 +1,200 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * lxol HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define WIN 1
8#define HHKB 2
9#define RGUILEV 3
10#define LGUILEV 4
11#define RALTLEV 5
12#define LALTLEV 6
13
14const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
15
16 /* Layer 0: Default Layer
17 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
18 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
19 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
20 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
21 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
22 | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
23 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
24 | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
25 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
26
27 |------+------+-------+------+------|
28 | LAlt | LGUI | Space | RGUI | RAlt |
29 |------+------+-------+------+------|
30 */
31
32 [BASE] = LAYOUT( // layer 0 : default
33
34 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
35 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
36 KC_LCTL, LT(LALTLEV, KC_A), LT(LGUILEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV, KC_L), LT(RALTLEV, KC_SCLN), KC_QUOT, MT(MOD_RCTL, KC_ENT),
37 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
38 KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
39
40 /* Layer 1: HHKB mode (HHKB Fn)
41 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
42 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
43 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
44 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
45 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
46 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
47 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
48 | | | | | | | + | - | End | PgD | Dow | | | | |
49 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
50
51 |---+---+---+---+---|
52 | | | | | |
53 |---+---+---+---+---|
54 */
55
56 [HHKB] = LAYOUT(
57 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
58 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
59 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
60 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
61 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
62
63 /* Layer LGUI: All keys with RGUI modifier
64 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
65 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
66 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
67 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
68 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
69 | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
70 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
71 | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
72 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
73
74 |------+------+-------+------+------|
75 | LAlt | LGUI | Space | RGUI | RAlt |
76 |------+------+-------+------+------|
77 */
78
79 [RGUILEV] = LAYOUT( // Right GUI layer by KC_L
80
81 RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV),
82 RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC),
83 RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), MT(MOD_RCTL, KC_ENT),
84 RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS,
85 KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
86
87 /* Layer LGUI: All keys with LGUI modifier
88 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
89 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
90 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
91 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
92 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
93 | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
94 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
95 | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
96 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
97
98 |------+------+-------+------+------|
99 | LAlt | LGUI | Space | LGUI | RAlt |
100 |------+------+-------+------+------|
101 */
102
103 [LGUILEV] = LAYOUT( // Right GUI layer by KC_L
104
105 LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV),
106 LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC),
107 LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), MT(MOD_RCTL, KC_ENT),
108 KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS,
109 KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
110
111 /* Layer LALT: All keys with RALT modifier
112 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
113 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
114 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
115 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
116 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
117 | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
118 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
119 | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
120 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
121
122 |------+------+-------+------+------|
123 | LAlt | LGUI | Space | RGUI | RAlt |
124 |------+------+-------+------+------|
125 */
126
127 [RALTLEV] = LAYOUT( // Right ALT layer by KC_L
128
129 RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV),
130 RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC),
131 RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), MT(MOD_RCTL, KC_ENT),
132 RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS,
133 KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
134
135 /* Layer LALT: All keys with LALT modifier
136 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
137 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
138 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
139 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
140 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
141 | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
142 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
143 | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
144 |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
145
146 |------+------+-------+------+------|
147 | LAlt | LGUI | Space | LGUI | RAlt |
148 |------+------+-------+------+------|
149 */
150
151 [LALTLEV] = LAYOUT( // Right ALT layer by KC_L
152
153 LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV),
154 LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC),
155 LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), MT(MOD_RCTL, KC_ENT),
156 KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS,
157 KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
158
159 /* Layer WIN: Win layer
160 |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
161 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
162 |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
163 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
164 |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
165 | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
166 |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
167 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
168 |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
169
170 |------+------+-------+------+------|
171 | LGui | LAlt | Space | RGui | Ralt |
172 |------+------+-------+------+------|
173 */
174
175 [WIN] = LAYOUT( // BASE level with swapped GUI/ALT
176
177 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
178 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
179 KC_LCTL, LT(LGUILEV, KC_A), LT(LALTLEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV, KC_L), LT(RGUILEV, KC_SCLN), KC_QUOT, MT(MOD_RCTL, KC_ENT),
180 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
181 KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
182
183const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
184{
185 // MACRODOWN only works in this function
186 switch (id)
187 {
188 case 0:
189 if (record->event.pressed)
190 {
191 register_code(KC_RSFT);
192 }
193 else
194 {
195 unregister_code(KC_RSFT);
196 }
197 break;
198 }
199 return MACRO_NONE;
200};
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/config.h b/keyboards/hhkb/ansi/keymaps/mjt/config.h
new file mode 100644
index 000000000..3b8f2e676
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/config.h
@@ -0,0 +1,72 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0xCAFE
26#define DEVICE_VER 0x0104
27#define MANUFACTURER q.m.k
28#define PRODUCT HHKB mod
29#define DESCRIPTION q.m.k keyboard firmware for HHKB
30
31/* key matrix size */
32#ifdef HHKB_JP
33# define MATRIX_ROWS 16
34#else
35# define MATRIX_ROWS 8
36#endif
37#define MATRIX_COLS 8
38
39#define TAPPING_TERM 200
40
41/* number of backlight levels */
42#define BACKLIGHT_LEVELS 3
43
44#define USB_MAX_POWER_CONSUMPTION 50
45
46/* Set 0 if debouncing isn't needed */
47#define DEBOUNCE 5
48
49/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
50//#define LOCKING_SUPPORT_ENABLE
51/* Locking resynchronize hack */
52//#define LOCKING_RESYNC_ENABLE
53
54/*
55 * Feature disable options
56 * These options are also useful to firmware size reduction.
57*/
58
59/* disable debug print */
60//#define NO_DEBUG
61
62/* disable print */
63//#define NO_PRINT
64
65/* disable action features */
66//#define NO_ACTION_LAYER
67//#define NO_ACTION_TAPPING
68//#define NO_ACTION_ONESHOT
69//#define NO_ACTION_MACRO
70//#define NO_ACTION_FUNCTION
71
72#endif
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/keymap.c b/keyboards/hhkb/ansi/keymaps/mjt/keymap.c
new file mode 100644
index 000000000..b62676edd
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/keymap.c
@@ -0,0 +1,112 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define HHKB 1
8#define FUNK 2
9#define DYN 3
10#define CTL_ESC CTL_T(KC_ESC)
11#define MACSLEEP LCTL(LSFT(KC_POWER))
12
13enum hhkb_keycodes
14{
15 QWERTY = SAFE_RANGE,
16 DYNKEY,
17 DYNAMIC_MACRO_RANGE,
18};
19
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22
23 /* BASE Level: Default Layer
24 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
25 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
26 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
27 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
28 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
29 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
30 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
31 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
32 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
33
34 |------+------+-----------------------+------+------|
35 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
36 |------+------+-----------------------+------+------|
37 */
38
39 [BASE] = LAYOUT( // default layer
40 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
41 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
42 CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
43 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK),
44 KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT),
45
46 /* Layer HHKB: HHKB mode (HHKB Fn)
47 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
48 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
49 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
50 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
51 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
52 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
53 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
54 | | | | | | | + | - | End | PgD | Dow | | | | |
55 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
56
57 |------+------+----------------------+------+------+
58 | **** | **** | ******************** | **** | **** |
59 |------+------+----------------------+------+------+
60
61
62
63 [HHKB] = LAYOUT(
64 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
65 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
66 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
67 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
68 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
69
70 */
71 [FUNK] = LAYOUT(
72 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
73 KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
74 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
75 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
77 [DYN] = LAYOUT(
78 KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,
79 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS,
80 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END, KC_TRNS,
81 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS,
82 KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)};
83
84const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
85{
86 // MACRODOWN only works in this function
87 switch (id)
88 {
89 case 0:
90 if (record->event.pressed)
91 {
92 register_code(KC_RSFT);
93 }
94 else
95 {
96 unregister_code(KC_RSFT);
97 }
98 break;
99 }
100 return MACRO_NONE;
101};
102
103bool process_record_user(uint16_t keycode, keyrecord_t *record)
104{
105 uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode);
106 if (!process_dynamic_macro(macro_kc, record))
107 {
108 return false;
109 }
110
111 return true;
112}
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/readme.md b/keyboards/hhkb/ansi/keymaps/mjt/readme.md
new file mode 100644
index 000000000..ff575ce24
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/readme.md
@@ -0,0 +1,16 @@
1# Mike's HHKB
2
3- Surprisingly stock for the most part
4- Dynamic macros
5- ctrl key has tapkey for escape
6- right shift has tapkey for enter
7- Works with iPhone Camera Adapter
8
9## Layers
10
11Base for letters and mods.
12
13Funk layer is my tweaked function layer
14
15Dyn layer has dynamic macros. Record with 1 and 2, playback with \ and
16upper-right-most key. Also turns the arrow clusters into nav keys.
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/rules.mk b/keyboards/hhkb/ansi/keymaps/mjt/rules.mk
new file mode 100644
index 000000000..9e6797ed3
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/rules.mk
@@ -0,0 +1 @@
DYNAMIC_MACRO_ENABLE = yes
diff --git a/keyboards/hhkb/ansi/keymaps/schaeferdev/README.md b/keyboards/hhkb/ansi/keymaps/schaeferdev/README.md
new file mode 100644
index 000000000..15b87c498
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/schaeferdev/README.md
@@ -0,0 +1,36 @@
1 # QMK HHKB Keymap: schaeferdev
2
3This is my QMK keymap for the Happy Hacking Keyboard Pro 2 alternate controller made by Hasu.
4
5
6## Movement Layer
7
8The main difference from the Default layer is the introduction of a Movement layer than can be used by holding the right command button. This layer enables to move the mouse and scroll using Page up and Page down. Additionally it allows to use Arrow-keys in VIM-like fashion on hjkl.
9
10I prefer this movement to the default HHKB FN layer as it allows all my fingers to remain on the home row.
11
12## Minor Changes
13
14- swapped Y and Z (as I am German and used to the different order).
15- changed position of Delete Key
16- both ` and ~
17
18
19## Setup (for macOS)
20```bash
21brew tap osx-cross/avr
22brew install avr-gcc
23brew install dfu-programmer
24```
25
26
27## Flashing
28
29```bash
30make clean
31make hhkb:schaeferdev:dfu
32```
33
34
35## Troubleshooting
36For some reason I ran into the issue that my CMD key no longer recognized. I am not entirely sure what caused this but the problem occured regardless of the layout I flashed (was also broken for the default hhkb layout). I was able to fix this issue by resetting EEPROM of the keyboard. The easiest way to do this is probably to use the QMK Toolbox.
diff --git a/keyboards/hhkb/ansi/keymaps/schaeferdev/config.h b/keyboards/hhkb/ansi/keymaps/schaeferdev/config.h
new file mode 100644
index 000000000..b3c799bb8
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/schaeferdev/config.h
@@ -0,0 +1,9 @@
1// Based off of this section:
2// https://github.com/qmk/qmk_firmware/blob/master/doc/BUILD_GUIDE.md#the-configh-file
3#pragma once
4
5// Define mousekey settings
6#define MOUSEKEY_DELAY 0
7#define MOUSEKEY_INTERVAL 4
8#define MOUSEKEY_MAX_SPEED 1
9#define MOUSEKEY_TIME_TO_MAX 70 \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c b/keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c
new file mode 100644
index 000000000..ea6da450c
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c
@@ -0,0 +1,76 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define BASE 0
7#define HHKB 1
8#define MOVEMENT 2
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11
12 /* BASE Level: Default Layer
13 |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
14 | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backs |Backs|
15 |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
16 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | |
17 |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
18 |Ctrl/ESC| A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
19 |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
20 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
21 |--------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+-----|
22 |------+------+-----------------------+------+------|
23 | LAlt | LGUI | ******* Space ******* | MOUSE| RAlt |
24 |------+------+-----------------------+------+------|
25 */
26
27 [BASE] = LAYOUT( // default layer
28 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
29 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
30 CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
31 KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
32 KC_LALT, KC_LCMD, /* */ KC_SPC, /* */ MO(MOVEMENT), KC_RALT),
33
34 /* Layer HHKB: HHKB mode (HHKB Fn)
35 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
36 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | DEL |
37 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
38 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
39 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
40 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
41 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
42 | | | | | | | + | - | End | PgD | Dow | | | | |
43 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
44 |------+------+----------------------+------+------+
45 | **** | **** | ******************** | **** | **** |
46 |------+------+----------------------+------+------+
47 */
48
49 [HHKB] = LAYOUT(
50 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
51 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
52 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
53 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
54 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
55
56 /* Layer MOUSE: MOUSE mode (MOUSE Fn)
57 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
58 | `~ |ACC1 |ACC2 |ACC3 | | | | | | | | | | DEL | DEL |
59 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
60 | |MBTN2| | up | | PgU| | | | | | | | | |
61 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
62 | |MBTN1|right|down |left| PgD| <- | down arrow | up arrow | -> | | | | | |
63 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
64 | |MBTN3| | | | | | ~ (N) | | | | | | | |
65 |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----|
66 |------+------+----------------------+------+------+
67 | **** | **** | ******************** | **** | **** |
68 |------+------+----------------------+------+------+
69 */
70
71 [MOVEMENT] = LAYOUT(
72 KC_GRV, KC_ACL0, KC_ACL1, KC_ACL2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
73 KC_TRNS, KC_BTN2, KC_TRNS, KC_MS_U, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
74 KC_TRNS, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS,
75 KC_TRNS, KC_BTN3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk b/keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk
new file mode 100644
index 000000000..35591533c
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk
@@ -0,0 +1 @@
MOUSEKEY_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c
new file mode 100644
index 000000000..a15f5e5e0
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c
@@ -0,0 +1,143 @@
1#include "quantum.h"
2#include "command.h"
3#include "action_pseudo_lut.h"
4
5static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
6
7/*
8 * Pseudo layout action.
9 * This action converts a keycode in order to output the character according to the keymap you specified
10 * still your keyboard layout recognized wrongly on your OS.
11 * Memo: Using other layer keymap to get keycode
12 */
13void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
14 uint8_t prev_shift;
15 uint16_t keycode;
16 uint16_t pseudo_keycode;
17
18 /* get keycode from keymap you specified */
19 keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
20
21 prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
22
23 if (record->event.pressed) {
24 /* when magic commands entered, keycode does not converted */
25 if (IS_COMMAND()) {
26 if (prev_shift) {
27 add_shift_bit(keycode);
28 }
29 register_code(keycode);
30 return;
31 }
32
33 if (prev_shift) {
34 pseudo_keycode = convert_keycode(keymap, keycode, true);
35 dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
36 add_shift_bit(keycode);
37
38 if (IS_LSFT(pseudo_keycode)) {
39 register_code(QK_LSFT ^ pseudo_keycode);
40 } else {
41 /* delete shift mod temporarily */
42 del_mods(prev_shift);
43 send_keyboard_report();
44 register_code(pseudo_keycode);
45 add_mods(prev_shift);
46 send_keyboard_report();
47 }
48 } else {
49 pseudo_keycode = convert_keycode(keymap, keycode, false);
50 dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
51
52 if (IS_LSFT(pseudo_keycode)) {
53 add_weak_mods(MOD_BIT(KC_LSFT));
54 send_keyboard_report();
55 register_code(QK_LSFT ^ pseudo_keycode);
56 /* on Windows, prevent key repeat to avoid unintended output */
57 unregister_code(QK_LSFT ^ pseudo_keycode);
58 del_weak_mods(MOD_BIT(KC_LSFT));
59 send_keyboard_report();
60 } else {
61 register_code(pseudo_keycode);
62 }
63 }
64 } else {
65 if (get_shift_bit(keycode)) {
66 del_shift_bit(keycode);
67 pseudo_keycode = convert_keycode(keymap, keycode, true);
68 } else {
69 pseudo_keycode = convert_keycode(keymap, keycode, false);
70 }
71 dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
72
73 if (IS_LSFT(pseudo_keycode)) {
74 unregister_code(QK_LSFT ^ pseudo_keycode);
75 } else {
76 unregister_code(pseudo_keycode);
77 }
78 }
79}
80
81uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
82{
83 uint16_t pseudo_keycode;
84
85 switch (keycode) {
86 case KC_A ... KC_CAPSLOCK:
87#if defined(__AVR__)
88 if (shift_modded) {
89 pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
90 } else {
91 pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
92 }
93#else
94 if (shift_modded) {
95 pseudo_keycode = keymap[keycode][1];
96 } else {
97 pseudo_keycode = keymap[keycode][0];
98 }
99#endif
100 /* if undefined, use got keycode as it is */
101 if (pseudo_keycode == 0x00) {
102 if (shift_modded) {
103 pseudo_keycode = S(keycode);
104 } else {
105 pseudo_keycode = keycode;
106 }
107 }
108 break;
109 default:
110 if (shift_modded) {
111 pseudo_keycode = S(keycode);
112 } else {
113 pseudo_keycode = keycode;
114 }
115 break;
116 }
117 return pseudo_keycode;
118}
119
120uint8_t get_shift_bit(uint16_t keycode) {
121 if ((keycode >> 3) < SHIFT_BIT_SIZE) {
122 return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
123 } else {
124 dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
125 return 0;
126 }
127}
128
129void add_shift_bit(uint16_t keycode) {
130 if ((keycode >> 3) < SHIFT_BIT_SIZE) {
131 send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
132 } else {
133 dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
134 }
135}
136
137void del_shift_bit(uint16_t keycode) {
138 if ((keycode >> 3) < SHIFT_BIT_SIZE) {
139 send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
140 } else {
141 dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
142 }
143}
diff --git a/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
new file mode 100644
index 000000000..681252440
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
@@ -0,0 +1,15 @@
1#ifndef ACTION_PSEUDO_LUT_H
2#define ACTION_PSEUDO_LUT_H
3
4#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) // 1bit per 1key
5
6#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT)
7
8void action_pseudo_lut(keyrecord_t *, uint8_t, const uint16_t (*)[2]);
9uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool);
10
11uint8_t get_shift_bit(uint16_t);
12void add_shift_bit(uint16_t);
13void del_shift_bit(uint16_t);
14
15#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/config.h b/keyboards/hhkb/ansi/keymaps/shela/config.h
new file mode 100644
index 000000000..08cc1fb46
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/config.h
@@ -0,0 +1,12 @@
1#ifndef CONFIG_SHELA_H
2#define CONFIG_SHELA_H
3
4#include "../../config.h"
5
6#undef TAPPING_TERM
7#define TAPPING_TERM 230
8
9#define ONESHOT_TAP_TOGGLE 2
10#define ONESHOT_TIMEOUT 2000
11
12#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/keymap.c b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
new file mode 100644
index 000000000..3971e8f94
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
@@ -0,0 +1,186 @@
1/*
2 * HHKB Pro 2 US Layout for shela
3 */
4#include QMK_KEYBOARD_H
5#include "keymap_jis2us.h"
6#include "action_pseudo_lut.h"
7
8enum keymap_layout
9{
10 BASE = 0,
11 PSEUDO_US,
12 DVORAK,
13 MOUSE,
14 TENKEY,
15 HHKB,
16 SPACE_FN,
17};
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20
21 /* Layer 0: Default Layer
22 * ,-----------------------------------------------------------------------------------------.
23 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp |
24 * |-----------------------------------------------------------------------------------------|
25 * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
26 * |-----------------------------------------------------------------------------------------|
27 * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
28 * |-----------------------------------------------------------------------------------------|
29 * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 |
30 * `-----------------------------------------------------------------------------------------'
31 * |LAlt | LGui | SpaceFN | RGui |RAlt |
32 * `-----------------------------------------------------------------'
33 */
34 [BASE] =
35 LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
36 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
37 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
38 OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
39 KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
40
41 /* Layer 1: Pseudo US Layout Layer
42 * ,-----------------------------------------------------------------------------------------.
43 * | Esc | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | BSp |
44 * |-----------------------------------------------------------------------------------------|
45 * | Tab | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 |
46 * |-----------------------------------------------------------------------------------------|
47 * | Control | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Enter |
48 * |-----------------------------------------------------------------------------------------|
49 * | Shift | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Shift | Fn0 |
50 * `-----------------------------------------------------------------------------------------'
51 * |LGui | Fn3 | SpaceFN | Fn4 |RGui |
52 * `-----------------------------------------------------------------'
53 */
54 [PSEUDO_US] =
55 LAYOUT(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC,
56 KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1,
57 KC_LCTL, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT,
58 KC_LSFT, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT, MO(HHKB),
59 KC_LGUI, MT(MOD_LALT, KC_MHEN), LT(SPACE_FN, KC_SPACE), MT(MOD_RALT, KC_KANA), KC_RGUI),
60
61 /* Layer 2: Dvorak Layer
62 * ,-----------------------------------------------------------------------------------------.
63 * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp |
64 * |-----------------------------------------------------------------------------------------|
65 * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
66 * |-----------------------------------------------------------------------------------------|
67 * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter |
68 * |-----------------------------------------------------------------------------------------|
69 * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 |
70 * `-----------------------------------------------------------------------------------------'
71 * |LAlt | LGui | SpaceFN | RGui |RAlt |
72 * `-----------------------------------------------------------------'
73 */
74 [DVORAK] =
75 LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC,
76 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS,
77 KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
78 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB),
79 KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
80
81 /* Layer 3: Mouse layer
82 * ,-----------------------------------------------------------------------------------------.
83 * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |
84 * |-----------------------------------------------------------------------------------------|
85 * | | | | | | | MwL | MwD | MwU | MwR | | | | |
86 * |-----------------------------------------------------------------------------------------|
87 * | | | | | | | McL | McD | McU | McR | | | |
88 * |-----------------------------------------------------------------------------------------|
89 * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 |
90 * `-----------------------------------------------------------------------------------------'
91 * | | | Mb1 | | |
92 * `-----------------------------------------------------------------'
93 */
94 [MOUSE] =
95 LAYOUT(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_TRNS,
96 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO,
97 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_TRNS,
98 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_NO, KC_NO, KC_TRNS, MO(HHKB),
99 KC_TRNS, KC_TRNS, KC_BTN1, KC_TRNS, KC_TRNS),
100
101 /* Layer 4: Tenkey layer
102 * ,-----------------------------------------------------------------------------------------.
103 * | Esc | | | | | | | | | | / | * | - | | BSp |
104 * |-----------------------------------------------------------------------------------------|
105 * | | | | | | | | | | 7 | 8 | 9 | + | |
106 * |-----------------------------------------------------------------------------------------|
107 * | | | | | | | | | | 4 | 5 | 6 | Enter |
108 * |-----------------------------------------------------------------------------------------|
109 * | | | | | | | | | 1 | 2 | 3 | + | Fn0 |
110 * `-----------------------------------------------------------------------------------------'
111 * | | | SpaceFN | 0 | . |
112 * `-----------------------------------------------------------------'
113 */
114 [TENKEY] =
115 LAYOUT(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, KC_BSPC,
116 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_NO,
117 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_PENT,
118 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, MO(HHKB),
119 KC_TRNS, KC_TRNS, LT(SPACE_FN, KC_SPACE), KC_KP_0, KC_PDOT),
120
121 /* Layer 5: HHKB mode (HHKB Fn)
122 * ,-----------------------------------------------------------------------------------------.
123 * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
124 * |-----------------------------------------------------------------------------------------|
125 * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp |
126 * |-----------------------------------------------------------------------------------------|
127 * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter |
128 * |-----------------------------------------------------------------------------------------|
129 * | | | | | | | + | - | End | PgD | Dow | | |
130 * `-----------------------------------------------------------------------------------------'
131 * | | | | | |
132 * `-----------------------------------------------------------------'
133 */
134 [HHKB] =
135 LAYOUT(KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
136 KC_CAPS, DF(BASE), DF(PSEUDO_US), DF(MOUSE), DF(TENKEY), DF(DVORAK), KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
137 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
138 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
139 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
140
141 /* Layer 6: SpaceFN
142 * ,-----------------------------------------------------------------------------------------.
143 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
144 * |-----------------------------------------------------------------------------------------|
145 * | | Hom | Up | End | | | | Hom | End | | Psc | Slk | Pau | Ins |
146 * |-----------------------------------------------------------------------------------------|
147 * | | Lef | Dow | Rig | PgU | | Lef | Dow | Up | Rig | | | |
148 * |-----------------------------------------------------------------------------------------|
149 * | | | | PgD | | Spc | | PgD | PgU | | | | |
150 * `-----------------------------------------------------------------------------------------'
151 * | | | | | |
152 * `-----------------------------------------------------------------'
153 */
154 [SPACE_FN] =
155 LAYOUT(KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
156 KC_TRNS, KC_HOME, KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
157 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_TRNS,
158 KC_TRNS, KC_NO, KC_NO, KC_PGDN, KC_NO, KC_SPC, KC_NO, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_TRNS, KC_NO,
159 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
160};
161
162/*
163 * user defined action function
164 */
165enum function_id
166{
167 PSEUDO_US_FUNCTION,
168};
169
170void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
171{
172
173 switch (id)
174 {
175 case PSEUDO_US_FUNCTION:
176 action_pseudo_lut(record, BASE, keymap_jis2us);
177 break;
178 }
179}
180
181/*
182 * Fn action definition
183 */
184const uint16_t PROGMEM fn_actions[] = {
185 [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
186};
diff --git a/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
new file mode 100644
index 000000000..edc1e6d86
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
@@ -0,0 +1,32 @@
1#ifndef LAYOUT_JIS2US_H
2#define LAYOUT_JIS2US_H
3
4/* keymap for convert from JIS to US */
5const uint16_t PROGMEM keymap_jis2us[][2] = {
6 [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
7
8 [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
9 [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
10 [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
11 [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
12 [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
13 [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
14 [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
15 [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
16 [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
17 [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
18 [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
19 [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
20 [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
21 [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
22 [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
23 [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
24 [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
25 [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
26 [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
27 [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
28 [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
29 [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
30};
31
32#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/readme.md b/keyboards/hhkb/ansi/keymaps/shela/readme.md
new file mode 100644
index 000000000..5a06a8363
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/readme.md
@@ -0,0 +1,14 @@
1# Shela's HHKB Layout
2
3Layer 0: US Layout
4Layer 1: Pseudo US Layout
5Layer 2: Dvorak Layout
6Layer 3: Mouse
7Layer 4: Tenkey
8Layer 5: HHKB Fn Key
9Layer 6: SpaceFN
10
11## Pseudo US Layout
12
13On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings.
14But, you can use HHKB like a US layout keyboard as it is.
diff --git a/keyboards/hhkb/ansi/keymaps/shela/rules.mk b/keyboards/hhkb/ansi/keymaps/shela/rules.mk
new file mode 100644
index 000000000..d0586bda6
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/rules.mk
@@ -0,0 +1 @@
SRC += action_pseudo_lut.c
diff --git a/keyboards/hhkb/ansi/keymaps/smt/keymap.c b/keyboards/hhkb/ansi/keymaps/smt/keymap.c
new file mode 100644
index 000000000..e1d8bae2e
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/smt/keymap.c
@@ -0,0 +1,172 @@
1/* -*- eval: (turn-on-orgtbl); -*-
2 * default HHKB Layout
3 */
4#include QMK_KEYBOARD_H
5
6#define _QWERTY 0
7#define _COLEMAK 1
8#define _DVORAK 2
9#define _HHKB 3
10
11enum planck_keycodes
12{
13 QWERTY = SAFE_RANGE,
14 COLEMAK,
15 DVORAK,
16 HHKB
17};
18
19// Custom macros
20#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
21#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
22#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
23#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift)
24
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26
27 /* Layer QWERTY: Qwerty Layer
28 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
29 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
30 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
31 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
32 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
33 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
34 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
35 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn | | |
36 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
37
38 |------+------+-----------------------+------+------|
39 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
40 |------+------+-----------------------+------+------|
41 */
42
43 [_QWERTY] = LAYOUT( // Qwerty layer
44 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, MEH_GRV,
45 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
46 CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, SFT_ENT,
47 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_HHKB),
48 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
49
50 /* Layer COLEMAK: Colemak Layer
51 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
52 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
53 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
54 | Tab | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | Backs | |
55 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
56 | Cont | A | R | S | T | D | H | N | E | I | O | ' | Ent | | |
57 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
58 | Shift | Z | X | C | V | B | K | M | , | . | / | Shift | Fn | | |
59 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
60
61 |------+------+-----------------------+------+------|
62 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
63 |------+------+-----------------------+------+------|
64 */
65
66 [_COLEMAK] = LAYOUT( // Colemak layer
67 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, MEH_GRV,
68 HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
69 CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, SFT_ENT,
70 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_HHKB),
71 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
72
73 /* Layer DVORAK: Dvorak Layer
74 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
75 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | \ | ` |
76 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
77 | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | Backs | |
78 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
79 | Cont | A | O | E | U | I | D | H | T | N | S | - | Ent | | |
80 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
81 | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn | | |
82 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
83
84 |------+------+-----------------------+------+------|
85 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
86 |------+------+-----------------------+------+------|
87 */
88
89 [_DVORAK] = LAYOUT( // Dvorak layer
90 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, MEH_GRV,
91 HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC,
92 CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, SFT_ENT,
93 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(_HHKB),
94 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
95
96 /* Layer HHKB: HHKB mode (HHKB Fn)
97 |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----|
98 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
99 |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----|
100 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
101 |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----|
102 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
103 |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----|
104 | | | Qwt | Cmk | Dvk | | + | - | End | PgD | Dow | | | | |
105 |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----|
106
107 |------+------+----------------------+------+------+
108 | **** | **** | ******************** | **** | **** |
109 |------+------+----------------------+------+------+
110
111 */
112
113 [_HHKB] = LAYOUT(
114 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
115 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_BSPC,
116 _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
117 _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
118 _______, _______, _______, _______, _______)};
119
120const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
121{
122 // MACRODOWN only works in this function
123 switch (id)
124 {
125 case 0:
126 if (record->event.pressed)
127 {
128 register_code(KC_RSFT);
129 }
130 else
131 {
132 unregister_code(KC_RSFT);
133 }
134 break;
135 }
136 return MACRO_NONE;
137};
138
139void persistent_default_layer_set(uint16_t default_layer)
140{
141 eeconfig_update_default_layer(default_layer);
142 default_layer_set(default_layer);
143}
144
145bool process_record_user(uint16_t keycode, keyrecord_t *record)
146{
147 switch (keycode)
148 {
149 case QWERTY:
150 if (record->event.pressed)
151 {
152 persistent_default_layer_set(1UL << _QWERTY);
153 }
154 return false;
155 break;
156 case COLEMAK:
157 if (record->event.pressed)
158 {
159 persistent_default_layer_set(1UL << _COLEMAK);
160 }
161 return false;
162 break;
163 case DVORAK:
164 if (record->event.pressed)
165 {
166 persistent_default_layer_set(1UL << _DVORAK);
167 }
168 return false;
169 break;
170 }
171 return true;
172}
diff --git a/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c
new file mode 100644
index 000000000..68e23b45d
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c
@@ -0,0 +1,20 @@
1#include QMK_KEYBOARD_H
2
3#define SPACE_FN LT(1, KC_SPC)
4
5const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6
7 [0] = LAYOUT( // default layer
8 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_RBRC, KC_GRV,
9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_NUHS, KC_BSPC,
10 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
11 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NUBS,
12 KC_LALT, KC_LGUI, SPACE_FN, KC_RGUI, KC_RALT),
13
14 [1] = LAYOUT(
15 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
16 KC_CAPS, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, KC_HOME, _______, _______,
17 _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, KC_END, _______,
18 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
19 _______, _______, _______, _______, _______)
20};
diff --git a/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md
new file mode 100644
index 000000000..0da9d96ee
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md
@@ -0,0 +1,22 @@
1# tobiasvl's ISO layout for HHKB
2
3This is my attempt to adapt my regular 60% Norwegian ISO layout to the physical HHKB layout, on the Happy Hacking Keyboard Pro 2 keyboard with the alternate QMK-compatible Hasu controller.
4
5## Base layer
6
7![HHKB ISO](https://i.imgur.com/8n4Kixw.png)
8
9The following changes have been made from standard HHKB:
10
11* The ] and \ keys are swapped so they're in the ISO locations, but a row higher. Whether or not this is a good idea depends heavily on what specific language layout you're using, but it makes sense for Norwegian, I think.
12* The Fn key is replaced with the ISO key (ie. "non-US backslash"). It's gotta go somewhere!
13* The spacebar doubles as space when tapped and Fn when held (ie. SpaceFN). This is a personal preference, but my second and more traditional choice would probably be to replace right GUI/Super with Fn.
14* Grave Escape has been added (shift + Esc produces ~).
15
16## Function layer
17
18This is just how I personally prefer to set up my function layer, and doesn't have anything to do with ISO. You probably want to swap out this wholesale for your own function layer.
19
20* Navigation is moved: Arrow keys on WASD, Page Up and Page Down on QE, Home and End on the right (I have them to the left of the vertical Enter on ISO layouts).
21* Grave Escape has been added (Fn + Esc produces \`).
22* No media keys or anything. I don't use them.
diff --git a/keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore b/keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore
new file mode 100644
index 000000000..4b8c99bfb
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore
@@ -0,0 +1,3 @@
1*.h
2matrix.c
3rules.mk
diff --git a/keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c b/keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c
new file mode 100644
index 000000000..d7aea9773
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c
@@ -0,0 +1,12 @@
1#include QMK_KEYBOARD_H
2#include "tominabox1.h"
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5 [0] = LAYOUT(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, TD(TD_SFT_CPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2)),
6
7 [1] = LAYOUT(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_CAPS, KC_MFFD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC__MUTE, KC__VOLDOWN, KC__VOLUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
8
9 [2] = LAYOUT(KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS),
10
11 [3] = LAYOUT(KC_GESC, KC_EXLM, KC_EML, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN, KC_UP, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS)
12};
diff --git a/keyboards/hhkb/ansi/keymaps/via/keymap.c b/keyboards/hhkb/ansi/keymaps/via/keymap.c
new file mode 100644
index 000000000..bdbd32898
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/via/keymap.c
@@ -0,0 +1,68 @@
1#include QMK_KEYBOARD_H
2
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5
6 /* BASE Level: Default Layer
7 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
8 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
9 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
10 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
11 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
12 | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
13 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
14 | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
15 |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
16
17 |------+------+-----------------------+------+------|
18 | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
19 |------+------+-----------------------+------+------|
20 */
21
22 [0] = LAYOUT( // default layer
23 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
24 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
25 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
26 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
27 KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT
28 ),
29
30 /* Layer HHKB: HHKB mode (HHKB Fn)
31 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
32 | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
33 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
34 | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
35 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
36 | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
37 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
38 | | | | | | | + | - | End | PgD | Dow | | | | |
39 |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
40
41 |------+------+----------------------+------+------+
42 | **** | **** | ******************** | **** | **** |
43 |------+------+----------------------+------+------+
44
45 */
46
47 [1] = LAYOUT(
48 KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
49 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
50 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
51 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
52 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
53 ),
54 [2] = LAYOUT(
55 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
56 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
57 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
58 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
59 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
60 ),
61 [3] = LAYOUT(
62 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
63 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
64 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
65 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
66 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
67 )
68};
diff --git a/keyboards/hhkb/ansi/keymaps/via/rules.mk b/keyboards/hhkb/ansi/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/hhkb/ansi/keymaps/xyverz/keymap.c b/keyboards/hhkb/ansi/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..eebaede97
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/xyverz/keymap.c
@@ -0,0 +1,137 @@
1/*
2Xyverz's HHKB layout
3
4Rev 0.1, initial commit.
5
6This is my initial keymap for the HHKB with Hasu's alternate controller.
7The default layer is Dvorak, with Qwerty and Colemak being optional.
8Will probably add to it later, but for now I'm going to enjoy this as it is.
9*/
10
11#include QMK_KEYBOARD_H
12
13enum layer_names {
14 _QW,
15 _DV,
16 _CM,
17 _FL,
18};
19
20enum planck_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK };
21
22#define FN_TAB LT(_FL, KC_TAB)
23
24// clang-format off
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26
27 /*
28 * _QW: Qwerty Layer
29 * ,-----------------------------------------------------------.
30 * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |Del|
31 * |-----------------------------------------------------------|
32 * |Fn/Tb| Q| W| E| R| T| Y| U| I| O| P| [| ]|BkSpc|
33 * |-----------------------------------------------------------|
34 * |Control| A| S| D| F| G| H| J| K| L| ;| '| Return|
35 * |-----------------------------------------------------------|
36 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |Fn|
37 * |-----------------------------------------------------------|
38 * | |Alt |Gui | Space |Gui |Alt | |
39 * `-----------------------------------------------------------'
40 */
41 /* Layer 0: Qwerty */
42 [_QW] = LAYOUT(
43 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL ,
44 FN_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
45 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT ,
46 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL),
47 KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
48 ),
49
50 /*
51 * _DV: Dvorak Layer
52 * ,-----------------------------------------------------------.
53 * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \ |Del|
54 * |-----------------------------------------------------------|
55 * |Fn/Tb| '| ,| .| P| Y| F| G| C| R| L| /| =|BkSpc|
56 * |-----------------------------------------------------------|
57 * |Control| A| O| E| U| I| D| H| T| N| S| -| Return|
58 * |-----------------------------------------------------------|
59 * |Shift | ;| Q| J| K| X| B| M| W| V| Z| Shift |Fn|
60 * |-----------------------------------------------------------|
61 * | |Alt |Gui | Space |Gui |Alt | |
62 * `-----------------------------------------------------------'
63 */
64 /* Layer 1: Dvorak */
65 [_DV] = LAYOUT(
66 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
67 FN_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC,
68 KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
69 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(_FL),
70 KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
71 ),
72
73 /*
74 * _CM: Colemak Layer
75 * ,-----------------------------------------------------------.
76 * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |Del|
77 * |-----------------------------------------------------------|
78 * |Fn/Tb| Q| W| F| P| G| J| L| U| Y| ;| [| ]|BkSpc|
79 * |-----------------------------------------------------------|
80 * |Control| A| R| S| T| D| H| N| E| I| O| '| Return|
81 * |-----------------------------------------------------------|
82 * |Shift | Z| X| C| V| B| K| M| ,| .| /| Shift |Fn|
83 * |-----------------------------------------------------------|
84 * | |Alt |Gui | Space |Gui |Alt | |
85 * `-----------------------------------------------------------'
86 */
87 /* Layer 2: Colemak */
88 [_CM] = LAYOUT(
89 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL ,
90 FN_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
91 KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
92 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL),
93 KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
94 ),
95
96 /*
97 * _FL: Function Layer
98 * ,-----------------------------------------------------------.
99 * |Grv |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |RST|
100 * |-----------------------------------------------------------|
101 * | | |_QW|_DV|_CM| | |PgU| Up|PgD|PSc|SLk|Pau| |
102 * |-----------------------------------------------------------|
103 * | | |MPr|MPl|MNx| |Hom| Lt| Dn| Rt| | | |
104 * |-----------------------------------------------------------|
105 * |CAPS | |Mut|VlD|VlU| |End| | | | | | |
106 * |-----------------------------------------------------------|
107 * | | | | Ins | | | |
108 * `-----------------------------------------------------------'
109 */
110 /* Layer 3: Functions */
111 [_FL] = LAYOUT(
112 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET ,
113 _______, _______, QWERTY, DVORAK, COLEMAK, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______,
114 KC_CAPS, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
115 _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_END, _______, _______, _______, _______, _______, _______,
116 _______, _______, _______, _______, _______
117 ),
118
119};
120// clang-format on
121
122bool process_record_user(uint16_t keycode, keyrecord_t *record) {
123 if (record->event.pressed) {
124 switch (keycode) {
125 case DVORAK:
126 set_single_persistent_default_layer(_DV);
127 return false;
128 case QWERTY:
129 set_single_persistent_default_layer(_QW);
130 return false;
131 case COLEMAK:
132 set_single_persistent_default_layer(_CM);
133 return false;
134 }
135 }
136 return true;
137} \ No newline at end of file
diff --git a/keyboards/hhkb/ansi/matrix.c b/keyboards/hhkb/ansi/matrix.c
new file mode 100644
index 000000000..f22e69f6b
--- /dev/null
+++ b/keyboards/hhkb/ansi/matrix.c
@@ -0,0 +1,211 @@
1/*
2Copyright 2011 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18/*
19 * scan matrix
20 */
21#include <stdint.h>
22#include <stdbool.h>
23#include <util/delay.h>
24#include "print.h"
25#include "debug.h"
26#include "util.h"
27#include "timer.h"
28#include "matrix.h"
29#include "hhkb_avr.h"
30#include <avr/wdt.h>
31#include "suspend.h"
32#include "lufa.h"
33
34
35// matrix power saving
36#define MATRIX_POWER_SAVE 10000
37static uint32_t matrix_last_modified = 0;
38
39// matrix state buffer(1:on, 0:off)
40static matrix_row_t *matrix;
41static matrix_row_t *matrix_prev;
42static matrix_row_t _matrix0[MATRIX_ROWS];
43static matrix_row_t _matrix1[MATRIX_ROWS];
44
45
46inline
47uint8_t matrix_rows(void)
48{
49 return MATRIX_ROWS;
50}
51
52inline
53uint8_t matrix_cols(void)
54{
55 return MATRIX_COLS;
56}
57
58void matrix_init(void)
59{
60#ifdef DEBUG
61 debug_enable = true;
62 debug_keyboard = true;
63#endif
64
65 KEY_INIT();
66
67 // initialize matrix state: all keys off
68 for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
69 for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
70 matrix = _matrix0;
71 matrix_prev = _matrix1;
72}
73
74__attribute__ ((weak))
75void matrix_scan_user(void) {
76}
77
78void matrix_scan_kb(void) {
79 matrix_scan_user();
80}
81
82uint8_t matrix_scan(void)
83{
84 uint8_t *tmp;
85
86 tmp = matrix_prev;
87 matrix_prev = matrix;
88 matrix = tmp;
89
90 // power on
91 if (!KEY_POWER_STATE()) KEY_POWER_ON();
92 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
93 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
94 KEY_SELECT(row, col);
95 _delay_us(5);
96
97 // Not sure this is needed. This just emulates HHKB controller's behaviour.
98 if (matrix_prev[row] & (1<<col)) {
99 KEY_PREV_ON();
100 }
101 _delay_us(10);
102
103 // NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE.
104 // If V-USB interrupts in this section we could lose 40us or so
105 // and would read invalid value from KEY_STATE.
106 uint8_t last = TIMER_RAW;
107
108 KEY_ENABLE();
109
110 // Wait for KEY_STATE outputs its value.
111 // 1us was ok on one HHKB, but not worked on another.
112 // no wait doesn't work on Teensy++ with pro(1us works)
113 // no wait does work on tmk PCB(8MHz) with pro2
114 // 1us wait does work on both of above
115 // 1us wait doesn't work on tmk(16MHz)
116 // 5us wait does work on tmk(16MHz)
117 // 5us wait does work on tmk(16MHz/2)
118 // 5us wait does work on tmk(8MHz)
119 // 10us wait does work on Teensy++ with pro
120 // 10us wait does work on 328p+iwrap with pro
121 // 10us wait doesn't work on tmk PCB(8MHz) with pro2(very lagged scan)
122 _delay_us(5);
123
124 if (KEY_STATE()) {
125 matrix[row] &= ~(1<<col);
126 } else {
127 matrix[row] |= (1<<col);
128 }
129
130 // Ignore if this code region execution time elapses more than 20us.
131 // MEMO: 20[us] * (TIMER_RAW_FREQ / 1000000)[count per us]
132 // MEMO: then change above using this rule: a/(b/c) = a*1/(b/c) = a*(c/b)
133 if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) {
134 matrix[row] = matrix_prev[row];
135 }
136
137 _delay_us(5);
138 KEY_PREV_OFF();
139 KEY_UNABLE();
140
141 // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
142 // This takes 25us or more to make sure KEY_STATE returns to idle state.
143
144 _delay_us(75);
145
146 }
147 if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
148 }
149 // power off
150 if (KEY_POWER_STATE() &&
151 (USB_DeviceState == DEVICE_STATE_Suspended ||
152 USB_DeviceState == DEVICE_STATE_Unattached ) &&
153 timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
154 KEY_POWER_OFF();
155 suspend_power_down();
156 }
157
158 matrix_scan_quantum();
159
160 return 1;
161}
162
163bool matrix_is_modified(void)
164{
165 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
166 if (matrix[i] != matrix_prev[i])
167 return true;
168 }
169 return false;
170}
171
172inline
173bool matrix_has_ghost(void)
174{
175 return false;
176}
177
178inline
179bool matrix_is_on(uint8_t row, uint8_t col)
180{
181 return (matrix[row] & (1<<col));
182}
183
184inline
185matrix_row_t matrix_get_row(uint8_t row)
186{
187 return matrix[row];
188}
189
190void matrix_print(void)
191{
192 print("\nr/c 01234567\n");
193 for (uint8_t row = 0; row < matrix_rows(); row++) {
194 xprintf("%02X: %08b\n", row, bitrev(matrix_get_row(row)));
195 }
196}
197
198uint8_t matrix_key_count(void) {
199 uint8_t count = 0;
200 for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) {
201 count += bitpop16(matrix_get_row(r));
202 }
203 return count;
204}
205
206void matrix_power_up(void) {
207 KEY_POWER_ON();
208}
209void matrix_power_down(void) {
210 KEY_POWER_OFF();
211}
diff --git a/keyboards/hhkb/ansi/readme.md b/keyboards/hhkb/ansi/readme.md
new file mode 100644
index 000000000..495aa4c3f
--- /dev/null
+++ b/keyboards/hhkb/ansi/readme.md
@@ -0,0 +1,14 @@
1HHKB Alternate Controller
2===
3
4An alternative controler for the HHKB designed by hasu.
5
6Keyboard Maintainer: QMK Community
7Hardware Supported: HHKB Alternate Controller
8Hardware Availability: https://geekhack.org/index.php?topic=12047.0
9
10Make example for this keyboard (after setting up your build environment):
11
12 make hhkb/ansi:default
13
14See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hhkb/ansi/rules.mk b/keyboards/hhkb/ansi/rules.mk
new file mode 100644
index 000000000..a367ef48d
--- /dev/null
+++ b/keyboards/hhkb/ansi/rules.mk
@@ -0,0 +1,71 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14# Build Options
15# comment out to disable the options.
16#
17BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = yes # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = yes # Console for debug
21COMMAND_ENABLE = yes # Commands for debug and configuration
22CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
23# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
24# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
25# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
26# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
27# MIDI_ENABLE = yes # MIDI controls
28# UNICODE_ENABLE = yes # Unicode
29# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
30
31
32# HHKB_RN42_ENABLE = yes # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.
33
34# Either uncomment the HHKB_RN42_ENABLE line above, or run make enabling the
35# feature. Be sure to clean any existing build before trying to enable rn42
36# support. For example:
37#
38# make hhkb-keymap-clean
39# make hhkb-keymap-dfu HHKB_RN42_ENABLE=yes
40
41# project specific files
42SRC = matrix.c
43
44ifeq ($(strip $(HHKB_RN42_ENABLE)), yes)
45
46OPT_DEFS += -DHHKB_RN42_ENABLE
47
48# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
49# HHKB Alt controller.
50RN42_DIR = ../rn42
51
52SRC += serial_uart.c \
53 ../rn42/suart.S \
54 ../rn42/rn42.c \
55 ../rn42/rn42_task.c \
56 ../rn42/battery.c \
57 ../rn42/main.c
58
59VPATH += $(RN42_DIR)
60
61endif
62
63
64# debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
65# debug-on: all
66
67# debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
68# debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
69# debug-off: all
70
71LAYOUTS = 60_hhkb