aboutsummaryrefslogtreecommitdiff
path: root/keyboards/bpiphany
diff options
context:
space:
mode:
authorAkshay <[email protected]>2022-04-10 12:13:40 +0100
committerAkshay <[email protected]>2022-04-10 12:13:40 +0100
commitdc90387ce7d8ba7b607d9c48540bf6d8b560f14d (patch)
tree4ccb8fa5886b66fa9d480edef74236c27f035e16 /keyboards/bpiphany
Diffstat (limited to 'keyboards/bpiphany')
-rw-r--r--keyboards/bpiphany/frosty_flake/20130602/20130602.c24
-rw-r--r--keyboards/bpiphany/frosty_flake/20130602/matrix.c86
-rw-r--r--keyboards/bpiphany/frosty_flake/20130602/rules.mk22
-rw-r--r--keyboards/bpiphany/frosty_flake/20140521/20140521.c24
-rw-r--r--keyboards/bpiphany/frosty_flake/20140521/matrix.c86
-rw-r--r--keyboards/bpiphany/frosty_flake/20140521/rules.mk22
-rw-r--r--keyboards/bpiphany/frosty_flake/config.h96
-rw-r--r--keyboards/bpiphany/frosty_flake/frosty_flake.h136
-rw-r--r--keyboards/bpiphany/frosty_flake/info.json299
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h4
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c117
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md86
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk17
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c12
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/readme.md1
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk9
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h18
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c225
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md24
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk20
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md9
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c11
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md1
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk10
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/via/keymap.c44
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/via/rules.mk2
-rw-r--r--keyboards/bpiphany/frosty_flake/readme.md47
-rw-r--r--keyboards/bpiphany/frosty_flake/rules.mk1
-rw-r--r--keyboards/bpiphany/ghost_squid/config.h42
-rw-r--r--keyboards/bpiphany/ghost_squid/ghost_squid.c26
-rw-r--r--keyboards/bpiphany/ghost_squid/ghost_squid.h44
-rw-r--r--keyboards/bpiphany/ghost_squid/keymaps/default/keymap.c77
-rw-r--r--keyboards/bpiphany/ghost_squid/keymaps/default/readme.md1
-rw-r--r--keyboards/bpiphany/ghost_squid/matrix.c97
-rw-r--r--keyboards/bpiphany/ghost_squid/readme.md27
-rw-r--r--keyboards/bpiphany/ghost_squid/rules.mk20
-rw-r--r--keyboards/bpiphany/kitten_paw/config.h109
-rw-r--r--keyboards/bpiphany/kitten_paw/info.json14
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c15
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h31
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c199
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md18
-rw-r--r--keyboards/bpiphany/kitten_paw/kitten_paw.c1
-rw-r--r--keyboards/bpiphany/kitten_paw/kitten_paw.h63
-rw-r--r--keyboards/bpiphany/kitten_paw/matrix.c183
-rw-r--r--keyboards/bpiphany/kitten_paw/readme.md16
-rw-r--r--keyboards/bpiphany/kitten_paw/rules.mk22
-rw-r--r--keyboards/bpiphany/pegasushoof/.noci0
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/.noci0
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/2013.c25
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/2013.h82
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/config.h36
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/matrix.c222
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/rules.mk2
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/2015.c25
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/2015.h102
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/config.h37
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/matrix.c158
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/rules.mk2
-rw-r--r--keyboards/bpiphany/pegasushoof/config.h20
-rw-r--r--keyboards/bpiphany/pegasushoof/info.json377
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c105
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h6
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c132
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md75
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c56
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk10
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c54
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk10
-rw-r--r--keyboards/bpiphany/pegasushoof/readme.md21
-rw-r--r--keyboards/bpiphany/pegasushoof/rules.mk22
-rw-r--r--keyboards/bpiphany/readme.md6
-rw-r--r--keyboards/bpiphany/sixshooter/config.h63
-rw-r--r--keyboards/bpiphany/sixshooter/info.json10
-rw-r--r--keyboards/bpiphany/sixshooter/keymaps/default/keymap.c73
-rw-r--r--keyboards/bpiphany/sixshooter/keymaps/default/readme.md1
-rw-r--r--keyboards/bpiphany/sixshooter/readme.md13
-rw-r--r--keyboards/bpiphany/sixshooter/rules.mk17
-rw-r--r--keyboards/bpiphany/sixshooter/sixshooter.c18
-rw-r--r--keyboards/bpiphany/sixshooter/sixshooter.h42
-rw-r--r--keyboards/bpiphany/tiger_lily/config.h100
-rw-r--r--keyboards/bpiphany/tiger_lily/info.json13
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c11
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/readme.md1
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk9
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c11
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md3
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk9
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/via/config.h18
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/via/keymap.c40
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/via/rules.mk10
-rw-r--r--keyboards/bpiphany/tiger_lily/matrix.c155
-rw-r--r--keyboards/bpiphany/tiger_lily/readme.md16
-rw-r--r--keyboards/bpiphany/tiger_lily/rules.mk22
-rw-r--r--keyboards/bpiphany/tiger_lily/tiger_lily.c1
-rw-r--r--keyboards/bpiphany/tiger_lily/tiger_lily.h64
-rw-r--r--keyboards/bpiphany/unloved_bastard/config.h93
-rw-r--r--keyboards/bpiphany/unloved_bastard/info.json15
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.json1
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c26
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md3
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_iso/keymap.c26
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_iso/readme.md3
-rw-r--r--keyboards/bpiphany/unloved_bastard/matrix.c156
-rw-r--r--keyboards/bpiphany/unloved_bastard/readme.md15
-rw-r--r--keyboards/bpiphany/unloved_bastard/rules.mk23
-rw-r--r--keyboards/bpiphany/unloved_bastard/unloved_bastard.c16
-rw-r--r--keyboards/bpiphany/unloved_bastard/unloved_bastard.h77
110 files changed, 5251 insertions, 0 deletions
diff --git a/keyboards/bpiphany/frosty_flake/20130602/20130602.c b/keyboards/bpiphany/frosty_flake/20130602/20130602.c
new file mode 100644
index 000000000..be4e1a312
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20130602/20130602.c
@@ -0,0 +1,24 @@
1#include "frosty_flake.h"
2
3void keyboard_pre_init_kb() {
4 setPinOutput(B7); // num lock
5 writePinHigh(B7);
6 setPinOutput(C5); // caps lock
7 writePinHigh(C7);
8 setPinOutput(C6); // scroll lock
9 writePinHigh(C6);
10
11 keyboard_pre_init_user();
12}
13
14bool led_update_kb(led_t usb_led) {
15 // user requests no further processing
16 if (!led_update_user(usb_led))
17 return true;
18
19 writePin(C5, !usb_led.caps_lock);
20 writePin(B7, !usb_led.num_lock);
21 writePin(C6, !usb_led.scroll_lock);
22
23 return true;
24}
diff --git a/keyboards/bpiphany/frosty_flake/20130602/matrix.c b/keyboards/bpiphany/frosty_flake/20130602/matrix.c
new file mode 100644
index 000000000..e0337f9ec
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20130602/matrix.c
@@ -0,0 +1,86 @@
1/*
2 Copyright 2017 Gabriel Young <[email protected]>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include <util/delay.h>
19#include "matrix.h"
20
21
22static matrix_row_t scan_col(void) {
23 // Each of the 8 columns is read off pins as below
24 // 7 6 5 4 3 2 1 0
25 // ,--,--,--,--,--,--,--,--,
26 // |B0|B3|B2|B1|B6|B4|B5|C7|
27 // `--`--`--`--`--`--`--`--`
28 return (
29 (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) |
30 (PIND&(1<<0) ? 0 : ((matrix_row_t)1<<1)) |
31 (PIND&(1<<1) ? 0 : ((matrix_row_t)1<<2)) |
32 (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<3)) |
33 (PIND&(1<<5) ? 0 : ((matrix_row_t)1<<4)) |
34 (PIND&(1<<4) ? 0 : ((matrix_row_t)1<<5)) |
35 (PIND&(1<<2) ? 0 : ((matrix_row_t)1<<6)) |
36 (PIND&(1<<6) ? 0 : ((matrix_row_t)1<<7))
37 );
38}
39
40static void select_row(uint8_t row) {
41 switch (row) {
42 case 0: PORTB = (PORTB & ~0b01111110) | 0b00111010; break;
43 case 1: PORTB = (PORTB & ~0b01111110) | 0b01011000; break;
44 case 2: PORTB = (PORTB & ~0b01111110) | 0b01110000; break;
45 case 3: PORTB = (PORTB & ~0b01111110) | 0b01101110; break;
46 case 4: PORTB = (PORTB & ~0b01111110) | 0b01101100; break;
47 case 5: PORTB = (PORTB & ~0b01111110) | 0b01101010; break;
48 case 6: PORTB = (PORTB & ~0b01111110) | 0b01101000; break;
49 case 7: PORTB = (PORTB & ~0b01111110) | 0b01100100; break;
50 case 8: PORTB = (PORTB & ~0b01111110) | 0b01100000; break;
51 case 9: PORTB = (PORTB & ~0b01111110) | 0b01100010; break;
52 case 10: PORTB = (PORTB & ~0b01111110) | 0b00011010; break;
53 case 11: PORTB = (PORTB & ~0b01111110) | 0b00011000; break;
54 case 12: PORTB = (PORTB & ~0b01111110) | 0b00111100; break;
55 case 13: PORTB = (PORTB & ~0b01111110) | 0b01100110; break;
56 case 14: PORTB = (PORTB & ~0b01111110) | 0b00111000; break;
57 case 15: PORTB = (PORTB & ~0b01111110) | 0b01110010; break;
58 case 16: PORTB = (PORTB & ~0b01111110) | 0b00011110; break;
59 case 17: PORTB = (PORTB & ~0b01111110) | 0b00111110; break;
60 }
61}
62
63void matrix_init_custom(void) {
64 /* Column output pins */
65 DDRB |= 0b01111110;
66 /* Row input pins */
67 DDRC &= ~0b10000100;
68 DDRD &= ~0b01110111;
69 PORTC |= 0b10000100;
70 PORTD |= 0b01110111;
71}
72
73// matrix is 18 uint8_t.
74// we select the row (one of 18), then read the column
75bool matrix_scan_custom(matrix_row_t current_matrix[]) {
76 bool has_changed = false;
77 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
78 matrix_row_t orig = current_matrix[row];
79 select_row(row);
80 _delay_us(3);
81 current_matrix[row] = scan_col();
82 has_changed |= (orig != current_matrix[row]);
83 }
84
85 return has_changed;
86}
diff --git a/keyboards/bpiphany/frosty_flake/20130602/rules.mk b/keyboards/bpiphany/frosty_flake/20130602/rules.mk
new file mode 100644
index 000000000..dc435a332
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20130602/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17AUDIO_ENABLE = no # Audio output
18
19CUSTOM_MATRIX = lite
20SRC += 20130602/matrix.c
21
22LAYOUTS = tkl_ansi
diff --git a/keyboards/bpiphany/frosty_flake/20140521/20140521.c b/keyboards/bpiphany/frosty_flake/20140521/20140521.c
new file mode 100644
index 000000000..cd425cffa
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20140521/20140521.c
@@ -0,0 +1,24 @@
1#include "frosty_flake.h"
2
3void keyboard_pre_init_kb() {
4 setPinOutput(B7); // num lock
5 writePinHigh(B7);
6 setPinOutput(C5); // caps lock
7 writePinHigh(C7);
8 setPinOutput(C6); // scroll lock
9 writePinHigh(C6);
10
11 keyboard_pre_init_user();
12}
13
14bool led_update_kb(led_t usb_led) {
15 // user requests no further processing
16 if (!led_update_user(usb_led))
17 return true;
18
19 writePin(B7, !usb_led.caps_lock);
20 writePin(C5, !usb_led.num_lock);
21 writePin(C6, !usb_led.scroll_lock);
22
23 return true;
24}
diff --git a/keyboards/bpiphany/frosty_flake/20140521/matrix.c b/keyboards/bpiphany/frosty_flake/20140521/matrix.c
new file mode 100644
index 000000000..24c7617b1
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20140521/matrix.c
@@ -0,0 +1,86 @@
1/*
2 Copyright 2017 Gabriel Young <[email protected]>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include <util/delay.h>
19#include "matrix.h"
20
21
22static matrix_row_t scan_col(void) {
23 // Each of the 8 columns is read off pins as below
24 // 7 6 5 4 3 2 1 0
25 // ,--,--,--,--,--,--,--,--,
26 // |B0|B3|B2|B1|B6|B4|B5|C7|
27 // `--`--`--`--`--`--`--`--`
28 return (
29 (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
30 (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) |
31 (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
32 (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
33 (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
34 (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
35 (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
36 (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7))
37 );
38}
39
40static void select_row(uint8_t row) {
41 switch (row) {
42 case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break;
43 case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break;
44 case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break;
45 case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break;
46 case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break;
47 case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break;
48 case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break;
49 case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break;
50 case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break;
51 case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break;
52 case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break;
53 case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break;
54 case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break;
55 case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break;
56 case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break;
57 case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break;
58 case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break;
59 case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break;
60 }
61}
62
63void matrix_init_custom(void) {
64 /* Row output pins */
65 DDRD |= 0b01111011;
66 /* Column input pins */
67 DDRC &= ~0b10000000;
68 DDRB &= ~0b01111111;
69 PORTC |= 0b10000000;
70 PORTB |= 0b01111111;
71}
72
73// matrix is 18 uint8_t.
74// we select the row (one of 18), then read the column
75bool matrix_scan_custom(matrix_row_t current_matrix[]) {
76 bool has_changed = false;
77 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
78 matrix_row_t orig = current_matrix[row];
79 select_row(row);
80 _delay_us(3);
81 current_matrix[row] = scan_col();
82 has_changed |= (orig != current_matrix[row]);
83 }
84
85 return has_changed;
86}
diff --git a/keyboards/bpiphany/frosty_flake/20140521/rules.mk b/keyboards/bpiphany/frosty_flake/20140521/rules.mk
new file mode 100644
index 000000000..035e59f91
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/20140521/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17AUDIO_ENABLE = no # Audio output
18
19CUSTOM_MATRIX = lite
20SRC += 20140521/matrix.c
21
22LAYOUTS = tkl_ansi
diff --git a/keyboards/bpiphany/frosty_flake/config.h b/keyboards/bpiphany/frosty_flake/config.h
new file mode 100644
index 000000000..a60d728ac
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/config.h
@@ -0,0 +1,96 @@
1/*
2Copyright 2012 Jun Wako <[email protected]>
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 0xFEED
24#define PRODUCT_ID 0x6060
25#define DEVICE_VER 0x0001
26#define MANUFACTURER Bathroom Epiphanies
27#define PRODUCT frosty_flake
28
29/*
30 * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies
31 * Ported from the Bathroom Epiphanies TMK Firmware:
32 * https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers
33 *
34 */
35
36/* key matrix size */
37#define MATRIX_ROWS 18 // ColA - ColR in the schematic
38#define MATRIX_COLS 8 // Row0 - Row7 in the schematic
39
40/*
41 * Keyboard Matrix Assignments
42 *
43 * MATRIX_ROW_PINS and MATRIX_COL_PINS aren't actually used and are included
44 * for data driven compatibility.
45 */
46#define MATRIX_COL_PINS { B0, B3, B2, B1, B6, B4, B5, C7 }
47#define MATRIX_ROW_PINS { NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN, NO_PIN }
48#define UNUSED_PINS { C0, C1, C2, C3, C4, D2, D7 }
49
50/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
51#define DEBOUNCE 5
52
53/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
54#define LOCKING_SUPPORT_ENABLE
55/* Locking resynchronize hack */
56#define LOCKING_RESYNC_ENABLE
57
58/*
59 * Force NKRO
60 *
61 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
62 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
63 * makefile for this to work.)
64 *
65 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
66 * until the next keyboard reset.
67 *
68 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
69 * fully operational during normal computer usage.
70 *
71 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
72 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
73 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
74 * power-up.
75 *
76 */
77//#define FORCE_NKRO
78
79/*
80 * Feature disable options
81 * These options are also useful to firmware size reduction.
82 */
83
84/* disable debug print */
85//#define NO_DEBUG
86
87/* disable print */
88//#define NO_PRINT
89
90/* disable action features */
91//#define NO_ACTION_LAYER
92//#define NO_ACTION_TAPPING
93//#define NO_ACTION_ONESHOT
94//#define NO_ACTION_MACRO
95//#define NO_ACTION_FUNCTION
96#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/bpiphany/frosty_flake/frosty_flake.h b/keyboards/bpiphany/frosty_flake/frosty_flake.h
new file mode 100644
index 000000000..f4f69f1a3
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/frosty_flake.h
@@ -0,0 +1,136 @@
1#pragma once
2
3#include "quantum.h"
4
5// This a shortcut to help you visually see your layout.
6// The following is an example using the Planck MIT layout
7// The first section contains all of the arguements
8// The second converts the arguments into a two-dimensional array
9
10/*
11 Matrix col/row mapping
12
13 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
14 | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
15 `----' `-------------------' `-------------------' `-------------------' `--------------'
16 ,-------------------------------------------------------------------------. ,--------------. ,-------------------.
17 | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
18 |-------------------------------------------------------------------------| |--------------| |-------------------|
19 | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
20 |-------------------------------------------------------------------------| '--------------' |-------------- |
21 | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | |
22 |-------------------------------------------------------------------------| ,----. |-------------------|
23 | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 |
24 |-------------------------------------------------------------------------| ,--------------. |-------------- |
25 | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
26 `-------------------------------------------------------------------------' `--------------' `-------------------'
27*/
28#define LAYOUT( \
29 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
30 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
31 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
32 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
33 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
34 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
35) \
36{ \
37/* 0 1 2 3 4 5 6 7 */ \
38/* A */ { KC_NO, KA1, KC_NO, KC_NO, KA4, KA5, KC_NO, KA7, }, \
39/* B */ { KB0, KB1, KB2, KB3, KB4, KC_NO, KB6, KB7, }, \
40/* C */ { KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC5, KC6, KC7, }, \
41/* D */ { KD0, KD1, KD2, KD3, KD4, KD5, KC_NO, KD7, }, \
42/* E */ { KC_NO, KE1, KE2, KE3, KE4, KE5, KE6, KE7, }, \
43/* F */ { KF0, KF1, KF2, KF3, KF4, KF5, KF6, KF7, }, \
44/* G */ { KG0, KG1, KG2, KG3, KG4, KG5, KG6, KG7, }, \
45/* H */ { KC_NO, KH1, KH2, KH3, KH4, KH5, KH6, KH7, }, \
46/* I */ { KC_NO, KI1, KI2, KI3, KI4, KI5, KI6, KI7, }, \
47/* J */ { KC_NO, KJ1, KJ2, KJ3, KJ4, KJ5, KJ6, KJ7, }, \
48/* K */ { KK0, KK1, KK2, KK3, KK4, KK5, KK6, KC_NO, }, \
49/* L */ { KL0, KL1, KL2, KL3, KL4, KL5, KL6, KC_NO, }, \
50/* M */ { KC_NO, KC_NO, KC_NO, KM3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
51/* N */ { KC_NO, KC_NO, KN2, KN3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
52/* O */ { KO0, KC_NO, KC_NO, KO3, KO4, KO5, KO6, KO7, }, \
53/* P */ { KC_NO, KC_NO, KP2, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
54/* Q */ { KQ0, KQ1, KQ2, KQ3, KQ4, KQ5, KQ6, KQ7, }, \
55/* R */ { KR0, KC_NO, KR2, KR3, KR4, KR5, KR6, KR7, }, \
56}
57
58/*
59 Matrix col/row mapping (TKL)
60
61 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
62 | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
63 `----' `-------------------' `-------------------' `-------------------' `--------------'
64 ,-------------------------------------------------------------------------. ,--------------.
65 | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 |
66 |-------------------------------------------------------------------------| |--------------|
67 | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 |
68 |-------------------------------------------------------------------------| '--------------'
69 | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 |
70 |-------------------------------------------------------------------------| ,----.
71 | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 |
72 |-------------------------------------------------------------------------| ,--------------.
73 | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 |
74 `-------------------------------------------------------------------------' `--------------'
75*/
76
77#define LAYOUT_tkl( \
78 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
79 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
80 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
81 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
82 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
83 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
84) \
85{ \
86/* 0 1 2 3 4 5 6 7 */ \
87/* A */ { KC_NO, KA1, KC_NO, KC_NO, KA4, KA5, KC_NO, KA7, }, \
88/* B */ { KB0, KB1, KB2, KB3, KB4, KC_NO, KB6, KB7, }, \
89/* C */ { KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC5, KC6, KC7, }, \
90/* D */ { KD0, KD1, KD2, KD3, KD4, KD5, KC_NO, KD7, }, \
91/* E */ { KC_NO, KE1, KE2, KE3, KE4, KE5, KE6, KE7, }, \
92/* F */ { KF0, KF1, KF2, KF3, KF4, KF5, KF6, KF7, }, \
93/* G */ { KG0, KG1, KG2, KG3, KG4, KG5, KG6, KG7, }, \
94/* H */ { KC_NO, KH1, KH2, KH3, KH4, KH5, KH6, KH7, }, \
95/* I */ { KC_NO, KI1, KI2, KI3, KI4, KI5, KI6, KI7, }, \
96/* J */ { KC_NO, KJ1, KJ2, KJ3, KJ4, KJ5, KJ6, KJ7, }, \
97/* K */ { KK0, KC_NO, KC_NO, KC_NO, KK4, KC_NO, KK6, KC_NO, }, \
98/* L */ { KL0, KC_NO, KC_NO, KC_NO, KL4, KC_NO, KC_NO, KC_NO, }, \
99/* M */ { KC_NO, KC_NO, KC_NO, KM3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
100/* N */ { KC_NO, KC_NO, KN2, KN3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
101/* O */ { KO0, KC_NO, KC_NO, KC_NO, KO4, KC_NO, KO6, KO7, }, \
102/* P */ { KC_NO, KC_NO, KP2, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
103/* Q */ { KC_NO, KC_NO, KC_NO, KC_NO, KQ4, KC_NO, KC_NO, KQ7, }, \
104/* R */ { KR0, KC_NO, KR2, KR3, KR4, KR5, KR6, KR7, }, \
105}
106
107#define LAYOUT_tkl_ansi( \
108 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
109 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
110 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
111 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
112 KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
113 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
114) \
115{ \
116/* 0 1 2 3 4 5 6 7 */ \
117/* A */ { KC_NO, KA1, KC_NO, KC_NO, KA4, KA5, KC_NO, KA7, }, \
118/* B */ { KB0, KB1, KB2, KB3, KB4, KC_NO, KB6, KB7, }, \
119/* C */ { KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC5, KC6, KC7, }, \
120/* D */ { KD0, KD1, KD2, KD3, KD4, KD5, KC_NO, KD7, }, \
121/* E */ { KC_NO, KE1, KE2, KE3, KE4, KE5, KE6, KE7, }, \
122/* F */ { KF0, KF1, KF2, KF3, KF4, KF5, KF6, KF7, }, \
123/* G */ { KG0, KG1, KG2, KG3, KG4, KG5, KG6, KG7, }, \
124/* H */ { KC_NO, KH1, KH2, KH3, KH4, KH5, KH6, KH7, }, \
125/* I */ { KC_NO, KI1, KI2, KI3, KI4, KI5, KC_NO, KI7, }, \
126/* J */ { KC_NO, KJ1, KJ2, KJ3, KJ4, KJ5, KJ6, KJ7, }, \
127/* K */ { KK0, KC_NO, KC_NO, KC_NO, KK4, KC_NO, KK6, KC_NO, }, \
128/* L */ { KL0, KC_NO, KC_NO, KC_NO, KL4, KC_NO, KC_NO, KC_NO, }, \
129/* M */ { KC_NO, KC_NO, KC_NO, KM3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
130/* N */ { KC_NO, KC_NO, KN2, KN3, KC_NO, KC_NO, KC_NO, KC_NO, }, \
131/* O */ { KO0, KC_NO, KC_NO, KC_NO, KO4, KC_NO, KO6, KO7, }, \
132/* P */ { KC_NO, KC_NO, KP2, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
133/* Q */ { KC_NO, KC_NO, KC_NO, KC_NO, KQ4, KC_NO, KC_NO, KQ7, }, \
134/* R */ { KR0, KC_NO, KR2, KR3, KR4, KR5, KR6, KR7, }, \
135}
136
diff --git a/keyboards/bpiphany/frosty_flake/info.json b/keyboards/bpiphany/frosty_flake/info.json
new file mode 100644
index 000000000..9d5d6aace
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/info.json
@@ -0,0 +1,299 @@
1{
2 "keyboard_name": "Frosty Flake",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [
8 {"label":"Esc", "x":0, "y":0},
9 {"label":"F1", "x":2, "y":0},
10 {"label":"F2", "x":3, "y":0},
11 {"label":"F3", "x":4, "y":0},
12 {"label":"F4", "x":5, "y":0},
13 {"label":"F5", "x":6.5, "y":0},
14 {"label":"F6", "x":7.5, "y":0},
15 {"label":"F7", "x":8.5, "y":0},
16 {"label":"F8", "x":9.5, "y":0},
17 {"label":"F9", "x":11, "y":0},
18 {"label":"F10", "x":12, "y":0},
19 {"label":"F11", "x":13, "y":0},
20 {"label":"F12", "x":14, "y":0},
21 {"label":"Print Screen", "x":15.25, "y":0},
22 {"label":"Scroll Lock", "x":16.25, "y":0},
23 {"label":"Pause", "x":17.25, "y":0},
24 {"label":"`", "x":0, "y":1.5},
25 {"label":"1", "x":1, "y":1.5},
26 {"label":"2", "x":2, "y":1.5},
27 {"label":"3", "x":3, "y":1.5},
28 {"label":"4", "x":4, "y":1.5},
29 {"label":"5", "x":5, "y":1.5},
30 {"label":"6", "x":6, "y":1.5},
31 {"label":"7", "x":7, "y":1.5},
32 {"label":"8", "x":8, "y":1.5},
33 {"label":"9", "x":9, "y":1.5},
34 {"label":"0", "x":10, "y":1.5},
35 {"label":"-", "x":11, "y":1.5},
36 {"label":"=", "x":12, "y":1.5},
37 {"label":"Backspace", "x":13, "y":1.5, "w":2},
38 {"label":"Insert", "x":15.25, "y":1.5},
39 {"label":"Home", "x":16.25, "y":1.5},
40 {"label":"Page Up", "x":17.25, "y":1.5},
41 {"label":"Num Lock", "x":18.5, "y":1.5},
42 {"label":"/", "x":19.5, "y":1.5},
43 {"label":"*", "x":20.5, "y":1.5},
44 {"label":"-", "x":21.5, "y":1.5},
45 {"label":"Tab", "x":0, "y":2.5, "w":1.5},
46 {"label":"Q", "x":1.5, "y":2.5},
47 {"label":"W", "x":2.5, "y":2.5},
48 {"label":"E", "x":3.5, "y":2.5},
49 {"label":"R", "x":4.5, "y":2.5},
50 {"label":"T", "x":5.5, "y":2.5},
51 {"label":"Y", "x":6.5, "y":2.5},
52 {"label":"U", "x":7.5, "y":2.5},
53 {"label":"I", "x":8.5, "y":2.5},
54 {"label":"O", "x":9.5, "y":2.5},
55 {"label":"P", "x":10.5, "y":2.5},
56 {"label":"[", "x":11.5, "y":2.5},
57 {"label":"]", "x":12.5, "y":2.5},
58 {"label":"\\", "x":13.5, "y":2.5, "w":1.5},
59 {"label":"Delete", "x":15.25, "y":2.5},
60 {"label":"End", "x":16.25, "y":2.5},
61 {"label":"Page Down", "x":17.25, "y":2.5},
62 {"label":"7", "x":18.5, "y":2.5},
63 {"label":"8", "x":19.5, "y":2.5},
64 {"label":"9", "x":20.5, "y":2.5},
65 {"label":"+", "x":21.5, "y":2.5, "h":2},
66 {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
67 {"label":"A", "x":1.75, "y":3.5},
68 {"label":"S", "x":2.75, "y":3.5},
69 {"label":"D", "x":3.75, "y":3.5},
70 {"label":"F", "x":4.75, "y":3.5},
71 {"label":"G", "x":5.75, "y":3.5},
72 {"label":"H", "x":6.75, "y":3.5},
73 {"label":"J", "x":7.75, "y":3.5},
74 {"label":"K", "x":8.75, "y":3.5},
75 {"label":"L", "x":9.75, "y":3.5},
76 {"label":";", "x":10.75, "y":3.5},
77 {"label":"'", "x":11.75, "y":3.5},
78 {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
79 {"label":"4", "x":18.5, "y":3.5},
80 {"label":"5", "x":19.5, "y":3.5},
81 {"label":"6", "x":20.5, "y":3.5},
82 {"label":"Shift", "x":0, "y":4.5, "w":1.25},
83 {"label":"ISO \\", "x":1.25, "y":4.5},
84 {"label":"Z", "x":2.25, "y":4.5},
85 {"label":"X", "x":3.25, "y":4.5},
86 {"label":"C", "x":4.25, "y":4.5},
87 {"label":"V", "x":5.25, "y":4.5},
88 {"label":"B", "x":6.25, "y":4.5},
89 {"label":"N", "x":7.25, "y":4.5},
90 {"label":"M", "x":8.25, "y":4.5},
91 {"label":",", "x":9.25, "y":4.5},
92 {"label":".", "x":10.25, "y":4.5},
93 {"label":"/", "x":11.25, "y":4.5},
94 {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
95 {"label":"Up", "x":16.25, "y":4.5},
96 {"label":"1", "x":18.5, "y":4.5},
97 {"label":"2", "x":19.5, "y":4.5},
98 {"label":"3", "x":20.5, "y":4.5},
99 {"label":"Enter", "x":21.5, "y":4.5, "h":2},
100 {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
101 {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
102 {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
103 {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
104 {"label":"Alt", "x":10, "y":5.5, "w":1.25},
105 {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
106 {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
107 {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
108 {"label":"Left", "x":15.25, "y":5.5},
109 {"label":"Down", "x":16.25, "y":5.5},
110 {"label":"Right", "x":17.25, "y":5.5},
111 {"label":"0", "x":18.5, "y":5.5, "w":2},
112 {"label":".", "x":20.5, "y":5.5}
113 ]
114 },
115 "LAYOUT_tkl": {
116 "layout": [
117 {"label":"Esc", "x":0, "y":0},
118 {"label":"F1", "x":2, "y":0},
119 {"label":"F2", "x":3, "y":0},
120 {"label":"F3", "x":4, "y":0},
121 {"label":"F4", "x":5, "y":0},
122 {"label":"F5", "x":6.5, "y":0},
123 {"label":"F6", "x":7.5, "y":0},
124 {"label":"F7", "x":8.5, "y":0},
125 {"label":"F8", "x":9.5, "y":0},
126 {"label":"F9", "x":11, "y":0},
127 {"label":"F10", "x":12, "y":0},
128 {"label":"F11", "x":13, "y":0},
129 {"label":"F12", "x":14, "y":0},
130 {"label":"Print Screen", "x":15.25, "y":0},
131 {"label":"Scroll Lock", "x":16.25, "y":0},
132 {"label":"Pause", "x":17.25, "y":0},
133 {"label":"`", "x":0, "y":1.5},
134 {"label":"1", "x":1, "y":1.5},
135 {"label":"2", "x":2, "y":1.5},
136 {"label":"3", "x":3, "y":1.5},
137 {"label":"4", "x":4, "y":1.5},
138 {"label":"5", "x":5, "y":1.5},
139 {"label":"6", "x":6, "y":1.5},
140 {"label":"7", "x":7, "y":1.5},
141 {"label":"8", "x":8, "y":1.5},
142 {"label":"9", "x":9, "y":1.5},
143 {"label":"0", "x":10, "y":1.5},
144 {"label":"-", "x":11, "y":1.5},
145 {"label":"=", "x":12, "y":1.5},
146 {"label":"Backspace", "x":13, "y":1.5, "w":2},
147 {"label":"Insert", "x":15.25, "y":1.5},
148 {"label":"Home", "x":16.25, "y":1.5},
149 {"label":"Page Up", "x":17.25, "y":1.5},
150 {"label":"Tab", "x":0, "y":2.5, "w":1.5},
151 {"label":"Q", "x":1.5, "y":2.5},
152 {"label":"W", "x":2.5, "y":2.5},
153 {"label":"E", "x":3.5, "y":2.5},
154 {"label":"R", "x":4.5, "y":2.5},
155 {"label":"T", "x":5.5, "y":2.5},
156 {"label":"Y", "x":6.5, "y":2.5},
157 {"label":"U", "x":7.5, "y":2.5},
158 {"label":"I", "x":8.5, "y":2.5},
159 {"label":"O", "x":9.5, "y":2.5},
160 {"label":"P", "x":10.5, "y":2.5},
161 {"label":"[", "x":11.5, "y":2.5},
162 {"label":"]", "x":12.5, "y":2.5},
163 {"label":"\\", "x":13.5, "y":2.5, "w":1.5},
164 {"label":"Delete", "x":15.25, "y":2.5},
165 {"label":"End", "x":16.25, "y":2.5},
166 {"label":"Page Down", "x":17.25, "y":2.5},
167 {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
168 {"label":"A", "x":1.75, "y":3.5},
169 {"label":"S", "x":2.75, "y":3.5},
170 {"label":"D", "x":3.75, "y":3.5},
171 {"label":"F", "x":4.75, "y":3.5},
172 {"label":"G", "x":5.75, "y":3.5},
173 {"label":"H", "x":6.75, "y":3.5},
174 {"label":"J", "x":7.75, "y":3.5},
175 {"label":"K", "x":8.75, "y":3.5},
176 {"label":"L", "x":9.75, "y":3.5},
177 {"label":";", "x":10.75, "y":3.5},
178 {"label":"'", "x":11.75, "y":3.5},
179 {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
180 {"label":"Shift", "x":0, "y":4.5, "w":1.25},
181 {"label":"ISO \\", "x":1.25, "y":4.5},
182 {"label":"Z", "x":2.25, "y":4.5},
183 {"label":"X", "x":3.25, "y":4.5},
184 {"label":"C", "x":4.25, "y":4.5},
185 {"label":"V", "x":5.25, "y":4.5},
186 {"label":"B", "x":6.25, "y":4.5},
187 {"label":"N", "x":7.25, "y":4.5},
188 {"label":"M", "x":8.25, "y":4.5},
189 {"label":",", "x":9.25, "y":4.5},
190 {"label":".", "x":10.25, "y":4.5},
191 {"label":"/", "x":11.25, "y":4.5},
192 {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
193 {"label":"Up", "x":16.25, "y":4.5},
194 {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
195 {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
196 {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
197 {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
198 {"label":"Alt", "x":10, "y":5.5, "w":1.25},
199 {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
200 {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
201 {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
202 {"label":"Left", "x":15.25, "y":5.5},
203 {"label":"Down", "x":16.25, "y":5.5},
204 {"label":"Right", "x":17.25, "y":5.5}
205 ]
206 },
207 "LAYOUT_tkl_ansi": {
208 "layout": [
209 {"label":"Esc", "x":0, "y":0},
210 {"label":"F1", "x":2, "y":0},
211 {"label":"F2", "x":3, "y":0},
212 {"label":"F3", "x":4, "y":0},
213 {"label":"F4", "x":5, "y":0},
214 {"label":"F5", "x":6.5, "y":0},
215 {"label":"F6", "x":7.5, "y":0},
216 {"label":"F7", "x":8.5, "y":0},
217 {"label":"F8", "x":9.5, "y":0},
218 {"label":"F9", "x":11, "y":0},
219 {"label":"F10", "x":12, "y":0},
220 {"label":"F11", "x":13, "y":0},
221 {"label":"F12", "x":14, "y":0},
222 {"label":"Print Screen", "x":15.25, "y":0},
223 {"label":"Scroll Lock", "x":16.25, "y":0},
224 {"label":"Pause", "x":17.25, "y":0},
225 {"label":"`", "x":0, "y":1.5},
226 {"label":"1", "x":1, "y":1.5},
227 {"label":"2", "x":2, "y":1.5},
228 {"label":"3", "x":3, "y":1.5},
229 {"label":"4", "x":4, "y":1.5},
230 {"label":"5", "x":5, "y":1.5},
231 {"label":"6", "x":6, "y":1.5},
232 {"label":"7", "x":7, "y":1.5},
233 {"label":"8", "x":8, "y":1.5},
234 {"label":"9", "x":9, "y":1.5},
235 {"label":"0", "x":10, "y":1.5},
236 {"label":"-", "x":11, "y":1.5},
237 {"label":"=", "x":12, "y":1.5},
238 {"label":"Backspace", "x":13, "y":1.5, "w":2},
239 {"label":"Insert", "x":15.25, "y":1.5},
240 {"label":"Home", "x":16.25, "y":1.5},
241 {"label":"Page Up", "x":17.25, "y":1.5},
242 {"label":"Tab", "x":0, "y":2.5, "w":1.5},
243 {"label":"Q", "x":1.5, "y":2.5},
244 {"label":"W", "x":2.5, "y":2.5},
245 {"label":"E", "x":3.5, "y":2.5},
246 {"label":"R", "x":4.5, "y":2.5},
247 {"label":"T", "x":5.5, "y":2.5},
248 {"label":"Y", "x":6.5, "y":2.5},
249 {"label":"U", "x":7.5, "y":2.5},
250 {"label":"I", "x":8.5, "y":2.5},
251 {"label":"O", "x":9.5, "y":2.5},
252 {"label":"P", "x":10.5, "y":2.5},
253 {"label":"[", "x":11.5, "y":2.5},
254 {"label":"]", "x":12.5, "y":2.5},
255 {"label":"\\", "x":13.5, "y":2.5, "w":1.5},
256 {"label":"Delete", "x":15.25, "y":2.5},
257 {"label":"End", "x":16.25, "y":2.5},
258 {"label":"Page Down", "x":17.25, "y":2.5},
259 {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
260 {"label":"A", "x":1.75, "y":3.5},
261 {"label":"S", "x":2.75, "y":3.5},
262 {"label":"D", "x":3.75, "y":3.5},
263 {"label":"F", "x":4.75, "y":3.5},
264 {"label":"G", "x":5.75, "y":3.5},
265 {"label":"H", "x":6.75, "y":3.5},
266 {"label":"J", "x":7.75, "y":3.5},
267 {"label":"K", "x":8.75, "y":3.5},
268 {"label":"L", "x":9.75, "y":3.5},
269 {"label":";", "x":10.75, "y":3.5},
270 {"label":"'", "x":11.75, "y":3.5},
271 {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
272 {"label":"Shift", "x":0, "y":4.5, "w":2.25},
273 {"label":"Z", "x":2.25, "y":4.5},
274 {"label":"X", "x":3.25, "y":4.5},
275 {"label":"C", "x":4.25, "y":4.5},
276 {"label":"V", "x":5.25, "y":4.5},
277 {"label":"B", "x":6.25, "y":4.5},
278 {"label":"N", "x":7.25, "y":4.5},
279 {"label":"M", "x":8.25, "y":4.5},
280 {"label":",", "x":9.25, "y":4.5},
281 {"label":".", "x":10.25, "y":4.5},
282 {"label":"/", "x":11.25, "y":4.5},
283 {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
284 {"label":"Up", "x":16.25, "y":4.5},
285 {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
286 {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
287 {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
288 {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
289 {"label":"Alt", "x":10, "y":5.5, "w":1.25},
290 {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
291 {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
292 {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
293 {"label":"Left", "x":15.25, "y":5.5},
294 {"label":"Down", "x":16.25, "y":5.5},
295 {"label":"Right", "x":17.25, "y":5.5}
296 ]
297 }
298 }
299}
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h
new file mode 100644
index 000000000..017ead425
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h
@@ -0,0 +1,4 @@
1#pragma once
2
3// place overrides here
4#define TAPPING_TERM 150 //reduce time required to register a held key
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c
new file mode 100644
index 000000000..20ce6bd15
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c
@@ -0,0 +1,117 @@
1#include QMK_KEYBOARD_H
2
3enum QFR_layers {
4 _COLEMAK,
5 _QWERTY,
6 _DVORAK,
7 _LOWER,
8 _MOUSE
9};
10
11enum QFR_keycodes {
12 COLEMAK = SAFE_RANGE,
13 QWERTY,
14 DVORAK,
15 LOWER,
16 MOUSE
17};
18
19enum custom_macros {
20 R_PIPE,
21 R_POINT
22};
23
24#define SPC_LW LT(_LOWER, KC_SPC)
25#define MSE MO(_MOUSE)
26#define PIPE M(R_PIPE)
27#define POINT M(R_POINT)
28
29const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30[_COLEMAK] = LAYOUT_tkl(\
31 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
32 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
33 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
34 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT , \
35 KC_LSPO,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, \
36 KC_LCTL,KC_LGUI, KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
37 ),
38
39[_QWERTY] = LAYOUT_tkl(\
40 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
41 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
42 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
43 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
44 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
45 KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI , KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
46 ),
47
48[_DVORAK] = LAYOUT_tkl(\
49 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
50 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
51 KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
52 KC_BSPC,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT, KC_ENT, \
53 KC_LSFT,KC_NUBS,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
54 KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
55 ),
56
57[_LOWER] = LAYOUT_tkl(\
58 RESET, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, _______, KC_MUTE, KC_VOLD, KC_VOLU, QWERTY, COLEMAK,DVORAK, \
59 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_BSPC, _______,_______,_______, \
60 KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, _______,_______,_______, \
61 KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, \
62 _______,XXXXXXX,POINT,PIPE, KC_LCBR, KC_LBRC, KC_GRV, KC_PIPE, KC_RBRC, KC_RCBR, _______, _______, _______, _______, \
63 _______, _______, _______, _______, KC_RALT, _______, _______, _______, _______,_______,_______ \
64 ),
65
66[_MOUSE] = LAYOUT_tkl(\
67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, \
68 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_DEL, _______,_______,_______, \
69 KC_TAB, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,_______,_______, \
70 KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
71 _______,XXXXXXX,PIPE,POINT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, \
72 _______, _______, _______, KC_ACL2, MSE, _______, _______, _______, _______,_______,_______ \
73 )
74};
75
76// Macros to send R pointer & dplyr pipe
77const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
78 switch(id) {
79 case R_POINT:
80 if (record->event.pressed) { // pointer
81 SEND_STRING("<- ");
82// return MACRO(D(LSFT), T(COMM), U(LSFT), T(MINS), END);
83 }
84 break;
85 case R_PIPE:
86 if (record->event.pressed) { // dplyr pipe
87 SEND_STRING("%>% ");
88// return MACRO(D(LSFT), T(5), T(DOT), T(5), U(LSFT), END);
89 }
90 break;
91 }
92 return MACRO_NONE;
93}
94
95bool process_record_user(uint16_t keycode, keyrecord_t *record) {
96 switch (keycode) {
97 case QWERTY:
98 if (record->event.pressed) {
99 set_single_persistent_default_layer(_QWERTY);
100 }
101 return false;
102 break;
103 case COLEMAK:
104 if (record->event.pressed) {
105 set_single_persistent_default_layer(_COLEMAK);
106 }
107 return false;
108 break;
109 case DVORAK:
110 if (record->event.pressed) {
111 set_single_persistent_default_layer(_DVORAK);
112 }
113 return false;
114 break;
115 }
116 return true;
117}
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md
new file mode 100644
index 000000000..f12a0ffba
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md
@@ -0,0 +1,86 @@
1
2# TKL keymap for frosty\_flake
3```
4make frosty_flake:QFR_JM
5
6dfu-programmer atmega32u2 erase
7dfu-programmer atmega32u2 flash frosty_flake_QFR_JM.hex
8dfu-programmer atmega32u2 start
9```
10
11##Layers
12```
13 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
14 |ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 |F10 |F11 |F12 | |PrSc|ScLk|PsBk|
15 '----' '-------------------' '-------------------' '-------------------' '--------------'
16 ,-------------------------------------------------------------------------. ,--------------.
17 | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bspc | | Ins|Home|PgUp|
18 |-------------------------------------------------------------------------| |--------------|
19 | Tab | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | | Del|End |PgDn|
20 |-------------------------------------------------------------------------| '--------------'
21 | Bspc | A | R | S | T | D | H | N | E | I | O | ' | Enter |
22 |-------------------------------------------------------------------------| ,----.
23 | LSPO | Z | X | C | V | B | K | M | , | . | / | RSPC | | Up |
24 |-------------------------------------------------------------------------| ,--------------.
25 |Ctrl|LGUI|LAlt| Space/Lower |MSE |RGUI|Menu|Ctrl| |Left|Down|Rght|
26 '-------------------------------------------------------------------------' '--------------'
27
28```
29### Base Layer - Colemak
30The base layout is Colemak by default, but this can be changed to QWERTY via the *LOWER* layer.
31* I've implemented COLEMAK = SAFE\_RANGE when enumerating the custom\_keycodes, but I don't actually know what this does...
32
33* Space cadet is implemented in the shift keys (hold for shift, tap for respective parentheses)
34
35#### Layer Shifting
36* The spacebar is a **TAP_KEY** macro - Hold for momentary *LOWER* layer, Tap for Space.
37* The Right hand ALT key is a **TAP_TOGGLE** macro for the *MOUSE* layer (RAlt is accessible through LOWER, if you want...)
38
39### LOWER
40```
41 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
42 |ESC | | F1 | F2 | F3 | F4 | |>/|||Stop| << | >> | | F9 |MUTE|Vol-|Vol+| |QWTY|CLMK|PsBk|
43 '----' '-------------------' '-------------------' '-------------------' '--------------'
44 ,-------------------------------------------------------------------------. ,--------------.
45 | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | Bspc | | Ins|Home|PgUp|
46 |-------------------------------------------------------------------------| |--------------|
47 | Tab |PgUp|Home| Up | End| | | | | | | { | } | | | | Del|End |PgDn|
48 |-------------------------------------------------------------------------| '--------------'
49 | Bckspc|PgDn|Left|Down|Rght| | | | | | | ' | Enter |
50 |-------------------------------------------------------------------------| ,----.
51 | LSPO | <- |%>% | { | [ | ` | | | ] | } | . | / | RSPC | | Up |
52 |-------------------------------------------------------------------------| ,--------------.
53 |Ctrl|LGUI|LAlt| |RAlt|RGUI|Menu|Ctrl| |Left|Down|Rght|
54 '-------------------------------------------------------------------------' '--------------'
55```
56The *LOWER* layer contains a navigation cluster on the left hand. This layer is momentary when the spacebar or LOWER (RAlt) key is held and toggled on/off when the LOWER key is tapped.
57
58* The Navigation cluster is offset to the right compared to the traditional **WASD** nav cluster. With this implementation, you don't need to move your hand from the home position when navigating. Page Up & Down keys are found on the far left of the cluster.
59
60* All unused (blank on the above keymap) keys are locked out using the XXXXXXX filler (KC\_NO), all modifiers (edge |\_| keys \[except 0, \. & Fn\] on the above keymap) and the ZXCV cluster are transparent (\_\_\_\_\_\_\_) to the Base layer.
61
62* The base layer can be switched to QWERTY or COLEMAK by pressing the Pause Break or Scroll Lock keys respectively
63
64### MOUSE
65```
66 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
67 |ESC | | F1 | F2 | F3 | F4 | | F5 | F6 | F7 | F8 | | F9 |F10 |F11 |F12 | |PrSc|ScLk|PsBk|
68 '----' '-------------------' '-------------------' '-------------------' '--------------'
69 ,-------------------------------------------------------------------------. ,--------------.
70 | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Del | | Ins|Home|PgUp|
71 |-------------------------------------------------------------------------| |--------------|
72 | Tab | WhU| WhL| MsU| WhR| | | M3 | M4 | M5 | | [ | ] | \ | | Del|End |PgDn|
73 |-------------------------------------------------------------------------| '--------------'
74 | BSPC | WhD| MsL| MsD| MsR| | |LClk |RClk | | | ' | Enter |
75 |-------------------------------------------------------------------------| ,----.
76 | LSPO | Z | X | C | V | | | | , | . | / | RSPC | | Up |
77 |-------------------------------------------------------------------------| ,--------------.
78 |Ctrl|LGUI|LAlt| Accel ++ |MSE |RGUI|Menu|Ctrl| |Left|Down|Rght|
79 '-------------------------------------------------------------------------' '--------------'
80```
81The *MOUSE* layer contains keys replicating functions found on the mouse.
82
83* The navigation cluster (Up, Down, Left, Right) is a replication of the Navigation cluster on the *LOWER* layer. The scroll keys are analagous to the Page Up & Downkeys.
84* The primary click (right & left) buttons are on the right home row (index & middle fingers)
85* Secondary click buttons are above the standard keys (M3/Wheel click, M4, M5) but I do not use this function.
86
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk
new file mode 100644
index 000000000..2c5d53c82
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk
@@ -0,0 +1,17 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = yes # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c
new file mode 100644
index 000000000..be1ca9ade
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c
@@ -0,0 +1,12 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = LAYOUT(
5 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
6 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
7 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
8 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
9 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
10 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
11 )
12};
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md
new file mode 100644
index 000000000..11bf4825f
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for frosty_flake
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk
new file mode 100644
index 000000000..5d0499309
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
1BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
2MOUSEKEY_ENABLE = yes # Mouse keys
3EXTRAKEY_ENABLE = yes # Audio control and System control
4CONSOLE_ENABLE = no # Console for debug
5COMMAND_ENABLE = yes # Commands for debug and configuration
6NKRO_ENABLE = yes
7BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
8AUDIO_ENABLE = no # Audio output
9RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h
new file mode 100644
index 000000000..4bc6d2c3c
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h
@@ -0,0 +1,18 @@
1#pragma once
2
3// place overrides here
4#define TAPPING_TERM 200
5#define LEADER_TIMEOUT 800
6
7#define DISABLE_SPACE_CADET_ROLLOVER
8
9#define UNICODE_TYPE_DELAY 0
10
11#define LSPO_KEY KC_9
12#define RSPC_KEY KC_0
13
14#define MOUSEKEY_INTERVAL 20
15#define MOUSEKEY_DELAY 0
16#define MOUSEKEY_TIME_TO_MAX 60
17#define MOUSEKEY_MAX_SPEED 7
18#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c
new file mode 100644
index 000000000..dd2098d94
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c
@@ -0,0 +1,225 @@
1#include QMK_KEYBOARD_H
2
3#define MAXEMOJITAPS 80
4
5
6//declarations for tap dancing emojis
7void register_hex32(uint32_t hex);
8void cycleEmojis(qk_tap_dance_state_t *state, void *user_data);
9void cycleAnimals(qk_tap_dance_state_t *state, void *user_data);
10void cycleFoods(qk_tap_dance_state_t *state, void *user_data);
11void cycleEtc(qk_tap_dance_state_t *state, void *user_data);
12void cycleAll(qk_tap_dance_state_t *state, void *user_data);
13
14void tap(uint16_t keycode){
15 register_code(keycode);
16 unregister_code(keycode);
17};
18
19//Tap Dance Declarations
20enum taps{
21 TD_CTCPS = 0,
22 EMOJIS,
23 ANIMAL,
24 HAND,
25 MEMES,
26 COPA,
27 ALLS
28};
29
30enum unicode_name {
31 EMOTIS = 1,//80, //1F60x - 1F64x
32 ANIMALS, //64, //1F40x - 1F43x
33 SYMBOLS,// = 45, //1F300 - 1F32C
34 FOODS,// = 87 , //1F32D -
35 ETC,// = 192, //1F44x -1F4Fx
36 VEHICLES,// = 83, //1F68x - 1F6Dx
37 SUPPLEMENT,// = 32, //1F91x-1F92x
38 ALCHEMY,// = 116 //1F70x - 1F773
39
40};
41
42enum my_macros {
43 NEWDESK = 0,
44 LEFTDESK,
45 RIGHTDESK,
46 CLOSEDESK
47};
48
49
50// Tap Dance Definitions
51qk_tap_dance_action_t tap_dance_actions[] = {
52 // Tap once for CTRL, twice for Caps Lock
53 [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS),
54 [COPA] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)),
55 [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEmojis, NULL, NULL, 800),
56 [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAnimals, NULL, NULL, 800),
57 //[SYMBOLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSymbols, NULL, NULL, 800),
58 [FOODS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleFoods, NULL, NULL, 800),
59 [ETC] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEtc, NULL, NULL, 800),
60 //[VEHICLES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleVehicles, NULL, NULL, 800),
61 //[SUPPLEMENT] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSupplement, NULL, NULL, 800),
62 [ALLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAll, NULL, NULL, 800)
63// Other declarations would go here, separated by commas, if you have them
64};
65
66// macros
67const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
68 switch(id) {
69 case NEWDESK: // this would trigger when you hit a key mapped as M(0)
70 if (record->event.pressed) {
71 return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP
72 }
73 break;
74 case LEFTDESK: // this would trigger when you hit a key mapped as M(0)
75 if (record->event.pressed) {
76 return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP
77 }
78 break;
79 case RIGHTDESK: // this would trigger when you hit a key mapped as M(0)
80 if (record->event.pressed) {
81 return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP
82 }
83 break;
84 case CLOSEDESK: // this would trigger when you hit a key mapped as M(0)
85 if (record->event.pressed) {
86 return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP
87 }
88 break;
89 }
90 return MACRO_NONE;
91};
92
93
94// emojis in unicode
95const uint32_t PROGMEM unicode_map[] = {
96 [EMOTIS] = 0x1F600,
97 [ANIMALS] = 0x1F400,
98 [SYMBOLS] = 0x1F300,
99 [FOODS] = 0x1F32D,
100 [ETC] = 0x1F440,
101 [VEHICLES] = 0x1F680,
102 [SUPPLEMENT] = 0x1F910,
103 [ALCHEMY] = 0x1F700
104 };
105// Layouts
106const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
107 [0] = LAYOUT(\
108 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
109 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
110 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, \
111 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
112 KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
113 TD(TD_CTCPS), KC_LGUI, KC_LALT, KC_SPC, KC_LEAD, KC_RGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
114 ),
115 [1] = LAYOUT(\
116 TD(ALLS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
117 KC_GRV, TD(EMOJIS), TD(ANIMAL), TD(ETC), TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
118 KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
119 KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_LEFT, KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
120 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
121 KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
122 ),
123 [2] = LAYOUT(\
124 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
125 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_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
126 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
127 KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
128 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
129 KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
130 ),
131};
132
133LEADER_EXTERNS();
134
135void matrix_scan_user(void) {
136 LEADER_DICTIONARY() {
137 leading = false;
138 leader_end();
139
140 SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy
141 register_code(KC_LCTL);
142 tap(KC_A);
143 tap(KC_C);
144 unregister_code(KC_LCTL);
145 }
146 }
147}
148
149void matrix_init_user(void) {
150 _delay_ms(500);
151 set_unicode_input_mode(UC_WINC);
152};
153
154void cycleAll(qk_tap_dance_state_t *state, void *user_data) {
155 if(state->count == 1) {
156 unicode_input_start();
157 register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
158 unicode_input_finish();
159 }
160 else if(state->count <= 1642) {
161 tap(KC_BSPC);
162 unicode_input_start();
163 register_hex32(pgm_read_dword(&unicode_map[1])+state->count);
164 unicode_input_finish();
165 }
166};
167
168
169void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
170 if(state->count == 1) {
171 unicode_input_start();
172 register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
173 unicode_input_finish();
174 }
175 else if(state->count <= 80) {
176 tap(KC_BSPC);
177 unicode_input_start();
178 register_hex32(pgm_read_dword(&unicode_map[EMOTIS])+state->count);
179 unicode_input_finish();
180 }
181};
182
183void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
184 if(state->count == 1) {
185 unicode_input_start();
186 register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
187 unicode_input_finish();
188 }
189 else if(state->count <= MAXEMOJITAPS) {
190 tap(KC_BSPC);
191 unicode_input_start();
192 register_hex32(pgm_read_dword(&unicode_map[ANIMALS])+state->count);
193 unicode_input_finish();
194 }
195};
196
197void cycleFoods(qk_tap_dance_state_t *state, void *user_data) {
198 if(state->count == 1) {
199 unicode_input_start();
200 register_hex32(pgm_read_dword(&unicode_map[FOODS]));
201 unicode_input_finish();
202 }
203 else if(state->count <= 87) {
204 tap(KC_BSPC);
205 unicode_input_start();
206 register_hex32(pgm_read_dword(&unicode_map[FOODS])+state->count);
207 unicode_input_finish();
208 }
209};
210
211
212void cycleEtc(qk_tap_dance_state_t *state, void *user_data) {
213 if(state->count == 1) {
214 unicode_input_start();
215 register_hex32(pgm_read_dword(&unicode_map[ETC]));
216 unicode_input_finish();
217 }
218 else if(state->count <= MAXEMOJITAPS) {
219 tap(KC_BSPC);
220 unicode_input_start();
221 register_hex32(pgm_read_dword(&unicode_map[ETC])+state->count);
222 unicode_input_finish();
223 }
224};
225
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md
new file mode 100644
index 000000000..0b01f9dbf
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md
@@ -0,0 +1,24 @@
1# The Nikchi's keymap for frosty_flake
2
3### FEATURING
4-SPACE CADET
5-Caps Lock is now LCTRL
6-LCTRL is Tap(LCTRL, Caps Lock)
7
8### LEADER KEY - RALT
9COMBOS
10-a,a => Select All, Copy
11
12
13
14### FN REBINDS for Windows
15```
16 [W] [New Desktop]
17[A][S][D] [Left Desk][Delete Desk][Right Desk]
18
19[Ins][Hom][PUp] [RW][PP][FF]
20[Del][End][PDn] [MU][VD][VU]
21
22Arrows are Mouskeys, left three mods are clicks
23
24``` \ No newline at end of file
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk
new file mode 100644
index 000000000..c2682fb1b
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk
@@ -0,0 +1,20 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = no # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15UNICODEMAP_ENABLE = yes # unicodemap
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
18SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
19TAP_DANCE_ENABLE = yes
20LEADER_ENABLE = yes
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md
new file mode 100644
index 000000000..b2e504139
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md
@@ -0,0 +1,9 @@
1# Tap Dancing to different beats.
2Tap Dance is constrained normally by `TAPPING_TERM` defined in your keyboard's config.h This proves to be challenging to work with when sometimes you just need more time to tap out your dance, or even a different "beat".
3
4
5
6- `ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term)` : This works the same as `ACTION_TAP_DANCE_FN_ADVANCED` just with the extra `tap_specific_tapping_term` arguement at the end. This way you can set a specific tap dance to have a longer or shorter tap in between your taps, giving you more, or less, time in between each tap.
7
8
9`tap_specific_tapping_term` should be the same type and range of values that one would put into the `TAPPING_TERM` definition in the config.h file.
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c
new file mode 100644
index 000000000..c5d232cce
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c
@@ -0,0 +1,11 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = LAYOUT_tkl(
5 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
6 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
7 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
8 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
9 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
10 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
11};
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md
new file mode 100644
index 000000000..a076a65de
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md
@@ -0,0 +1 @@
# TKL keymap for frosty_flake
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk
new file mode 100644
index 000000000..c9a6f1f1b
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk
@@ -0,0 +1,10 @@
1BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
2MOUSEKEY_ENABLE = no # Mouse keys(+4700)
3EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
4CONSOLE_ENABLE = yes # Console for debug(+400)
5COMMAND_ENABLE = yes # Commands for debug and configuration
6NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
7BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
8AUDIO_ENABLE = no # Audio output
9BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
10RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/via/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/via/keymap.c
new file mode 100644
index 000000000..b3ef6ecad
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
1 /* Copyright 2021 Chance Monnette <[email protected]>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19[0] = LAYOUT_tkl(
20 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
21 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
23 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
24 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
25 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ),
26
27[1] = LAYOUT_tkl(
28 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______,
32 _______,_______,_______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, _______,
33 _______,_______,_______, _______, _______, _______ , _______, _______, _______, _______, _______
34 ),
35
36[2] = LAYOUT_tkl(
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
40 _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______,
41 _______,_______,_______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, _______,
42 _______,_______,_______, _______, _______, _______ , _______, _______, _______, _______, _______
43 ),
44};
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/via/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/bpiphany/frosty_flake/readme.md b/keyboards/bpiphany/frosty_flake/readme.md
new file mode 100644
index 000000000..7c6408518
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/readme.md
@@ -0,0 +1,47 @@
1# Frosty Flake Controller
2
3This is the firmware for the Frosty Flake controller by
4[Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/),
5a replacement controller for the [Cooler Master Quick Fire
6Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
7
8The code was adapted from the [BathroomEpiphanies TMK
9Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers),
10but has been cleaned up to match the
11[schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf)
12and gone through some minor refactoring for QMK.
13
14## Revision support
15There are two revisions of this controller. 20140521 is built by default.
16If you need to build for 20130602, it can be built with `make bpiphany/frosty_flake/20130602`
17
18## 104 and 87 layout support
19
20Support for both 104 key and 87 key layouts is provided. See the
21keymaps `default` (104) and `tkl` (87) for example layouts.
22
23Keyboard Maintainer: QMK Community
24Hardware Supported: Frosty Flake
25Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/qfr-frosty-flake-controller/)
26
27Make example for this keyboard (after setting up your build environment):
28
29104 key default layout:
30
31```
32make bpiphany/frosty_flake:default
33```
34
35To directly flash the frosty_flake after compiling use:
36
37```
38make bpiphany/frosty_flake:default:dfu
39```
40
4187 key tkl layout:
42
43```
44make bpiphany/frosty_flake:tkl:dfu
45```
46
47See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bpiphany/frosty_flake/rules.mk b/keyboards/bpiphany/frosty_flake/rules.mk
new file mode 100644
index 000000000..e5402b32f
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/rules.mk
@@ -0,0 +1 @@
DEFAULT_FOLDER=bpiphany/frosty_flake/20140521
diff --git a/keyboards/bpiphany/ghost_squid/config.h b/keyboards/bpiphany/ghost_squid/config.h
new file mode 100644
index 000000000..bb8535b17
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/config.h
@@ -0,0 +1,42 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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 0xFEED
24#define PRODUCT_ID 0x6050
25#define DEVICE_VER 0x0104
26#define MANUFACTURER Bathroom Epiphanies
27#define PRODUCT ghost_squid
28
29/* key matrix size */
30#define MATRIX_ROWS 8
31#define MATRIX_COLS 18
32
33/* COL2ROW or ROW2COL */
34#define DIODE_DIRECTION COL2ROW
35
36#define LED_PIN_ON_STATE 0
37#define LED_NUM_LOCK_PIN C5
38#define LED_CAPS_LOCK_PIN C6
39#define LED_SCROLL_LOCK_PIN B7
40
41/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
42#define DEBOUNCE 5
diff --git a/keyboards/bpiphany/ghost_squid/ghost_squid.c b/keyboards/bpiphany/ghost_squid/ghost_squid.c
new file mode 100644
index 000000000..3ecac66f7
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/ghost_squid.c
@@ -0,0 +1,26 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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#include "ghost_squid.h"
19
20void keyboard_pre_init_kb(void) {
21 setPinOutput(D0);
22 writePinLow(D0);
23 fn_led_off();
24
25 keyboard_pre_init_user();
26}
diff --git a/keyboards/bpiphany/ghost_squid/ghost_squid.h b/keyboards/bpiphany/ghost_squid/ghost_squid.h
new file mode 100644
index 000000000..839c9fc12
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/ghost_squid.h
@@ -0,0 +1,44 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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 "quantum.h"
21
22#define fn_led_on() writePinLow(D0)
23#define fn_led_off() writePinHigh(D0)
24
25#define ___ KC_NO
26
27#define LAYOUT( \
28 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
29 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
30 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
31 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
32 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
33 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
34 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
35 /* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , KQ0 , KR0 }, \
36 /* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , ___ , ___ , ___ , ___ , KQ1 , ___ }, \
37 /* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , ___ , KN2 , ___ , KP2 , KQ2 , KR2 }, \
38 /* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KN3 , KO3 , ___ , KQ3 , KR3 }, \
39 /* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
40 /* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , ___ , ___ , KO5 , ___ , KQ5 , KR5 }, \
41 /* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , ___ , KO6 , ___ , KQ6 , KR6 }, \
42 /* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
43 }
44
diff --git a/keyboards/bpiphany/ghost_squid/keymaps/default/keymap.c b/keyboards/bpiphany/ghost_squid/keymaps/default/keymap.c
new file mode 100644
index 000000000..09523ebbb
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/keymaps/default/keymap.c
@@ -0,0 +1,77 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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#include QMK_KEYBOARD_H
19
20/* Default qwerty layout
21* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───────────┐
22* │ESC│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PRT│SCR│PAU│ │Ghost Squid│
23* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └───────────┘
24* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
25* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │INS│HOM│PgU│ │NUM│ / │ * │ - │
26* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
27* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │DEL│END│PgD│ │ 7 │ 8 │ 9 │ │
28* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ↲ │ └───┴───┴───┘ ├───┼───┼───┤ + │
29* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │ │ 7 │ 8 │ 9 │ │
30* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐ ├───┼───┼───┼───┤
31* │Shif│ # │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
32* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ ↲ │
33* │Ctrl│GUI │Alt │ │ Alt│ GUI│Fn │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ , │ │
34* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
35*/
36
37enum layer_names {
38 KM_QWERTY,
39 KM_MEDIA,
40 KM_GUI_LOCK
41};
42
43const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
44 /* Layer 0: Standard ISO layer */
45 [KM_QWERTY] = LAYOUT(
46KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS,
47KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
48KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
49KC_CLCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
50KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
51KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,MO(KM_MEDIA),KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT),
52 /* Layer 1: Function layer */
53 [KM_MEDIA] = LAYOUT(
54_______,_______,_______,_______,_______, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_STOP, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, TG(KM_GUI_LOCK),KC_MUTE, KC_VOLD, KC_VOLU,_______,_______, RESET,
55_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
56_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
57_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
58_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
59_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______),
60 [KM_GUI_LOCK] = LAYOUT(
61_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
62_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
63_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
64_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
65_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
66_______,KC_NO,_______,_______,_______,KC_NO,_______,_______,_______,_______,_______,_______,_______)
67};
68
69
70layer_state_t layer_state_set_user(layer_state_t state) {
71 if (IS_LAYER_ON_STATE(state, KM_GUI_LOCK)) {
72 fn_led_on();
73 } else {
74 fn_led_off();
75 }
76 return state;
77}
diff --git a/keyboards/bpiphany/ghost_squid/keymaps/default/readme.md b/keyboards/bpiphany/ghost_squid/keymaps/default/readme.md
new file mode 100644
index 000000000..3c27324d1
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/keymaps/default/readme.md
@@ -0,0 +1 @@
# Default layout desc TODO
diff --git a/keyboards/bpiphany/ghost_squid/matrix.c b/keyboards/bpiphany/ghost_squid/matrix.c
new file mode 100644
index 000000000..b0ad60755
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/matrix.c
@@ -0,0 +1,97 @@
1/*
2 Copyright 2014 Ralf Schmitt <[email protected]>
3 Copyright 2016 Daniel Svensson <[email protected]>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#include "matrix.h"
20#include "quantum.h"
21
22matrix_row_t read_rows(void) {
23 return
24 (PINB & (1 << 1) ? 0 : ((matrix_row_t)1 << 0)) |
25 (PINC & (1 << 2) ? 0 : ((matrix_row_t)1 << 1)) |
26 (PINB & (1 << 6) ? 0 : ((matrix_row_t)1 << 2)) |
27 (PINB & (1 << 4) ? 0 : ((matrix_row_t)1 << 3)) |
28 (PINB & (1 << 3) ? 0 : ((matrix_row_t)1 << 4)) |
29 (PINB & (1 << 2) ? 0 : ((matrix_row_t)1 << 5)) |
30 (PINB & (1 << 0) ? 0 : ((matrix_row_t)1 << 6)) |
31 (PINB & (1 << 5) ? 0 : ((matrix_row_t)1 << 7));
32}
33
34void select_col(uint8_t col) {
35 switch (col) {
36 case 0: PORTD = (PORTD & ~0b01111110) | 0b01100010; break;
37 case 1: PORTD = (PORTD & ~0b01111110) | 0b01101000; break;
38 case 2: PORTD = (PORTD & ~0b01111110) | 0b01101100; break;
39 case 3: PORTD = (PORTD & ~0b01111110) | 0b01110000; break;
40 case 4: PORTD = (PORTD & ~0b01111110) | 0b01111000; break;
41 case 5: PORTD = (PORTD & ~0b01111110) | 0b01100000; break;
42 case 6: PORTD = (PORTD & ~0b01111110) | 0b01110100; break;
43 case 7: PORTD = (PORTD & ~0b01111110) | 0b01100100; break;
44 case 8: PORTD = (PORTD & ~0b01111110) | 0b01111100; break;
45 case 9: PORTD = (PORTD & ~0b01111110) | 0b01101010; break;
46 case 10: PORTD = (PORTD & ~0b01111110) | 0b00110110; break;
47 case 11: PORTD = (PORTD & ~0b01111110) | 0b00010110; break;
48 case 12: PORTD = (PORTD & ~0b01111110) | 0b01001110; break;
49 case 13: PORTD = (PORTD & ~0b01111110) | 0b00111110; break;
50 case 14: PORTD = (PORTD & ~0b01111110) | 0b00011110; break;
51 case 15: PORTD = (PORTD & ~0b01111110) | 0b01000110; break;
52 case 16: PORTD = (PORTD & ~0b01111110) | 0b00100110; break;
53 case 17: PORTD = (PORTD & ~0b01111110) | 0b00101110; break;
54 }
55}
56
57void matrix_init_custom(void) {
58 /* Column output pins */
59 setPinOutput(D1);
60 setPinOutput(D2);
61 setPinOutput(D3);
62 setPinOutput(D4);
63 setPinOutput(D5);
64 setPinOutput(D6);
65
66 /* Row input pins */
67 writePinHigh(B0);
68 writePinHigh(B1);
69 writePinHigh(B2);
70 writePinHigh(B3);
71 writePinHigh(B4);
72 writePinHigh(B5);
73 writePinHigh(B6);
74 writePinHigh(C2);
75}
76
77bool matrix_scan_custom(matrix_row_t current_matrix[]) {
78 bool changed = false;
79
80 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
81 select_col(col);
82 matrix_io_delay();
83 matrix_row_t rows = read_rows();
84
85 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
86 bool prev_bit = current_matrix[row] & ((matrix_row_t)1 << col);
87 bool curr_bit = rows & (1 << row);
88
89 if (prev_bit != curr_bit) {
90 current_matrix[row] ^= (matrix_row_t)1 << col;
91 changed = true;
92 }
93 }
94 }
95
96 return changed;
97}
diff --git a/keyboards/bpiphany/ghost_squid/readme.md b/keyboards/bpiphany/ghost_squid/readme.md
new file mode 100644
index 000000000..ab39e0f72
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/readme.md
@@ -0,0 +1,27 @@
1# Ghost Squid Controller
2
3This is the firmware for Rev. 20140518 of the Ghost Squid controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), a replacement controller for the [Cooler Master Quick Fire XT](https://www.coolermaster.com/catalog/peripheral/keyboards/quick-fire-xt/).
4
5The code was adapted from the [BathroomEpiphanies QMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_qmk_keyboard/tree/master/keyboards/ghost_squid_20140518).
6
7* Keyboard Maintainer: QMK Community
8* Hardware Supported: Ghost Squid
9* Hardware Availability: [1upkeyboards](https://1upkeyboards.com/shop/controllers/qf-xt-ghost-squid-controller-2/)
10
11Enter the bootloader in 3 ways:
12
13* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
14* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
15* **Keycode in layout**: Press the key mapped to `RESET` if it is available
16
17Make example for this keyboard (after setting up your build environment):
18
19104 key default layout:
20
21 make bpiphany/ghost_squid:default
22
23Flashing example for this keyboard:
24
25 make bpiphany/ghost_squid:default:flash
26
27See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bpiphany/ghost_squid/rules.mk b/keyboards/bpiphany/ghost_squid/rules.mk
new file mode 100644
index 000000000..b4b4c1ef3
--- /dev/null
+++ b/keyboards/bpiphany/ghost_squid/rules.mk
@@ -0,0 +1,20 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19CUSTOM_MATRIX = lite
20SRC += matrix.c
diff --git a/keyboards/bpiphany/kitten_paw/config.h b/keyboards/bpiphany/kitten_paw/config.h
new file mode 100644
index 000000000..7dbf02769
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/config.h
@@ -0,0 +1,109 @@
1/*
2Copyright 2012 Jun Wako <[email protected]>
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 0xFEED
24#define PRODUCT_ID 0x6050
25#define DEVICE_VER 0x0104
26#define MANUFACTURER Costar
27#define PRODUCT Majestouch
28
29/* key matrix size */
30#define MATRIX_ROWS 8
31#define MATRIX_COLS 18
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43//#define MATRIX_ROW_PINS { D0, D5 }
44//#define MATRIX_COL_PINS { F1, F0, B0 }
45//#define UNUSED_PINS
46
47/* COL2ROW or ROW2COL */
48#define DIODE_DIRECTION COL2ROW
49
50#define LED_NUM_LOCK_PIN B7
51#define LED_CAPS_LOCK_PIN C6
52#define LED_SCROLL_LOCK_PIN C5
53#define LED_PIN_ON_STATE 0
54
55// #define BACKLIGHT_PIN B7
56// #define BACKLIGHT_BREATHING
57// #define BACKLIGHT_LEVELS 3
58
59/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
60#define DEBOUNCE 5
61
62/* define if matrix has ghost (lacks anti-ghosting diodes) */
63//#define MATRIX_HAS_GHOST
64
65/* number of backlight levels */
66
67/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
68#define LOCKING_SUPPORT_ENABLE
69/* Locking resynchronize hack */
70#define LOCKING_RESYNC_ENABLE
71
72/*
73 * Force NKRO
74 *
75 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
76 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
77 * makefile for this to work.)
78 *
79 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
80 * until the next keyboard reset.
81 *
82 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
83 * fully operational during normal computer usage.
84 *
85 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
86 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
87 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
88 * power-up.
89 *
90 */
91//#define FORCE_NKRO
92
93/*
94 * Feature disable options
95 * These options are also useful to firmware size reduction.
96 */
97
98/* disable debug print */
99//#define NO_DEBUG
100
101/* disable print */
102//#define NO_PRINT
103
104/* disable action features */
105//#define NO_ACTION_LAYER
106//#define NO_ACTION_TAPPING
107//#define NO_ACTION_ONESHOT
108//#define NO_ACTION_MACRO
109//#define NO_ACTION_FUNCTION
diff --git a/keyboards/bpiphany/kitten_paw/info.json b/keyboards/bpiphany/kitten_paw/info.json
new file mode 100644
index 000000000..f9c517ca4
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/info.json
@@ -0,0 +1,14 @@
1{
2 "keyboard_name": "Kitten Paw",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"label":"KC_NUBS", "x":1.25, "y":4.5}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
8 },
9
10 "LAYOUT_fullsize_ansi": {
11 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
12 }
13 }
14}
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
new file mode 100644
index 000000000..df1305b96
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
@@ -0,0 +1,15 @@
1#include QMK_KEYBOARD_H
2
3enum layers {
4 DEFAULT,
5};
6
7const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
8 [DEFAULT] = LAYOUT(
9 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS,
10 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
11 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS,
12 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
13 KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT,
14 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
15};
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h
new file mode 100644
index 000000000..142aba890
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h
@@ -0,0 +1,31 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6#undef MOUSEKEY_MOVE_MAX
7#define MOUSEKEY_MOVE_MAX 127
8#undef MOUSEKEY_WHEEL_MAX
9#define MOUSEKEY_WHEEL_MAX 110
10#undef MOUSEKEY_MOVE_DELTA
11#define MOUSEKEY_MOVE_DELTA 5
12#undef MOUSEKEY_WHEEL_DELTA
13#define MOUSEKEY_WHEEL_DELTA 1
14#undef MOUSEKEY_DELAY
15#define MOUSEKEY_DELAY 50
16#undef MOUSEKEY_INTERVAL
17#define MOUSEKEY_INTERVAL 20
18#undef MOUSEKEY_MAX_SPEED
19#define MOUSEKEY_MAX_SPEED 4
20#undef MOUSEKEY_TIME_TO_MAX
21#define MOUSEKEY_TIME_TO_MAX 30
22#undef MOUSEKEY_WHEEL_MAX_SPEED
23#define MOUSEKEY_WHEEL_MAX_SPEED 3
24#undef MOUSEKEY_WHEEL_TIME_TO_MAX
25#define MOUSEKEY_WHEEL_TIME_TO_MAX 255
26#undef ONESHOT_TIMEOUT
27#define ONESHOT_TIMEOUT 500
28#undef TAPPING_TOGGLE
29#define TAPPING_TOGGLE 2
30
31#endif
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
new file mode 100644
index 000000000..cc4d0bca6
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
@@ -0,0 +1,199 @@
1#include QMK_KEYBOARD_H
2#include "mousekey.h"
3
4#define MEDAPP LT(MEDIA, KC_APP)
5
6uint8_t current_layer_global = 255;
7
8enum layers {
9 DEFAULT,
10 PROG1,
11 PROG2,
12 MEDIA,
13 MOUSE1,
14 MOUSE2,
15 MISC,
16};
17
18enum custom_keycodes {
19 LSHFT_PAREN = SAFE_RANGE,
20 RSHFT_PAREN,
21 LCTRL_BRACKET,
22 RCTRL_BRACKET,
23 LALT_CURLY,
24 RALT_CURLY,
25 CTRL_CLICK,
26 M_GRV,
27 M_CFLEX
28};
29
30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
31 [DEFAULT] = LAYOUT(\
32 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
33 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
34 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
35 TT(MOUSE1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
36 LSHFT_PAREN,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, RSHFT_PAREN, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
37 LCTRL_BRACKET,KC_LGUI, LALT_CURLY, LT(MISC, KC_SPC), RALT_CURLY,TT(PROG1), MEDAPP, RCTRL_BRACKET, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT),
38 /* Layer 1: Programming Layer 1, emulating US l ayout */
39 [PROG1] = LAYOUT(\
40 KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
41 M_GRV,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH,S(KC_0),_______, _______,_______,_______, _______,_______,_______,_______, \
42 _______,_______,_______,_______,_______,_______, KC_Z,_______,_______,_______,_______,ALGR(KC_8),ALGR(KC_9),ALGR(KC_MINS), _______,_______,_______, _______,_______,_______,_______, \
43 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(KC_COMM),S(KC_BSLS), _______, _______,_______,_______, \
44 MO(PROG2),_______, KC_Y,_______,_______,_______,_______,_______,_______,_______,_______, S(KC_7), MO(PROG2), _______, _______,_______,_______,_______, \
45 _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
46 /* Layer 2: programming layer 2
47 all keys that are not FN keys are sent as LSFT+key on this layer
48 */
49 [PROG2] = LAYOUT(\
50 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
51 ALGR(KC_RBRC),_______, ALGR(KC_Q),KC_BSLS,_______,_______,M_CFLEX, S(KC_6),S(KC_RBRC), S(KC_8),S(KC_9),S(KC_SLSH),KC_RBRC,_______, _______,_______,_______, _______,_______,_______,_______, \
52 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, ALGR(KC_7),ALGR(KC_0),ALGR(KC_NUBS), _______,_______,_______, _______,_______,_______,_______, \
53 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, S(KC_DOT), S(KC_2), _______, _______,_______,_______, \
54 _______,S(KC_NUBS),_______,_______,_______,_______,_______,_______,_______,KC_NUBS,S(KC_NUBS),S(KC_MINS), _______, _______, _______,_______,_______,_______, \
55 _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
56 /* Layer 3: media layer */
57 [MEDIA] = LAYOUT(\
58 KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \
59 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_MPRV,KC_MPLY,KC_MNXT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
60 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_VOLD,KC_MUTE,KC_VOLU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
61 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \
62 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, KC_EJCT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
63 XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,_______,XXXXXXX, KC_MRWD,KC_MSTP,KC_MFFD, XXXXXXX,XXXXXXX),
64 /* Layer 4: Mouse layer */
65 [MOUSE1] = LAYOUT(\
66 TO(DEFAULT),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
67 _______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
68 _______,KC_BTN4,KC_WH_D,KC_MS_U,KC_WH_U,_______, C(KC_Z),_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
69 _______,KC_BTN5,KC_MS_L,KC_MS_D,KC_MS_R, CTRL_CLICK,KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,_______,_______, _______, _______,_______,_______, \
70 MO(MOUSE2),_______,C(KC_Y),C(KC_X),C(KC_C),C(KC_V),_______,KC_BTN2,KC_BTN3,C(KC_PGUP),C(KC_PGDN),_______, KC_RSFT, _______, _______,_______,_______,_______, \
71 KC_LCTL,_______,KC_LALT, KC_BTN1, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, _______,_______,_______, _______,_______),
72 /* Layer 5: Mouse layer 2*/
73 [MOUSE2] = LAYOUT(\
74 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
75 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
76 _______,_______,KC_BTN2,KC_WH_U,KC_BTN3,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
77 _______,_______,KC_WH_L,KC_WH_D,KC_WH_R,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______, _______, _______,_______,_______, \
78 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______, \
79 _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
80 /* Layer 6: Misc layer */
81 [MISC] = LAYOUT(\
82 _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______,_______,_______, \
83 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
84 _______,KC_SLCT, C(KC_W), KC_UP,_______,_______,_______,_______,KC_BSPC, KC_DEL,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
85 _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_HOME,KC_PGDN,KC_PGUP,_______,_______,_______, _______, _______,_______,_______, \
86 KC_LSFT,_______,C(KC_Y),C(KC_X),C(KC_C),C(KC_V), KC_SPC, KC_END,_______,C(KC_PGUP),C(KC_PGDN),_______, _______, _______, _______,_______,_______,_______, \
87 _______,_______,_______, LT(MISC, KC_SPC), _______,_______,_______,_______, _______,_______,_______, _______,_______),
88};
89
90void matrix_scan_user(void) {
91 uint8_t layer;
92 layer = biton32(layer_state);
93
94 if (current_layer_global != layer) {
95 current_layer_global = layer;
96
97 // unset CAPSLOCK and SCROLL LOCK LEDs
98 led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_CAPS_LOCK));
99 led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_SCROLL_LOCK));
100 // set SCROLL LOCK LED when the mouse layer is active, CAPS LOCK when PROG layer is active
101 if (layer == MOUSE1 || layer == MOUSE2) {
102 led_set_kb(host_keyboard_leds() | (1<<USB_LED_SCROLL_LOCK));
103 } else if (layer == PROG1 || layer == PROG2) {
104 led_set_kb(host_keyboard_leds() | (1<<USB_LED_CAPS_LOCK));
105 }
106 }
107}
108
109void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_mod, uint16_t macro_kc ) {
110 if (record->event.pressed) {
111 if (record->tap.count > 0 && !record->tap.interrupted) {
112 if (record->tap.interrupted) {
113 register_mods(MOD_BIT(orig_mod));
114 }
115 } else {
116 register_mods(MOD_BIT(orig_mod));
117 }
118 } else {
119 if (record->tap.count > 0 && !(record->tap.interrupted)) {
120 add_weak_mods(MOD_BIT(macro_mod));
121 send_keyboard_report();
122 register_code(macro_kc);
123 unregister_code(macro_kc);
124 del_weak_mods(MOD_BIT(macro_mod));
125 send_keyboard_report();
126 record->tap.count = 0; // ad hoc: cancel tap
127 } else {
128 unregister_mods(MOD_BIT(orig_mod));
129 }
130 }
131}
132
133bool process_record_user(uint16_t keycode, keyrecord_t *record) {
134 uint8_t layer;
135 layer = biton32(layer_state);
136 if (layer == PROG2) {
137 if (keycode >= KC_A && keycode <= KC_EXSEL && \
138 !( // do not send LSFT + these keycodes, they are needed for emulating the US layout
139 keycode == KC_NONUS_BSLASH ||
140 keycode == KC_RBRC ||
141 keycode == KC_BSLS ||
142 keycode == KC_GRV
143 )) {
144 // LSFT is the modifier for this layer, so we set LSFT for every key to get the expected behavior
145 if (record->event.pressed) {
146 register_mods(MOD_LSFT);
147 } else {
148 unregister_mods(MOD_LSFT);
149 }
150 }
151 }
152
153 switch (keycode) {
154 case LCTRL_BRACKET:
155 tap_helper(record, KC_LCTL, KC_RALT, KC_8);
156 return false;
157 case RCTRL_BRACKET:
158 tap_helper(record, KC_RCTL, KC_RALT, KC_9);
159 return false;
160 case LALT_CURLY:
161 tap_helper(record, KC_LALT, KC_RALT, KC_7);
162 return false;
163 case RALT_CURLY:
164 tap_helper(record, KC_RALT, KC_RALT, KC_0);
165 return false;
166 case LSHFT_PAREN:
167 tap_helper(record, KC_LSFT, KC_LSFT, KC_8);
168 return false;
169 case RSHFT_PAREN:
170 tap_helper(record, KC_RSFT, KC_LSFT, KC_9);
171 return false;
172 case CTRL_CLICK:
173 if (record->event.pressed) {
174 mousekey_clear();
175 register_mods(MOD_BIT(KC_LCTL));
176 send_keyboard_report();
177 wait_ms(5);
178 mousekey_on(KC_BTN1);
179 mousekey_send();
180 wait_ms(10);
181 mousekey_off(KC_BTN1);
182 mousekey_send();
183 wait_ms(5);
184 unregister_mods(MOD_BIT(KC_LCTL));
185 send_keyboard_report();
186 }
187 return false;
188 case M_GRV:
189 tap_code16(S(KC_EQL));
190 tap_code(KC_SPC);
191 return false;
192 case M_CFLEX:
193 tap_code(KC_GRV);
194 tap_code(KC_SPC);
195 return false;
196 }
197
198 return true;
199}
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md
new file mode 100644
index 000000000..0d23be4ea
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md
@@ -0,0 +1,18 @@
1# My personal keymap for the Kitten Paw controller
2
3This keymap only works correctly when you have your OS configured with a German keymap. Use the keymap however you like. It's most likely a living thing that will never be quite finished.
4
5## Description of the layers
6Layer 0 (DEFAULT) works just like you would expect a keyboard to work, mostly, except:
7Caps Lock switches to the mouse layer, RGUI and APP are switches to the programming layer and media layer.
8Mouse and programming layer switches can be held or double-tapped to lock.
9Holding space switches to the MISC layer where I currently accumulate useful shortcuts.
10Tapping left and right Shift, Ctrl and Alt will send (), [] and {} respectively.
11
12Layers 1 and 2 (PROG1 and PROG2) emulate the US layout while still using a German OS keymap setting. I was annoyed of having to change the OS settings every time I wanted to use the US layout for coding, so I made these layers to behave just like the US layout even though the OS still uses German. The shift keys were a bit tricky, I had to use them as MO(PROG2) switches, so to get the actual expected behavior I enable LSFT for almost every keypress on PROG2 in ```process_record_user```. Since the shift keys are MO() function keys, they do not print () at the moment, which sucks. I'm working on it.
13
14Layer 3 (MEDIA) just has a couple of media keys on it, mainly around the cursor keys and nav key cluster.
15
16Layers 4 and 5 (MOUSE1 and MOUSE2) are mouse layers. Move the cursor using ESDF, scroll using HJKL, Space for left click, N and M for right and middle click. There's more, look at the keymap.
17
18Layer 6 is a layer I don't have a good name for, so I call it MISC. You'll find cursor keys at ESDF, other navigation keys around the HJKL cluster and F12 to F24 on the F-keys. For now. \ No newline at end of file
diff --git a/keyboards/bpiphany/kitten_paw/kitten_paw.c b/keyboards/bpiphany/kitten_paw/kitten_paw.c
new file mode 100644
index 000000000..e71b3c801
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/kitten_paw.c
@@ -0,0 +1 @@
#include "kitten_paw.h"
diff --git a/keyboards/bpiphany/kitten_paw/kitten_paw.h b/keyboards/bpiphany/kitten_paw/kitten_paw.h
new file mode 100644
index 000000000..d4a9a1665
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/kitten_paw.h
@@ -0,0 +1,63 @@
1#pragma once
2
3#include "quantum.h"
4
5#define XXX KC_NO
6
7// This a shortcut to help you visually see your layout.
8// The first section contains all of the arguements
9// The second converts the arguments into a two-dimensional array
10/*
11 Matrix col/row mapping
12
13 ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
14 | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
15 `----' `-------------------' `-------------------' `-------------------' `--------------'
16 ,-------------------------------------------------------------------------. ,--------------. ,-------------------.
17 | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
18 |-------------------------------------------------------------------------| |--------------| |-------------------|
19 | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
20 |-------------------------------------------------------------------------| '--------------' |-------------- |
21 | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | |
22 |-------------------------------------------------------------------------| ,----. |-------------------|
23 | N2 | I6 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 |
24 |-------------------------------------------------------------------------| ,--------------. |-------------- |
25 | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
26 `-------------------------------------------------------------------------' `--------------' `-------------------'
27*/
28
29#define LAYOUT( \
30 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
31 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
32 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
33 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
34 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
35 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
36) { \
37 { XXX, KB0, KC0, KD0, XXX, KF0, KG0, XXX, XXX, XXX, KK0, KL0, XXX, XXX, KO0, XXX, KQ0, KR0 }, \
38 { KA1, KB1, XXX, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1, XXX, XXX, XXX, XXX, KQ1, XXX }, \
39 { XXX, KB2, XXX, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, XXX, KN2, XXX, KP2, KQ2, KR2 }, \
40 { XXX, KB3, XXX, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3, XXX, KQ3, KR3 }, \
41 { KA4, KB4, XXX, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, XXX, XXX, KO4, XXX, KQ4, KR4 }, \
42 { KA5, XXX, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, XXX, XXX, KO5, XXX, KQ5, KR5 }, \
43 { XXX, KB6, KC6, XXX, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6, XXX, XXX, KO6, XXX, KQ6, KR6 }, \
44 { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, XXX, XXX, XXX, XXX, KO7, XXX, KQ7, KR7 } \
45}
46
47#define LAYOUT_fullsize_ansi( \
48 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
49 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
50 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
51 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
52 KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
53 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
54) { \
55 { XXX, KB0, KC0, KD0, XXX, KF0, KG0, XXX, XXX, XXX, KK0, KL0, XXX, XXX, KO0, XXX, KQ0, KR0 }, \
56 { KA1, KB1, XXX, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1, XXX, XXX, XXX, XXX, KQ1, XXX }, \
57 { XXX, KB2, XXX, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, XXX, KN2, XXX, KP2, KQ2, KR2 }, \
58 { XXX, KB3, XXX, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3, XXX, KQ3, KR3 }, \
59 { KA4, KB4, XXX, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, XXX, XXX, KO4, XXX, KQ4, KR4 }, \
60 { KA5, XXX, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, XXX, XXX, KO5, XXX, KQ5, KR5 }, \
61 { XXX, KB6, KC6, XXX, KE6, KF6, KG6, KH6, XXX, KJ6, KK6, KL6, XXX, XXX, KO6, XXX, KQ6, KR6 }, \
62 { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, XXX, XXX, XXX, XXX, KO7, XXX, KQ7, KR7 } \
63}
diff --git a/keyboards/bpiphany/kitten_paw/matrix.c b/keyboards/bpiphany/kitten_paw/matrix.c
new file mode 100644
index 000000000..b59089cdf
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/matrix.c
@@ -0,0 +1,183 @@
1/*
2 Copyright 2014 Ralf Schmitt <[email protected]>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include <stdint.h>
19#include <stdbool.h>
20#include <avr/io.h>
21#include <util/delay.h>
22#include "print.h"
23#include "debug.h"
24#include "util.h"
25#include "matrix.h"
26
27#ifndef DEBOUNCE
28# define DEBOUNCE 5
29#endif
30static uint8_t debouncing = DEBOUNCE;
31
32static matrix_row_t matrix[MATRIX_ROWS];
33static matrix_row_t matrix_debouncing[MATRIX_ROWS];
34
35static uint8_t read_rows(void);
36static void select_col(uint8_t col);
37
38__attribute__ ((weak))
39void matrix_init_kb(void) {
40 matrix_init_user();
41}
42
43__attribute__ ((weak))
44void matrix_scan_kb(void) {
45 matrix_scan_user();
46}
47
48__attribute__ ((weak))
49void matrix_init_user(void) {
50}
51
52__attribute__ ((weak))
53void matrix_scan_user(void) {
54}
55
56inline uint8_t matrix_rows(void) {
57 return MATRIX_ROWS;
58}
59
60inline uint8_t matrix_cols(void) {
61 return MATRIX_COLS;
62}
63
64/* Column pin configuration
65 *
66 * col: 0 1 2 3 4 5 6 7
67 * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2
68 *
69 * Rrr pin configuration
70 *
71 * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
72 * active), together with 2 rrrs driven directly from the micro
73 * controller, to control the 18 rrrs. The rrrs are driven from
74 * pins B6,5,4,3,2,1,0.
75 */
76void matrix_init(void) {
77 DDRC &= ~0b10000100; // Row input pins
78 DDRD &= ~0b01111110;
79 PORTC |= 0b10000100;
80 PORTD |= 0b01111110;
81
82 DDRB |= 0b01111111; // Column output pins
83
84 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
85 matrix[i] = 0;
86 matrix_debouncing[i] = 0;
87 }
88 matrix_init_quantum();
89}
90
91uint8_t matrix_scan(void) {
92 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
93 select_col(col);
94 _delay_us(3);
95 uint8_t rows = read_rows();
96 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
97 bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
98 bool curr_bit = rows & (1<<row);
99 if (prev_bit != curr_bit) {
100 matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
101 debouncing = DEBOUNCE;
102 }
103 }
104 }
105
106 if (debouncing) {
107 if (--debouncing) {
108 _delay_ms(1);
109 }
110 else {
111 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
112 matrix[i] = matrix_debouncing[i];
113 }
114 }
115 }
116 matrix_scan_quantum();
117 return 1;
118}
119
120bool matrix_is_modified(void) {
121 if (debouncing)
122 return false;
123 else
124 return true;
125}
126
127inline bool matrix_is_on(uint8_t row, uint8_t col) {
128 return (matrix[row] & ((matrix_row_t)1<<col));
129}
130
131inline matrix_row_t matrix_get_row(uint8_t row) {
132 return matrix[row];
133}
134
135void matrix_print(void) {
136 print("\nr/c 0123456789ABCDEF\n");
137 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
138 xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
139 }
140}
141
142uint8_t matrix_key_count(void) {
143 uint8_t count = 0;
144 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
145 count += bitpop32(matrix[i]);
146 }
147 return count;
148}
149
150static uint8_t read_rows(void) {
151 return
152 (PINC&(1<<7) ? 0 : (1<<0)) |
153 (PIND&(1<<5) ? 0 : (1<<1)) |
154 (PIND&(1<<3) ? 0 : (1<<2)) |
155 (PIND&(1<<1) ? 0 : (1<<3)) |
156 (PINC&(1<<2) ? 0 : (1<<4)) |
157 (PIND&(1<<2) ? 0 : (1<<5)) |
158 (PIND&(1<<4) ? 0 : (1<<6)) |
159 (PIND&(1<<6) ? 0 : (1<<7));
160}
161
162static void select_col(uint8_t col) {
163 switch (col) {
164 case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
165 case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
166 case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
167 case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
168 case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
169 case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
170 case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
171 case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
172 case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
173 case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
174 case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
175 case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
176 case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
177 case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
178 case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
179 case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
180 case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
181 case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
182 }
183}
diff --git a/keyboards/bpiphany/kitten_paw/readme.md b/keyboards/bpiphany/kitten_paw/readme.md
new file mode 100644
index 000000000..15737a3a9
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/readme.md
@@ -0,0 +1,16 @@
1kitten_paw
2==========
3
4This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
5
6NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
7
8Keyboard Maintainer: QMK Community
9Hardware Supported: Kitten Paw PCB
10Hardware Availability: https://geekhack.org/index.php?topic=46700.0
11
12Make example for this keyboard (after setting up your build environment):
13
14 make bpiphany/kitten_paw:default
15
16See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/bpiphany/kitten_paw/rules.mk b/keyboards/bpiphany/kitten_paw/rules.mk
new file mode 100644
index 000000000..3709394a1
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = yes # Console for debug
14COMMAND_ENABLE = yes # Commands for debug and configuration
15NKRO_ENABLE = no # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17AUDIO_ENABLE = no # Audio output
18
19CUSTOM_MATRIX = yes
20SRC += matrix.c
21
22LAYOUTS = fullsize_ansi
diff --git a/keyboards/bpiphany/pegasushoof/.noci b/keyboards/bpiphany/pegasushoof/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/.noci
diff --git a/keyboards/bpiphany/pegasushoof/2013/.noci b/keyboards/bpiphany/pegasushoof/2013/.noci
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/.noci
diff --git a/keyboards/bpiphany/pegasushoof/2013/2013.c b/keyboards/bpiphany/pegasushoof/2013/2013.c
new file mode 100644
index 000000000..c9bd01a99
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/2013.c
@@ -0,0 +1,25 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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#include "2013.h"
19
20
21extern inline void ph_caps_led_on(void);
22extern inline void ph_caps_led_off(void);
23
24extern inline void ph_sclk_led_on(void);
25extern inline void ph_sclk_led_off(void);
diff --git a/keyboards/bpiphany/pegasushoof/2013/2013.h b/keyboards/bpiphany/pegasushoof/2013/2013.h
new file mode 100644
index 000000000..7a4d7f0b5
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/2013.h
@@ -0,0 +1,82 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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 "matrix.h"
21#include "quantum.h"
22
23#define LAYOUT( \
24 KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
25 KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
26 KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
27 KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
28 KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
29 KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
30 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
31 /* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
32 /* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
33 /* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
34 /* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
35 /* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
36 /* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
37 /* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
38 /* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
39 }
40
41#define LAYOUT_tkl_ansi( \
42 KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
43 KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
44 KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
45 KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
46 KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
47 KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
48 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
49 /* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
50 /* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
51 /* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
52 /* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
53 /* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
54 /* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
55 /* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KC_NO , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
56 /* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
57 }
58
59#define LAYOUT_tkl_jis( \
60 KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
61 KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO7, KO2, KR4, KC4, KE4, \
62 KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KQ4, KC5, KE5, \
63 KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1, \
64 KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \
65 KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \
66 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
67 /* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KG0, KH0, KI0, KJ0, KK0, KL0, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
68 /* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
69 /* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO }, \
70 /* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO }, \
71 /* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
72 /* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
73 /* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO }, \
74 /* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KK7, KL7, KO7, KP7, KC_NO, KC_NO } \
75}
76
77inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
78inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
79
80inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
81inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
82
diff --git a/keyboards/bpiphany/pegasushoof/2013/config.h b/keyboards/bpiphany/pegasushoof/2013/config.h
new file mode 100644
index 000000000..2573cecfc
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/config.h
@@ -0,0 +1,36 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xFEED
23#define PRODUCT_ID 0x6050
24#define DEVICE_VER 0x0104
25#define MANUFACTURER Filco
26#define PRODUCT Majestouch TKL \\w The Pegasus Hoof 2013
27
28/* key matrix size */
29#define MATRIX_ROWS 8
30#define MATRIX_COLS 18
31
32/* COL2ROW or ROW2COL */
33#define DIODE_DIRECTION COL2ROW
34
35/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
36#define DEBOUNCE 5
diff --git a/keyboards/bpiphany/pegasushoof/2013/matrix.c b/keyboards/bpiphany/pegasushoof/2013/matrix.c
new file mode 100644
index 000000000..037f323c0
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/matrix.c
@@ -0,0 +1,222 @@
1/*
2Copyright 2014 Ralf Schmitt <[email protected]>
3Copyright 2016 Daniel Svensson <[email protected]>
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#include <stdint.h>
20#include <stdbool.h>
21#include <avr/io.h>
22#include <util/delay.h>
23#include "wait.h"
24#include "print.h"
25#include "debug.h"
26#include "util.h"
27#include "matrix.h"
28
29static uint8_t debouncing = DEBOUNCE;
30static matrix_row_t matrix[MATRIX_ROWS];
31static matrix_row_t matrix_debouncing[MATRIX_ROWS];
32
33static matrix_row_t read_cols(void);
34static void select_row(uint8_t col);
35
36__attribute__ ((weak))
37void matrix_init_kb(void) {
38 matrix_init_user();
39}
40
41__attribute__ ((weak))
42void matrix_scan_kb(void) {
43 matrix_scan_user();
44}
45
46__attribute__ ((weak))
47void matrix_init_user(void) {
48}
49
50__attribute__ ((weak))
51void matrix_scan_user(void) {
52}
53
54inline uint8_t matrix_rows(void)
55{
56 return MATRIX_ROWS;
57}
58
59inline uint8_t matrix_cols(void)
60{
61 return MATRIX_COLS;
62}
63
64void matrix_init(void)
65{
66 /* Column output pins */
67 DDRD |= 0b01111011;
68 /* Row input pins */
69 DDRC &= ~0b10000000;
70 DDRB &= ~0b01111111;
71 PORTC |= 0b10000000;
72 PORTB |= 0b01111111;
73
74 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
75 matrix[i] = 0;
76 matrix_debouncing[i] = 0;
77 }
78
79 matrix_init_quantum();
80}
81
82uint8_t matrix_scan(void)
83{
84 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
85 select_row(col);
86 wait_us(30);
87 matrix_row_t rows = read_cols();
88 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
89 bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
90 bool curr_bit = rows & (1<<row);
91 if (prev_bit != curr_bit) {
92 matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
93 debouncing = DEBOUNCE;
94 }
95 }
96 }
97
98 if (debouncing) {
99 if (--debouncing) {
100 wait_ms(1);
101 } else {
102 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
103 matrix[i] = matrix_debouncing[i];
104 }
105 }
106 }
107
108 matrix_scan_quantum();
109
110 return 1;
111}
112
113bool matrix_is_modified(void)
114{
115 if (debouncing)
116 return false;
117 return true;
118}
119
120inline
121bool matrix_is_on(uint8_t row, uint8_t col)
122{
123 return matrix[row] & 1 << col;
124}
125
126inline
127matrix_row_t matrix_get_row(uint8_t row)
128{
129 return matrix[row];
130}
131
132void matrix_print(void)
133{
134 print("\nr/c 0123456789ABCDEF\n");
135 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
136 print_hex8(row); print(": ");
137 print_bin_reverse16(matrix_get_row(row));
138 print("\n");
139 }
140}
141
142uint8_t matrix_key_count(void)
143{
144 uint8_t count = 0;
145 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
146 count += bitpop16(matrix[i]);
147 }
148 return count;
149}
150
151static matrix_row_t read_cols(void)
152{
153 return
154 (PINB & (1 << 5) ? 0 : 1 << 0) |
155 (PINC & (1 << 7) ? 0 : 1 << 1) |
156 (PINB & (1 << 4) ? 0 : 1 << 2) |
157 (PINB & (1 << 6) ? 0 : 1 << 3) |
158 (PINB & (1 << 1) ? 0 : 1 << 4) |
159 (PINB & (1 << 0) ? 0 : 1 << 5) |
160 (PINB & (1 << 3) ? 0 : 1 << 6) |
161 (PINB & (1 << 2) ? 0 : 1 << 7);
162}
163
164static void select_row(uint8_t col)
165{
166 switch (col) {
167 case 0:
168 PORTD = (PORTD & ~0b01111011) | 0b00110011;
169 break;
170 case 1:
171 PORTD = (PORTD & ~0b01111011) | 0b01110000;
172 break;
173 case 2:
174 PORTD = (PORTD & ~0b01111011) | 0b00010011;
175 break;
176 case 3:
177 PORTD = (PORTD & ~0b01111011) | 0b01101000;
178 break;
179 case 4:
180 PORTD = (PORTD & ~0b01111011) | 0b00001011;
181 break;
182 case 5:
183 PORTD = (PORTD & ~0b01111011) | 0b00111011;
184 break;
185 case 6:
186 PORTD = (PORTD & ~0b01111011) | 0b01111000;
187 break;
188 case 7:
189 PORTD = (PORTD & ~0b01111011) | 0b01100001;
190 break;
191 case 8:
192 PORTD = (PORTD & ~0b01111011) | 0b01101001;
193 break;
194 case 9:
195 PORTD = (PORTD & ~0b01111011) | 0b01110001;
196 break;
197 case 10:
198 PORTD = (PORTD & ~0b01111011) | 0b01101010;
199 break;
200 case 11:
201 PORTD = (PORTD & ~0b01111011) | 0b01100010;
202 break;
203 case 12:
204 PORTD = (PORTD & ~0b01111011) | 0b01111001;
205 break;
206 case 13:
207 PORTD = (PORTD & ~0b01111011) | 0b01100000;
208 break;
209 case 14:
210 PORTD = (PORTD & ~0b01111011) | 0b01000011;
211 break;
212 case 15:
213 PORTD = (PORTD & ~0b01111011) | 0b00011011;
214 break;
215 case 16:
216 PORTD = (PORTD & ~0b01111011) | 0b00100011;
217 break;
218 case 17:
219 PORTD = (PORTD & ~0b01111011) | 0b00101011;
220 break;
221 }
222}
diff --git a/keyboards/bpiphany/pegasushoof/2013/rules.mk b/keyboards/bpiphany/pegasushoof/2013/rules.mk
new file mode 100644
index 000000000..3215e3588
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2013/rules.mk
@@ -0,0 +1,2 @@
1CUSTOM_MATRIX = yes
2SRC = matrix.c
diff --git a/keyboards/bpiphany/pegasushoof/2015/2015.c b/keyboards/bpiphany/pegasushoof/2015/2015.c
new file mode 100644
index 000000000..401dc2633
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2015/2015.c
@@ -0,0 +1,25 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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#include "2015.h"
19
20
21extern inline void ph_caps_led_on(void);
22extern inline void ph_caps_led_off(void);
23
24extern inline void ph_sclk_led_on(void);
25extern inline void ph_sclk_led_off(void);
diff --git a/keyboards/bpiphany/pegasushoof/2015/2015.h b/keyboards/bpiphany/pegasushoof/2015/2015.h
new file mode 100644
index 000000000..418772aa2
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2015/2015.h
@@ -0,0 +1,102 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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 "matrix.h"
21#include "quantum.h"
22
23#define ___ XXXXXXX
24
25#define LAYOUT( \
26 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
27 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
28 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
29 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
30 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
31 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
32 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
33 /* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
34 /* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ }, \
35 /* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
36 /* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , KM3 , KN3 , ___ , ___ , ___ , KR3 }, \
37 /* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
38 /* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
39 /* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
40 /* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
41 }
42
43#define LAYOUT_tkl_ansi( \
44 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
45 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
46 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
47 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
48 KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
49 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
50 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
51 /* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
52 /* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ }, \
53 /* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
54 /* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , KM3 , KN3 , ___ , ___ , ___ , KR3 }, \
55 /* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
56 /* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
57 /* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , ___ , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
58 /* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
59 }
60
61#define LAYOUT_tkl_iso( \
62 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
63 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
64 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KK4, KO7, KQ7, \
65 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB3, KB1, \
66 KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
67 KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
68 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
69 /* 0 */ { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
70 /* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ }, \
71 /* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
72 /* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , KM3 , KN3 , ___ , ___ , ___ , KR3 }, \
73 /* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
74 /* 5 */ { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
75 /* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
76 /* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
77 }
78
79#define LAYOUT_tkl_jis( \
80 KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
81 KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB5, KB2, KL4, KO4, KQ4, \
82 KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KK4, KO7, KQ7, \
83 KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB3, KB1, \
84 KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KE0, KN3, KO6, \
85 KA4, KP2, KC6, KJ0, KK6, KI0, KH0, KC0, KD0, KA1, KO0, KK0, KL0 \
86 ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
87 /* 0 */ { ___ , KB0 , KC0 , KD0 , KE0 , KF0 , KG0 , KH0 , KI0 , KJ0 , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
88 /* 1 */ { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , }, \
89 /* 2 */ { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
90 /* 3 */ { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , ___ , KN3 , ___ , ___ , ___ , KR3 }, \
91 /* 4 */ { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
92 /* 5 */ { KA5 , KB5 , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
93 /* 6 */ { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , ___ , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
94 /* 7 */ { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 } \
95}
96
97inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
98inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
99
100inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
101inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
102
diff --git a/keyboards/bpiphany/pegasushoof/2015/config.h b/keyboards/bpiphany/pegasushoof/2015/config.h
new file mode 100644
index 000000000..479175c47
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2015/config.h
@@ -0,0 +1,37 @@
1/*
2Copyright 2016 Daniel Svensson <[email protected]>
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
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xFEED
23#define PRODUCT_ID 0x6050
24#define DEVICE_VER 0x0104
25#define MANUFACTURER Filco
26#define PRODUCT Majestouch TKL \\w The Pegasus Hoof 2015
27
28/* key matrix size */
29#define MATRIX_ROWS 8
30#define MATRIX_COLS 18
31
32/* COL2ROW or ROW2COL */
33#define DIODE_DIRECTION COL2ROW
34
35/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
36#define DEBOUNCE 5
37
diff --git a/keyboards/bpiphany/pegasushoof/2015/matrix.c b/keyboards/bpiphany/pegasushoof/2015/matrix.c
new file mode 100644
index 000000000..b05869fed
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/2015/matrix.c
@@ -0,0 +1,158 @@
1/*
2 Copyright 2014 Ralf Schmitt <[email protected]>
3 Copyright 2016 Daniel Svensson <[email protected]>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#include <stdint.h>
20#include <stdbool.h>
21#include <avr/io.h>
22#include <util/delay.h>
23#include "wait.h"
24#include "print.h"
25#include "debug.h"
26#include "util.h"
27#include "matrix.h"
28#include "debounce.h"
29
30static matrix_row_t matrix[MATRIX_ROWS];
31static matrix_row_t matrix_debouncing[MATRIX_ROWS];
32
33static matrix_row_t read_cols(void);
34static void select_row(uint8_t col);
35
36// user-defined overridable functions
37
38__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
39
40__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
41
42__attribute__((weak)) void matrix_init_user(void) {}
43
44__attribute__((weak)) void matrix_scan_user(void) {}
45
46// helper functions
47
48inline uint8_t matrix_rows(void)
49{
50 return MATRIX_ROWS;
51}
52
53inline uint8_t matrix_cols(void)
54{
55 return MATRIX_COLS;
56}
57
58void matrix_init(void)
59{
60 /* Column output pins */
61 DDRD |= 0b01111011;
62 /* Row input pins */
63 DDRC &= ~0b10000000;
64 DDRB &= ~0b01111111;
65 PORTC |= 0b10000000;
66 PORTB |= 0b01111111;
67
68 for (uint8_t i=0; i < matrix_rows(); i++) {
69 matrix[i] = 0;
70 matrix_debouncing[i] = 0;
71 }
72
73 matrix_init_quantum();
74}
75
76uint8_t matrix_scan(void)
77{
78 bool changed = false;
79 for (uint8_t col = 0; col < MATRIX_COLS; col++) {
80 select_row(col);
81 wait_us(30);
82 matrix_row_t rows = read_cols();
83 for (uint8_t row = 0; row < matrix_rows(); row++) {
84 bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
85 bool curr_bit = rows & (1<<row);
86 if ((changed |= prev_bit != curr_bit)) {
87 matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
88 }
89 }
90 }
91
92 debounce(matrix_debouncing, matrix, matrix_rows(), changed);
93 matrix_scan_quantum();
94
95 return (uint8_t)changed;
96}
97
98inline
99matrix_row_t matrix_get_row(uint8_t row)
100{
101 return matrix[row];
102}
103
104void matrix_print(void)
105{
106 print("\nr/c 0123456789ABCDEF\n");
107 for (uint8_t row = 0; row < matrix_rows(); row++) {
108 print_hex8(row); print(": ");
109 print_bin_reverse16(matrix_get_row(row));
110 print("\n");
111 }
112}
113
114uint8_t matrix_key_count(void)
115{
116 uint8_t count = 0;
117 for (uint8_t i = 0; i < matrix_rows(); i++) {
118 count += bitpop16(matrix_get_row(i));
119 }
120 return count;
121}
122
123static matrix_row_t read_cols(void)
124{
125 return
126 (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<0)) |
127 (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<1)) |
128 (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
129 (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
130 (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
131 (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
132 (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
133 (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7));
134}
135
136static void select_row(uint8_t col)