diff options
author | Akshay <[email protected]> | 2022-04-10 12:13:40 +0100 |
---|---|---|
committer | Akshay <[email protected]> | 2022-04-10 12:13:40 +0100 |
commit | dc90387ce7d8ba7b607d9c48540bf6d8b560f14d (patch) | |
tree | 4ccb8fa5886b66fa9d480edef74236c27f035e16 /keyboards/bpiphany |
Diffstat (limited to 'keyboards/bpiphany')
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 | |||
3 | void 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 | |||
14 | bool 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 | |||
22 | static 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 | |||
40 | static 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 | |||
63 | void 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 | ||
75 | bool 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 | ||
2 | MCU = atmega32u2 | ||
3 | |||
4 | # Bootloader selection | ||
5 | BOOTLOADER = atmel-dfu | ||
6 | |||
7 | # Build Options | ||
8 | # change yes to no to disable | ||
9 | # | ||
10 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
11 | MOUSEKEY_ENABLE = yes # Mouse keys | ||
12 | EXTRAKEY_ENABLE = yes # Audio control and System control | ||
13 | CONSOLE_ENABLE = no # Console for debug | ||
14 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
15 | NKRO_ENABLE = no # Enable N-Key Rollover | ||
16 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
17 | AUDIO_ENABLE = no # Audio output | ||
18 | |||
19 | CUSTOM_MATRIX = lite | ||
20 | SRC += 20130602/matrix.c | ||
21 | |||
22 | LAYOUTS = 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 | |||
3 | void 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 | |||
14 | bool 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 | |||
22 | static 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 | |||
40 | static 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 | |||
63 | void 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 | ||
75 | bool 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 | ||
2 | MCU = atmega32u2 | ||
3 | |||
4 | # Bootloader selection | ||
5 | BOOTLOADER = atmel-dfu | ||
6 | |||
7 | # Build Options | ||
8 | # change yes to no to disable | ||
9 | # | ||
10 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
11 | MOUSEKEY_ENABLE = yes # Mouse keys | ||
12 | EXTRAKEY_ENABLE = yes # Audio control and System control | ||
13 | CONSOLE_ENABLE = no # Console for debug | ||
14 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
15 | NKRO_ENABLE = no # Enable N-Key Rollover | ||
16 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
17 | AUDIO_ENABLE = no # Audio output | ||
18 | |||
19 | CUSTOM_MATRIX = lite | ||
20 | SRC += 20140521/matrix.c | ||
21 | |||
22 | LAYOUTS = 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 | /* | ||
2 | Copyright 2012 Jun Wako <[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 | #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 | |||
3 | enum QFR_layers { | ||
4 | _COLEMAK, | ||
5 | _QWERTY, | ||
6 | _DVORAK, | ||
7 | _LOWER, | ||
8 | _MOUSE | ||
9 | }; | ||
10 | |||
11 | enum QFR_keycodes { | ||
12 | COLEMAK = SAFE_RANGE, | ||
13 | QWERTY, | ||
14 | DVORAK, | ||
15 | LOWER, | ||
16 | MOUSE | ||
17 | }; | ||
18 | |||
19 | enum 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 | |||
29 | const 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 | ||
77 | const 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 | |||
95 | bool 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 | ``` | ||
4 | make frosty_flake:QFR_JM | ||
5 | |||
6 | dfu-programmer atmega32u2 erase | ||
7 | dfu-programmer atmega32u2 flash frosty_flake_QFR_JM.hex | ||
8 | dfu-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 | ||
30 | The 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 | ``` | ||
56 | The *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 | ``` | ||
81 | The *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 | # | ||
5 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
6 | MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | ||
7 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
8 | CONSOLE_ENABLE = yes # Console for debug(+400) | ||
9 | COMMAND_ENABLE = yes # Commands for debug and configuration | ||
10 | NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||
11 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
12 | MIDI_ENABLE = no # MIDI controls | ||
13 | AUDIO_ENABLE = no # Audio output on port C6 | ||
14 | UNICODE_ENABLE = no # Unicode | ||
15 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | ||
16 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. | ||
17 | SLEEP_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 | |||
3 | const 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 @@ | |||
1 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
2 | MOUSEKEY_ENABLE = yes # Mouse keys | ||
3 | EXTRAKEY_ENABLE = yes # Audio control and System control | ||
4 | CONSOLE_ENABLE = no # Console for debug | ||
5 | COMMAND_ENABLE = yes # Commands for debug and configuration | ||
6 | NKRO_ENABLE = yes | ||
7 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
8 | AUDIO_ENABLE = no # Audio output | ||
9 | RGBLIGHT_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 | ||
7 | void register_hex32(uint32_t hex); | ||
8 | void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); | ||
9 | void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); | ||
10 | void cycleFoods(qk_tap_dance_state_t *state, void *user_data); | ||
11 | void cycleEtc(qk_tap_dance_state_t *state, void *user_data); | ||
12 | void cycleAll(qk_tap_dance_state_t *state, void *user_data); | ||
13 | |||
14 | void tap(uint16_t keycode){ | ||
15 | register_code(keycode); | ||
16 | unregister_code(keycode); | ||
17 | }; | ||
18 | |||
19 | //Tap Dance Declarations | ||
20 | enum taps{ | ||
21 | TD_CTCPS = 0, | ||
22 | EMOJIS, | ||
23 | ANIMAL, | ||
24 | HAND, | ||
25 | MEMES, | ||
26 | COPA, | ||
27 | ALLS | ||
28 | }; | ||
29 | |||
30 | enum 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 | |||
42 | enum my_macros { | ||
43 | NEWDESK = 0, | ||
44 | LEFTDESK, | ||
45 | RIGHTDESK, | ||
46 | CLOSEDESK | ||
47 | }; | ||
48 | |||
49 | |||
50 | // Tap Dance Definitions | ||
51 | qk_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 | ||
67 | const 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 | ||
95 | const 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 | ||
106 | const 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 | |||
133 | LEADER_EXTERNS(); | ||
134 | |||
135 | void 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 | |||
149 | void matrix_init_user(void) { | ||
150 | _delay_ms(500); | ||
151 | set_unicode_input_mode(UC_WINC); | ||
152 | }; | ||
153 | |||
154 | void 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 | |||
169 | void 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 | |||
183 | void 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 | |||
197 | void 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 | |||
212 | void 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 | ||
9 | COMBOS | ||
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 | |||
22 | Arrows 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 | # | ||
5 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
6 | MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | ||
7 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
8 | CONSOLE_ENABLE = no # Console for debug(+400) | ||
9 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
10 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||
11 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
12 | MIDI_ENABLE = no # MIDI controls | ||
13 | AUDIO_ENABLE = no # Audio output on port C6 | ||
14 | UNICODE_ENABLE = no # Unicode | ||
15 | UNICODEMAP_ENABLE = yes # unicodemap | ||
16 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | ||
17 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. | ||
18 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | ||
19 | TAP_DANCE_ENABLE = yes | ||
20 | LEADER_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. | ||
2 | Tap 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 | |||
3 | const 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 @@ | |||
1 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
2 | MOUSEKEY_ENABLE = no # Mouse keys(+4700) | ||
3 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
4 | CONSOLE_ENABLE = yes # Console for debug(+400) | ||
5 | COMMAND_ENABLE = yes # Commands for debug and configuration | ||
6 | NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||
7 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
8 | AUDIO_ENABLE = no # Audio output | ||
9 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | ||
10 | RGBLIGHT_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 | |||
18 | const 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 @@ | |||
1 | VIA_ENABLE = yes | ||
2 | LTO_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 | |||
3 | This is the firmware for the Frosty Flake controller by | ||
4 | [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), | ||
5 | a replacement controller for the [Cooler Master Quick Fire | ||
6 | Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/). | ||
7 | |||
8 | The code was adapted from the [BathroomEpiphanies TMK | ||
9 | Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers), | ||
10 | but has been cleaned up to match the | ||
11 | [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf) | ||
12 | and gone through some minor refactoring for QMK. | ||
13 | |||
14 | ## Revision support | ||
15 | There are two revisions of this controller. 20140521 is built by default. | ||
16 | If you need to build for 20130602, it can be built with `make bpiphany/frosty_flake/20130602` | ||
17 | |||
18 | ## 104 and 87 layout support | ||
19 | |||
20 | Support for both 104 key and 87 key layouts is provided. See the | ||
21 | keymaps `default` (104) and `tkl` (87) for example layouts. | ||
22 | |||
23 | Keyboard Maintainer: QMK Community | ||
24 | Hardware Supported: Frosty Flake | ||
25 | Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/qfr-frosty-flake-controller/) | ||
26 | |||
27 | Make example for this keyboard (after setting up your build environment): | ||
28 | |||
29 | 104 key default layout: | ||
30 | |||
31 | ``` | ||
32 | make bpiphany/frosty_flake:default | ||
33 | ``` | ||
34 | |||
35 | To directly flash the frosty_flake after compiling use: | ||
36 | |||
37 | ``` | ||
38 | make bpiphany/frosty_flake:default:dfu | ||
39 | ``` | ||
40 | |||
41 | 87 key tkl layout: | ||
42 | |||
43 | ``` | ||
44 | make bpiphany/frosty_flake:tkl:dfu | ||
45 | ``` | ||
46 | |||
47 | See 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 "ghost_squid.h" | ||
19 | |||
20 | void 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 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 | |||
37 | enum layer_names { | ||
38 | KM_QWERTY, | ||
39 | KM_MEDIA, | ||
40 | KM_GUI_LOCK | ||
41 | }; | ||
42 | |||
43 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
44 | /* Layer 0: Standard ISO layer */ | ||
45 | [KM_QWERTY] = LAYOUT( | ||
46 | 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, | ||
47 | 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, | ||
48 | 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, | ||
49 | KC_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, | ||
50 | 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, | ||
51 | KC_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 | |||
70 | layer_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 | |||
22 | matrix_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 | |||
34 | void 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 | |||
57 | void 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 | |||
77 | bool 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 | |||
3 | This 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 | |||
5 | The 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 | |||
11 | Enter 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 | |||
17 | Make example for this keyboard (after setting up your build environment): | ||
18 | |||
19 | 104 key default layout: | ||
20 | |||
21 | make bpiphany/ghost_squid:default | ||
22 | |||
23 | Flashing example for this keyboard: | ||
24 | |||
25 | make bpiphany/ghost_squid:default:flash | ||
26 | |||
27 | See 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 | ||
2 | MCU = atmega32u2 | ||
3 | |||
4 | # Bootloader selection | ||
5 | BOOTLOADER = atmel-dfu | ||
6 | |||
7 | # Build Options | ||
8 | # change yes to no to disable | ||
9 | # | ||
10 | BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite | ||
11 | MOUSEKEY_ENABLE = yes # Mouse keys | ||
12 | EXTRAKEY_ENABLE = yes # Audio control and System control | ||
13 | CONSOLE_ENABLE = no # Console for debug | ||
14 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
15 | NKRO_ENABLE = no # Enable N-Key Rollover | ||
16 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
17 | RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow | ||
18 | AUDIO_ENABLE = no # Audio output | ||
19 | CUSTOM_MATRIX = lite | ||
20 | SRC += 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 | /* | ||
2 | Copyright 2012 Jun Wako <[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 | #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 | |||
3 | enum layers { | ||
4 | DEFAULT, | ||
5 | }; | ||
6 | |||
7 | const 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 | |||
6 | uint8_t current_layer_global = 255; | ||
7 | |||
8 | enum layers { | ||
9 | DEFAULT, | ||
10 | PROG1, | ||
11 | PROG2, | ||
12 | MEDIA, | ||
13 | MOUSE1, | ||
14 | MOUSE2, | ||
15 | MISC, | ||
16 | }; | ||
17 | |||
18 | enum 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 | |||
30 | const 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 | |||
90 | void 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 | |||
109 | void 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 | |||
133 | bool 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 | |||
3 | This 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 | ||
6 | Layer 0 (DEFAULT) works just like you would expect a keyboard to work, mostly, except: | ||
7 | Caps Lock switches to the mouse layer, RGUI and APP are switches to the programming layer and media layer. | ||
8 | Mouse and programming layer switches can be held or double-tapped to lock. | ||
9 | Holding space switches to the MISC layer where I currently accumulate useful shortcuts. | ||
10 | Tapping left and right Shift, Ctrl and Alt will send (), [] and {} respectively. | ||
11 | |||
12 | Layers 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 | |||
14 | Layer 3 (MEDIA) just has a couple of media keys on it, mainly around the cursor keys and nav key cluster. | ||
15 | |||
16 | Layers 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 | |||
18 | Layer 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 | ||
30 | static uint8_t debouncing = DEBOUNCE; | ||
31 | |||
32 | static matrix_row_t matrix[MATRIX_ROWS]; | ||
33 | static matrix_row_t matrix_debouncing[MATRIX_ROWS]; | ||
34 | |||
35 | static uint8_t read_rows(void); | ||
36 | static void select_col(uint8_t col); | ||
37 | |||
38 | __attribute__ ((weak)) | ||
39 | void matrix_init_kb(void) { | ||
40 | matrix_init_user(); | ||
41 | } | ||
42 | |||
43 | __attribute__ ((weak)) | ||
44 | void matrix_scan_kb(void) { | ||
45 | matrix_scan_user(); | ||
46 | } | ||
47 | |||
48 | __attribute__ ((weak)) | ||
49 | void matrix_init_user(void) { | ||
50 | } | ||
51 | |||
52 | __attribute__ ((weak)) | ||
53 | void matrix_scan_user(void) { | ||
54 | } | ||
55 | |||
56 | inline uint8_t matrix_rows(void) { | ||
57 | return MATRIX_ROWS; | ||
58 | } | ||
59 | |||
60 | inline 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 | */ | ||
76 | void 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 | |||
91 | uint8_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 | |||
120 | bool matrix_is_modified(void) { | ||
121 | if (debouncing) | ||
122 | return false; | ||
123 | else | ||
124 | return true; | ||
125 | } | ||
126 | |||
127 | inline bool matrix_is_on(uint8_t row, uint8_t col) { | ||
128 | return (matrix[row] & ((matrix_row_t)1<<col)); | ||
129 | } | ||
130 | |||
131 | inline matrix_row_t matrix_get_row(uint8_t row) { | ||
132 | return matrix[row]; | ||
133 | } | ||
134 | |||
135 | void 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 | |||
142 | uint8_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 | |||
150 | static 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 | |||
162 | static 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 @@ | |||
1 | kitten_paw | ||
2 | ========== | ||
3 | |||
4 | This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies). | ||
5 | |||
6 | NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me. | ||
7 | |||
8 | Keyboard Maintainer: QMK Community | ||
9 | Hardware Supported: Kitten Paw PCB | ||
10 | Hardware Availability: https://geekhack.org/index.php?topic=46700.0 | ||
11 | |||
12 | Make example for this keyboard (after setting up your build environment): | ||
13 | |||
14 | make bpiphany/kitten_paw:default | ||
15 | |||
16 | See 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 | ||
2 | MCU = atmega32u2 | ||
3 | |||
4 | # Bootloader selection | ||
5 | BOOTLOADER = atmel-dfu | ||
6 | |||
7 | # Build Options | ||
8 | # change yes to no to disable | ||
9 | # | ||
10 | BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
11 | MOUSEKEY_ENABLE = yes # Mouse keys | ||
12 | EXTRAKEY_ENABLE = yes # Audio control and System control | ||
13 | CONSOLE_ENABLE = yes # Console for debug | ||
14 | COMMAND_ENABLE = yes # Commands for debug and configuration | ||
15 | NKRO_ENABLE = no # Enable N-Key Rollover | ||
16 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
17 | AUDIO_ENABLE = no # Audio output | ||
18 | |||
19 | CUSTOM_MATRIX = yes | ||
20 | SRC += matrix.c | ||
21 | |||
22 | LAYOUTS = 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 "2013.h" | ||
19 | |||
20 | |||
21 | extern inline void ph_caps_led_on(void); | ||
22 | extern inline void ph_caps_led_off(void); | ||
23 | |||
24 | extern inline void ph_sclk_led_on(void); | ||
25 | extern 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | |||
77 | inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); } | ||
78 | inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); } | ||
79 | |||
80 | inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); } | ||
81 | inline 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | /* | ||
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 | |||
29 | static uint8_t debouncing = DEBOUNCE; | ||
30 | static matrix_row_t matrix[MATRIX_ROWS]; | ||
31 | static matrix_row_t matrix_debouncing[MATRIX_ROWS]; | ||
32 | |||
33 | static matrix_row_t read_cols(void); | ||
34 | static void select_row(uint8_t col); | ||
35 | |||
36 | __attribute__ ((weak)) | ||
37 | void matrix_init_kb(void) { | ||
38 | matrix_init_user(); | ||
39 | } | ||
40 | |||
41 | __attribute__ ((weak)) | ||
42 | void matrix_scan_kb(void) { | ||
43 | matrix_scan_user(); | ||
44 | } | ||
45 | |||
46 | __attribute__ ((weak)) | ||
47 | void matrix_init_user(void) { | ||
48 | } | ||
49 | |||
50 | __attribute__ ((weak)) | ||
51 | void matrix_scan_user(void) { | ||
52 | } | ||
53 | |||
54 | inline uint8_t matrix_rows(void) | ||
55 | { | ||
56 | return MATRIX_ROWS; | ||
57 | } | ||
58 | |||
59 | inline uint8_t matrix_cols(void) | ||
60 | { | ||
61 | return MATRIX_COLS; | ||
62 | } | ||
63 | |||
64 | void 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 | |||
82 | uint8_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 | |||
113 | bool matrix_is_modified(void) | ||
114 | { | ||
115 | if (debouncing) | ||
116 | return false; | ||
117 | return true; | ||
118 | } | ||
119 | |||
120 | inline | ||
121 | bool matrix_is_on(uint8_t row, uint8_t col) | ||
122 | { | ||
123 | return matrix[row] & 1 << col; | ||
124 | } | ||
125 | |||
126 | inline | ||
127 | matrix_row_t matrix_get_row(uint8_t row) | ||
128 | { | ||
129 | return matrix[row]; | ||
130 | } | ||
131 | |||
132 | void 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 | |||
142 | uint8_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 | |||
151 | static 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 | |||
164 | static 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 @@ | |||
1 | CUSTOM_MATRIX = yes | ||
2 | SRC = 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 "2015.h" | ||
19 | |||
20 | |||
21 | extern inline void ph_caps_led_on(void); | ||
22 | extern inline void ph_caps_led_off(void); | ||
23 | |||
24 | extern inline void ph_sclk_led_on(void); | ||
25 | extern 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | |||
97 | inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); } | ||
98 | inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); } | ||
99 | |||
100 | inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); } | ||
101 | inline 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 | /* | ||
2 | Copyright 2016 Daniel Svensson <[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 | #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 | |||
30 | static matrix_row_t matrix[MATRIX_ROWS]; | ||
31 | static matrix_row_t matrix_debouncing[MATRIX_ROWS]; | ||
32 | |||
33 | static matrix_row_t read_cols(void); | ||
34 | static 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 | |||
48 | inline uint8_t matrix_rows(void) | ||
49 | { | ||
50 | return MATRIX_ROWS; | ||
51 | } | ||
52 | |||
53 | inline uint8_t matrix_cols(void) | ||
54 | { | ||
55 | return MATRIX_COLS; | ||
56 | } | ||
57 | |||
58 | void 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 | |||
76 | uint8_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 | |||
98 | inline | ||
99 | matrix_row_t matrix_get_row(uint8_t row) | ||
100 | { | ||
101 | return matrix[row]; | ||
102 | } | ||
103 | |||
104 | void 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 | |||
114 | uint8_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 | |||
123 | static 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 | |||
136 | static void select_row(uint8_t col) | ||