aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2020-03-04 09:10:39 +1100
committerGitHub <noreply@github.com>2020-03-03 14:10:39 -0800
commit8c3ff3f32c49c649ef6632d10f8fb15ef60d990d (patch)
tree2093a3a55ba5c7b6c63a0df3448f060fc7a9ee60
parent910d603c657e4ad81a4e7a4c86a74e2e79aa1eaa (diff)
downloadqmk_firmware-8c3ff3f32c49c649ef6632d10f8fb15ef60d990d.tar.gz
qmk_firmware-8c3ff3f32c49c649ef6632d10f8fb15ef60d990d.zip
[Keyboard] LFK78 refactor (#7835)
* Change include guards to pragma once * Clean up default keymaps * Remove some magic numbers and use GPIO macros * Clean up keyboard.[ch] * Tidy up info.json and readme * Align config.h with template * Split up revision code into subfolders * rev C-H has no audio, apparently * Change revc_h to revc and document differences * Turn off Audio on revb for now, for Travis' sake * Split info.json into revision folders * Clean up default keymaps some more
-rw-r--r--keyboards/lfkeyboards/lfk78/config.h139
-rw-r--r--keyboards/lfkeyboards/lfk78/info.json21
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c164
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk32
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c164
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/readme.md2
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk41
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c162
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk31
-rw-r--r--keyboards/lfkeyboards/lfk78/lfk78.c140
-rw-r--r--keyboards/lfkeyboards/lfk78/lfk78.h140
-rw-r--r--keyboards/lfkeyboards/lfk78/readme.md17
-rw-r--r--keyboards/lfkeyboards/lfk78/revb/config.h21
-rw-r--r--keyboards/lfkeyboards/lfk78/revb/info.json104
-rw-r--r--keyboards/lfkeyboards/lfk78/revb/revb.h39
-rw-r--r--keyboards/lfkeyboards/lfk78/revb/rules.mk2
-rw-r--r--keyboards/lfkeyboards/lfk78/revc/config.h21
-rw-r--r--keyboards/lfkeyboards/lfk78/revc/info.json392
-rw-r--r--keyboards/lfkeyboards/lfk78/revc/revc.h76
-rw-r--r--keyboards/lfkeyboards/lfk78/revc/rules.mk2
-rw-r--r--keyboards/lfkeyboards/lfk78/revj/config.h21
-rw-r--r--keyboards/lfkeyboards/lfk78/revj/info.json392
-rw-r--r--keyboards/lfkeyboards/lfk78/revj/revj.h76
-rw-r--r--keyboards/lfkeyboards/lfk78/revj/rules.mk4
-rw-r--r--keyboards/lfkeyboards/lfk78/rules.mk52
25 files changed, 1582 insertions, 673 deletions
diff --git a/keyboards/lfkeyboards/lfk78/config.h b/keyboards/lfkeyboards/lfk78/config.h
index 44b55b50e..3478c9629 100644
--- a/keyboards/lfkeyboards/lfk78/config.h
+++ b/keyboards/lfkeyboards/lfk78/config.h
@@ -15,68 +15,58 @@ You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>. 15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/ 16*/
17 17
18#ifndef CONFIG_H 18#pragma once
19#define CONFIG_H
20 19
21#include "config_common.h" 20#include "config_common.h"
22 21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED 23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x6060 24#define PRODUCT_ID 0x6060
25#define DEVICE_VER 0x0001 25#define DEVICE_VER 0x0001
26#define MANUFACTURER LFKeyboards 26#define MANUFACTURER LFKeyboards
27#define PRODUCT LFK78 27#define PRODUCT LFK78
28#define DESCRIPTION QMK keyboard firmware for LFK78 LFK_REV_STRING 28#define DESCRIPTION QMK keyboard firmware for LFK78
29
30#ifdef LFK_REV_B
31/* RevB Matrix config */
32 #define DIODE_DIRECTION COL2ROW
33 #define MATRIX_ROWS 10
34 #define MATRIX_COLS 8
35 #define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, F0, F1, F4, F5, F6}
36 #define MATRIX_COL_PINS { E6, F7, D2, D3, D4, D5, D6, D7 }
37 #define UNUSED_PINS { C7 }
38 #define RGBLED_NUM 31 // Number of LEDs
39#else
40/* RevC/D Matrix config */
41 #define DIODE_DIRECTION COL2ROW
42 #define MATRIX_ROWS 5
43 #define MATRIX_COLS 18
44 #define MATRIX_ROW_PINS {D2, D3, D4, D5, D6 }
45 #define MATRIX_COL_PINS {A0, A1, A2, A3, A4, A5, A6, A7, E6, E7,\
46 F0, F1, F2, F3, C0, C1, C2, C3 }
47 #define UNUSED_PINS {B0, B1, B2, B3, B4, B4, B5, B6, B7, C4, C5, C6, C7,\
48 D0, D1, D7, E0, E1, E2, E3, E4, D5, F4, F5, F6, F7,\
49 E6, E7, F0, F1, F2, F3, C0, C1, C2, C3}
50 #define RGBLED_NUM 27 // Number of LEDs
51#endif
52 29
53#define AUDIO_VOICES 30/* COL2ROW, ROW2COL*/
54#define C6_AUDIO 31#define DIODE_DIRECTION COL2ROW
55 32
56#define BACKLIGHT_LEVELS 8 33/*
57#define BACKLIGHT_PWM_MAP {8, 16, 40, 55, 70, 128, 200, 255} 34 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
35 */
36#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
58 37
59#define RGB_DI_PIN C7 // Have to set it to something to get the ws2812 code to compile 38#define BACKLIGHT_LEVELS 8
60#define RGBLIGHT_ANIMATIONS 39#define BACKLIGHT_PWM_MAP { 8, 16, 40, 55, 70, 128, 200, 255 }
61#define RGBLIGHT_HUE_STEP 10
62#define RGBLIGHT_SAT_STEP 17
63#define RGBLIGHT_VAL_STEP 17
64 40
65#define TAPPING_TERM 200 41#define TAPPING_TERM 200
66 42
43#define C6_AUDIO
44#define AUDIO_VOICES
45
46#define RGB_DI_PIN C7 // Have to set it to something to get the ws2812 code to compile
47#ifdef RGB_DI_PIN
48# define RGBLIGHT_HUE_STEP 10
49# define RGBLIGHT_SAT_STEP 17
50# define RGBLIGHT_VAL_STEP 17
51# define RGBLIGHT_ANIMATIONS
52#endif
53
67/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ 54/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
68#define DEBOUNCE 5 55#define DEBOUNCE 5
69 56
70/* define if matrix has ghost (lacks anti-ghosting diodes) */ 57/* define if matrix has ghost (lacks anti-ghosting diodes) */
71//#define MATRIX_HAS_GHOST 58//#define MATRIX_HAS_GHOST
72 59
73/* number of backlight levels */
74
75/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ 60/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
76#define LOCKING_SUPPORT_ENABLE 61#define LOCKING_SUPPORT_ENABLE
77/* Locking resynchronize hack */ 62/* Locking resynchronize hack */
78#define LOCKING_RESYNC_ENABLE 63#define LOCKING_RESYNC_ENABLE
79 64
65/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
66 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
67 */
68// #define GRAVE_ESC_CTRL_OVERRIDE
69
80/* 70/*
81 * Force NKRO 71 * Force NKRO
82 * 72 *
@@ -110,6 +100,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
110 * 100 *
111 */ 101 */
112 102
103/* key combination for magic key command */
104/* defined by default; to change, uncomment and set to the combination you want */
105// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
106
113/* control how magic key switches layers */ 107/* control how magic key switches layers */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true 108//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true 109//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
@@ -119,8 +113,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS 113//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
120//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS 114//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
121//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM 115//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
122//#define MAGIC_KEY_HELP1 H 116//#define MAGIC_KEY_HELP H
123//#define MAGIC_KEY_HELP2 SLASH 117//#define MAGIC_KEY_HELP_ALT SLASH
124//#define MAGIC_KEY_DEBUG D 118//#define MAGIC_KEY_DEBUG D
125//#define MAGIC_KEY_DEBUG_MATRIX X 119//#define MAGIC_KEY_DEBUG_MATRIX X
126//#define MAGIC_KEY_DEBUG_KBD K 120//#define MAGIC_KEY_DEBUG_KBD K
@@ -128,9 +122,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
128//#define MAGIC_KEY_VERSION V 122//#define MAGIC_KEY_VERSION V
129//#define MAGIC_KEY_STATUS S 123//#define MAGIC_KEY_STATUS S
130//#define MAGIC_KEY_CONSOLE C 124//#define MAGIC_KEY_CONSOLE C
131//#define MAGIC_KEY_LAYER0_ALT1 ESC
132//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
133//#define MAGIC_KEY_LAYER0 0 125//#define MAGIC_KEY_LAYER0 0
126//#define MAGIC_KEY_LAYER0_ALT GRAVE
134//#define MAGIC_KEY_LAYER1 1 127//#define MAGIC_KEY_LAYER1 1
135//#define MAGIC_KEY_LAYER2 2 128//#define MAGIC_KEY_LAYER2 2
136//#define MAGIC_KEY_LAYER3 3 129//#define MAGIC_KEY_LAYER3 3
@@ -140,9 +133,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
140//#define MAGIC_KEY_LAYER7 7 133//#define MAGIC_KEY_LAYER7 7
141//#define MAGIC_KEY_LAYER8 8 134//#define MAGIC_KEY_LAYER8 8
142//#define MAGIC_KEY_LAYER9 9 135//#define MAGIC_KEY_LAYER9 9
143//#define MAGIC_KEY_BOOTLOADER PAUSE 136//#define MAGIC_KEY_BOOTLOADER B
137//#define MAGIC_KEY_BOOTLOADER_ALT ESC
144//#define MAGIC_KEY_LOCK CAPS 138//#define MAGIC_KEY_LOCK CAPS
145//#define MAGIC_KEY_EEPROM E 139//#define MAGIC_KEY_EEPROM E
140//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
146//#define MAGIC_KEY_NKRO N 141//#define MAGIC_KEY_NKRO N
147//#define MAGIC_KEY_SLEEP_LED Z 142//#define MAGIC_KEY_SLEEP_LED Z
148 143
@@ -161,7 +156,63 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
161//#define NO_ACTION_LAYER 156//#define NO_ACTION_LAYER
162//#define NO_ACTION_TAPPING 157//#define NO_ACTION_TAPPING
163//#define NO_ACTION_ONESHOT 158//#define NO_ACTION_ONESHOT
164//#define NO_ACTION_MACRO
165//#define NO_ACTION_FUNCTION
166 159
160/* disable these deprecated features by default */
161#ifndef LINK_TIME_OPTIMIZATION_ENABLE
162 #define NO_ACTION_MACRO
163 #define NO_ACTION_FUNCTION
167#endif 164#endif
165/*
166 * MIDI options
167 */
168
169/* Prevent use of disabled MIDI features in the keymap */
170//#define MIDI_ENABLE_STRICT 1
171
172/* enable basic MIDI features:
173 - MIDI notes can be sent when in Music mode is on
174*/
175//#define MIDI_BASIC
176
177/* enable advanced MIDI features:
178 - MIDI notes can be added to the keymap
179 - Octave shift and transpose
180 - Virtual sustain, portamento, and modulation wheel
181 - etc.
182*/
183//#define MIDI_ADVANCED
184
185/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
186//#define MIDI_TONE_KEYCODE_OCTAVES 1
187
188/*
189 * HD44780 LCD Display Configuration
190 */
191/*
192#define LCD_LINES 2 //< number of visible lines of the display
193#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
194
195#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
196
197#if LCD_IO_MODE
198#define LCD_PORT PORTB //< port for the LCD lines
199#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
200#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
201#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
202#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
203#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
204#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
205#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
206#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
207#define LCD_RS_PORT LCD_PORT //< port for RS line
208#define LCD_RS_PIN 3 //< pin for RS line
209#define LCD_RW_PORT LCD_PORT //< port for RW line
210#define LCD_RW_PIN 2 //< pin for RW line
211#define LCD_E_PORT LCD_PORT //< port for Enable line
212#define LCD_E_PIN 1 //< pin for Enable line
213#endif
214*/
215
216/* Bootmagic Lite key configuration */
217// #define BOOTMAGIC_LITE_ROW 0
218// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/lfkeyboards/lfk78/info.json b/keyboards/lfkeyboards/lfk78/info.json
deleted file mode 100644
index 4af5a37ba..000000000
--- a/keyboards/lfkeyboards/lfk78/info.json
+++ /dev/null
@@ -1,21 +0,0 @@
1{
2 "keyboard_name": "LFK78/68",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 19.5,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2.25, "y":0}, {"label":"!", "x":3.25, "y":0}, {"label":"@", "x":4.25, "y":0}, {"label":"#", "x":5.25, "y":0}, {"label":"$", "x":6.25, "y":0}, {"label":"%", "x":7.25, "y":0}, {"label":"^", "x":8.25, "y":0}, {"label":"&", "x":9.25, "y":0}, {"label":"*", "x":10.25, "y":0}, {"label":"(", "x":11.25, "y":0}, {"label":")", "x":12.25, "y":0}, {"label":"_", "x":13.25, "y":0}, {"label":"+", "x":14.25, "y":0}, {"label":"Back Space", "x":15.25, "y":0, "w":2}, {"label":"Insert", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2.25, "y":1, "w":1.5}, {"label":"Q", "x":3.75, "y":1}, {"label":"W", "x":4.75, "y":1}, {"label":"E", "x":5.75, "y":1}, {"label":"R", "x":6.75, "y":1}, {"label":"T", "x":7.75, "y":1}, {"label":"Y", "x":8.75, "y":1}, {"label":"U", "x":9.75, "y":1}, {"label":"I", "x":10.75, "y":1}, {"label":"O", "x":11.75, "y":1}, {"label":"P", "x":12.75, "y":1}, {"label":"{", "x":13.75, "y":1}, {"label":"}", "x":14.75, "y":1}, {"label":"|", "x":15.75, "y":1, "w":1.5}, {"label":"Delete", "x":17.5, "y":1}, {"label":"PgDn", "x":18.5, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, {"label":"A", "x":4, "y":2}, {"label":"S", "x":5, "y":2}, {"label":"D", "x":6, "y":2}, {"label":"F", "x":7, "y":2}, {"label":"G", "x":8, "y":2}, {"label":"H", "x":9, "y":2}, {"label":"J", "x":10, "y":2}, {"label":"K", "x":11, "y":2}, {"label":"L", "x":12, "y":2}, {"label":":", "x":13, "y":2}, {"label":"\"", "x":14, "y":2}, {"label":"Enter", "x":15, "y":2, "w":2.25}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2.25, "y":3, "w":2.25}, {"label":"Z", "x":4.5, "y":3}, {"label":"X", "x":5.5, "y":3}, {"label":"C", "x":6.5, "y":3}, {"label":"V", "x":7.5, "y":3}, {"label":"B", "x":8.5, "y":3}, {"label":"N", "x":9.5, "y":3}, {"label":"M", "x":10.5, "y":3}, {"label":"<", "x":11.5, "y":3}, {"label":">", "x":12.5, "y":3}, {"label":"?", "x":13.5, "y":3}, {"label":"Shift", "x":14.5, "y":3, "w":2.75}, {"label":"\u2191", "x":17.5, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2.25, "y":4, "w":1.25}, {"label":"GUI", "x":3.5, "y":4, "w":1.25}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":6.25}, {"label":"Alt", "x":12.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.25}, {"label":"Fn", "x":14.75, "y":4, "w":1.25}, {"label":"\u2190", "x":16.5, "y":4}, {"label":"\u2193", "x":17.5, "y":4}, {"label":"\u2192", "x":18.5, "y":4}]
10 },
11 "LAYOUT_split_bs": {
12 "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2.25, "y":0}, {"label":"!", "x":3.25, "y":0}, {"label":"@", "x":4.25, "y":0}, {"label":"#", "x":5.25, "y":0}, {"label":"$", "x":6.25, "y":0}, {"label":"%", "x":7.25, "y":0}, {"label":"^", "x":8.25, "y":0}, {"label":"&", "x":9.25, "y":0}, {"label":"*", "x":10.25, "y":0}, {"label":"(", "x":11.25, "y":0}, {"label":")", "x":12.25, "y":0}, {"label":"_", "x":13.25, "y":0}, {"label":"+", "x":14.25, "y":0}, {"label":"Back Space", "x":15.25, "y":0}, {"label":"Back Space", "x":16.25, "y":0}, {"label":"Insert", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2.25, "y":1, "w":1.5}, {"label":"Q", "x":3.75, "y":1}, {"label":"W", "x":4.75, "y":1}, {"label":"E", "x":5.75, "y":1}, {"label":"R", "x":6.75, "y":1}, {"label":"T", "x":7.75, "y":1}, {"label":"Y", "x":8.75, "y":1}, {"label":"U", "x":9.75, "y":1}, {"label":"I", "x":10.75, "y":1}, {"label":"O", "x":11.75, "y":1}, {"label":"P", "x":12.75, "y":1}, {"label":"{", "x":13.75, "y":1}, {"label":"}", "x":14.75, "y":1}, {"label":"|", "x":15.75, "y":1, "w":1.5}, {"label":"Delete", "x":17.5, "y":1}, {"label":"PgDn", "x":18.5, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, {"label":"A", "x":4, "y":2}, {"label":"S", "x":5, "y":2}, {"label":"D", "x":6, "y":2}, {"label":"F", "x":7, "y":2}, {"label":"G", "x":8, "y":2}, {"label":"H", "x":9, "y":2}, {"label":"J", "x":10, "y":2}, {"label":"K", "x":11, "y":2}, {"label":"L", "x":12, "y":2}, {"label":":", "x":13, "y":2}, {"label":"\"", "x":14, "y":2}, {"label":"Enter", "x":15, "y":2, "w":2.25}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2.25, "y":3, "w":2.25}, {"label":"Z", "x":4.5, "y":3}, {"label":"X", "x":5.5, "y":3}, {"label":"C", "x":6.5, "y":3}, {"label":"V", "x":7.5, "y":3}, {"label":"B", "x":8.5, "y":3}, {"label":"N", "x":9.5, "y":3}, {"label":"M", "x":10.5, "y":3}, {"label":"<", "x":11.5, "y":3}, {"label":">", "x":12.5, "y":3}, {"label":"?", "x":13.5, "y":3}, {"label":"Shift", "x":14.5, "y":3, "w":2.75}, {"label":"\u2191", "x":17.5, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2.25, "y":4, "w":1.25}, {"label":"GUI", "x":3.5, "y":4, "w":1.25}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":6.25}, {"label":"Alt", "x":12.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.25}, {"label":"Fn", "x":14.75, "y":4, "w":1.25}, {"label":"\u2190", "x":16.5, "y":4}, {"label":"\u2193", "x":17.5, "y":4}, {"label":"\u2192", "x":18.5, "y":4}]
13 },
14 "LAYOUT_split_rshift": {
15 "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2.25, "y":0}, {"label":"!", "x":3.25, "y":0}, {"label":"@", "x":4.25, "y":0}, {"label":"#", "x":5.25, "y":0}, {"label":"$", "x":6.25, "y":0}, {"label":"%", "x":7.25, "y":0}, {"label":"^", "x":8.25, "y":0}, {"label":"&", "x":9.25, "y":0}, {"label":"*", "x":10.25, "y":0}, {"label":"(", "x":11.25, "y":0}, {"label":")", "x":12.25, "y":0}, {"label":"_", "x":13.25, "y":0}, {"label":"+", "x":14.25, "y":0}, {"label":"Backspace", "x":15.25, "y":0, "w":2}, {"label":"Insert", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2.25, "y":1, "w":1.5}, {"label":"Q", "x":3.75, "y":1}, {"label":"W", "x":4.75, "y":1}, {"label":"E", "x":5.75, "y":1}, {"label":"R", "x":6.75, "y":1}, {"label":"T", "x":7.75, "y":1}, {"label":"Y", "x":8.75, "y":1}, {"label":"U", "x":9.75, "y":1}, {"label":"I", "x":10.75, "y":1}, {"label":"O", "x":11.75, "y":1}, {"label":"P", "x":12.75, "y":1}, {"label":"{", "x":13.75, "y":1}, {"label":"}", "x":14.75, "y":1}, {"label":"|", "x":15.75, "y":1, "w":1.5}, {"label":"Delete", "x":17.5, "y":1}, {"label":"PgDn", "x":18.5, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, {"label":"A", "x":4, "y":2}, {"label":"S", "x":5, "y":2}, {"label":"D", "x":6, "y":2}, {"label":"F", "x":7, "y":2}, {"label":"G", "x":8, "y":2}, {"label":"H", "x":9, "y":2}, {"label":"J", "x":10, "y":2}, {"label":"K", "x":11, "y":2}, {"label":"L", "x":12, "y":2}, {"label":":", "x":13, "y":2}, {"label":"\"", "x":14, "y":2}, {"label":"Enter", "x":15, "y":2, "w":2.25}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2.25, "y":3, "w":2.25}, {"label":"Z", "x":4.5, "y":3}, {"label":"X", "x":5.5, "y":3}, {"label":"C", "x":6.5, "y":3}, {"label":"V", "x":7.5, "y":3}, {"label":"B", "x":8.5, "y":3}, {"label":"N", "x":9.5, "y":3}, {"label":"M", "x":10.5, "y":3}, {"label":"<", "x":11.5, "y":3}, {"label":">", "x":12.5, "y":3}, {"label":"?", "x":13.5, "y":3}, {"label":"Shift", "x":14.5, "y":3, "w":1.75}, {"label":"Fn", "x":16.25, "y":3}, {"label":"\u2191", "x":17.5, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2.25, "y":4, "w":1.25}, {"label":"GUI", "x":3.5, "y":4, "w":1.25}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":6.25}, {"label":"Alt", "x":12.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.25}, {"label":"Fn", "x":14.75, "y":4, "w":1.25}, {"label":"\u2190", "x":16.5, "y":4}, {"label":"\u2193", "x":17.5, "y":4}, {"label":"\u2192", "x":18.5, "y":4}]
16 },
17 "LAYOUT_iso": {
18 "layout": [{"label":"F1", "x":0, "y":0}, {"label":"F2", "x":1, "y":0}, {"label":"Esc", "x":2.25, "y":0}, {"label":"!", "x":3.25, "y":0}, {"label":"@", "x":4.25, "y":0}, {"label":"#", "x":5.25, "y":0}, {"label":"$", "x":6.25, "y":0}, {"label":"%", "x":7.25, "y":0}, {"label":"^", "x":8.25, "y":0}, {"label":"&", "x":9.25, "y":0}, {"label":"*", "x":10.25, "y":0}, {"label":"(", "x":11.25, "y":0}, {"label":")", "x":12.25, "y":0}, {"label":"_", "x":13.25, "y":0}, {"label":"+", "x":14.25, "y":0}, {"label":"Backspace", "x":15.25, "y":0, "w":2}, {"label":"Insert", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "y":0}, {"label":"F3", "x":0, "y":1}, {"label":"F4", "x":1, "y":1}, {"label":"Tab", "x":2.25, "y":1, "w":1.5}, {"label":"Q", "x":3.75, "y":1}, {"label":"W", "x":4.75, "y":1}, {"label":"E", "x":5.75, "y":1}, {"label":"R", "x":6.75, "y":1}, {"label":"T", "x":7.75, "y":1}, {"label":"Y", "x":8.75, "y":1}, {"label":"U", "x":9.75, "y":1}, {"label":"I", "x":10.75, "y":1}, {"label":"O", "x":11.75, "y":1}, {"label":"P", "x":12.75, "y":1}, {"label":"{", "x":13.75, "y":1}, {"label":"}", "x":14.75, "y":1}, {"label":"Enter", "x":16, "y":1, "w":1.25, "h":2}, {"label":"Delete", "x":17.5, "y":1}, {"label":"PgDn", "x":18.5, "y":1}, {"label":"F5", "x":0, "y":2}, {"label":"F6", "x":1, "y":2}, {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, {"label":"A", "x":4, "y":2}, {"label":"S", "x":5, "y":2}, {"label":"D", "x":6, "y":2}, {"label":"F", "x":7, "y":2}, {"label":"G", "x":8, "y":2}, {"label":"H", "x":9, "y":2}, {"label":"J", "x":10, "y":2}, {"label":"K", "x":11, "y":2}, {"label":"L", "x":12, "y":2}, {"label":":", "x":13, "y":2}, {"label":"@", "x":14, "y":2}, {"label":"~", "x":15, "y":2}, {"label":"F7", "x":0, "y":3}, {"label":"F8", "x":1, "y":3}, {"label":"Shift", "x":2.25, "y":3, "w":1.25}, {"label":"|", "x":3.5, "y":3}, {"label":"Z", "x":4.5, "y":3}, {"label":"X", "x":5.5, "y":3}, {"label":"C", "x":6.5, "y":3}, {"label":"V", "x":7.5, "y":3}, {"label":"B", "x":8.5, "y":3}, {"label":"N", "x":9.5, "y":3}, {"label":"M", "x":10.5, "y":3}, {"label":"<", "x":11.5, "y":3}, {"label":">", "x":12.5, "y":3}, {"label":"?", "x":13.5, "y":3}, {"label":"Shift", "x":14.5, "y":3, "w":2.75}, {"label":"\u2191", "x":17.5, "y":3}, {"label":"F9", "x":0, "y":4}, {"label":"F10", "x":1, "y":4}, {"label":"Ctrl", "x":2.25, "y":4, "w":1.25}, {"label":"GUI", "x":3.5, "y":4, "w":1.25}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":6.25}, {"label":"Alt", "x":12.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.25}, {"label":"Fn", "x":14.75, "y":4, "w":1.25}, {"label":"\u2190", "x":16.5, "y":4}, {"label":"\u2193", "x":17.5, "y":4}, {"label":"\u2192", "x":18.5, "y":4}]
19 }
20 }
21}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
index 81ab4338d..a92a506c1 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
@@ -1,111 +1,99 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H
2 2
3enum keymap_layout { 3enum keymap_layout {
4 VANILLA = 0, // matches MF68 layout 4 VANILLA = 0, // matches MF68 layout
5 FUNC, // 0x02 5 FUNC,
6 SETTINGS, // 0x04 6 SETTINGS
7}; 7};
8 8
9// Colors of the layer indicator LED 9// Colors of the layer indicator LED
10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer 10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
11const Layer_Info layer_info[] = { 11const Layer_Info layer_info[] = {
12 // Layer Mask Red Green Blue 12 // Layer Mask Red Green Blue
13 {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green 13 { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
14 {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue 14 { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
15 {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta 15 { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
16 {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white 16 { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } } // unknown layer - REQUIRED - white
17}; 17};
18 18
19
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 /* Keymap VANILLA: (Base Layer) Default Layer 20 /* Keymap VANILLA: (Base Layer) Default Layer
23 * ,---------. ,------------------------------------------------------------. ,---------. 21 * ,---------. ,------------------------------------------------------------. ,---------.
24 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp| 22 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
25 * |---------| |------------------------------------------------------------| |---------| 23 * |---------| |------------------------------------------------------------| |---------|
26 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn| 24 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn|
27 * |---------| |------------------------------------------------------------| `---------' 25 * |---------| |------------------------------------------------------------| `---------'
28 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | 26 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '| Return |
29 * |---------| |------------------------------------------------------------| ,----. 27 * |---------| |------------------------------------------------------------| ,----.
30 * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | 28 * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
31 * |---------| |-------------------------------------------------------------------------. 29 * |---------| |-------------------------------------------------------------------------.
32 * | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig | 30 * | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig |
33 * `---------' `------------------------------------------------------' `-------------' 31 * `---------' `------------------------------------------------------' `-------------'
34 */ 32 */
35 [VANILLA] = LAYOUT( 33 [VANILLA] = LAYOUT(
36 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP, \ 34 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
37 KC_F3, KC_F4, 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_PGDN, \ 35 KC_F3, KC_F4, 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_PGDN,
38 KC_F5, KC_F6, 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, \ 36 KC_F5, KC_F6, 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,
39 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ 37 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
40 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT \ 38 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
41 ), 39 ),
42 40
43 /* Keymap FUNCTION: Function Layer 41 /* Keymap FUNCTION: Function Layer
44 * ,---------. ,-------------------------------------------------------------. ,---------. 42 * ,---------. ,-------------------------------------------------------------. ,---------.
45 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home| 43 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
46 * |---------| |-------------------------------------------------------------| |---------| 44 * |---------| |-------------------------------------------------------------| |---------|
47 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End | 45 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
48 * |---------| |-------------------------------------------------------------| `---------' 46 * |---------| |-------------------------------------------------------------| `---------'
49 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | | 47 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
50 * |---------| |-------------------------------------------------------------| ,----. 48 * |---------| |-------------------------------------------------------------| ,----.
51 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | 49 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
52 * |---------| |--------------------------------------------------------------------------. 50 * |---------| |--------------------------------------------------------------------------.
53 * | | | |Ctrl|Win |Alt | Enter |Alt |Func |CTRL | |Lft| Dn |Rig | 51 * | | | |Ctrl|Win |Alt | Enter |Alt |Func |CTRL | |Lft| Dn |Rig |
54 * `---------' `------------------------------------------------------' `-------------' 52 * `---------' `------------------------------------------------------' `-------------'
55 */ 53 */
56 [FUNC] = LAYOUT( 54 [FUNC] = LAYOUT(
57 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, KC_HOME, \ 55 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, KC_HOME,
58 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, \ 56 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END,
59 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, \ 57 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
60 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, \ 58 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
61 _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______ \ 59 _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______
62 ), 60 ),
63 61
64 /* Keymap SETTINGS: Settings Layer 62 /* Keymap SETTINGS: Settings Layer
65 * ,---------. ,-------------------------------------------------------------. ,-------------. 63 * ,---------. ,-------------------------------------------------------------. ,-------------.
66 * | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| 64 * | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
67 * |---------| |-------------------------------------------------------------| |-------------| 65 * |---------| |-------------------------------------------------------------| |-------------|
68 * | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| 66 * | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
69 * |---------| |-------------------------------------------------------------| `-------------' 67 * |---------| |-------------------------------------------------------------| `-------------'
70 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST | 68 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
71 * |---------| |-------------------------------------------------------------| ,----. 69 * |---------| |-------------------------------------------------------------| ,----.
72 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+| 70 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
73 * |---------| |-------------------------------------------------------------------------. 71 * |---------| |-------------------------------------------------------------------------.
74 * | | | | | | | | | | | |Sat-|Hue-|Sat+| 72 * | | | | | | | | | | | |Sat-|Hue-|Sat+|
75 * `---------' `--------------------------------------------------------' `--------------' 73 * `---------' `--------------------------------------------------------' `--------------'
76 */ 74 */
77 [SETTINGS] = LAYOUT( 75 [SETTINGS] = LAYOUT(
78 XXXXXXX, XXXXXXX, KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, \ 76 XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
79 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, \ 77 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD,
80 XXXXXXX, XXXXXXX, AU_TOG, KC_FN1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \ 78 XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
81 XXXXXXX, XXXXXXX, KC_FN5, KC_FN2, KC_FN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, \ 79 XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
82 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI \ 80 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
83 ), 81 )
84}; 82};
85 83
86const uint16_t PROGMEM fn_actions[] = { 84const uint16_t PROGMEM fn_actions[] = {
87 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers 85 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
88 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click 86 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
89 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click 87 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
90 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click 88 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
91 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click 89 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
92 ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click 90 ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
93 }; 91};
94 92
95void matrix_init_user(void) { 93void matrix_init_user(void) {
96 // This keymap only has a single base layer, so reset the default if needed 94 // This keymap only has a single base layer, so reset the default if needed
97 if(eeconfig_read_default_layer() > 1){ 95 if (eeconfig_read_default_layer() > 1) {
98 eeconfig_update_default_layer(1); 96 eeconfig_update_default_layer(1);
99 default_layer_set(1); 97 default_layer_set(1);
100 } 98 }
101} 99}
102
103void matrix_scan_user(void) {
104}
105
106bool process_record_user(uint16_t keycode, keyrecord_t *record) {
107 return true;
108}
109
110void led_set_user(uint8_t usb_led) {
111}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk
deleted file mode 100644
index 9b8038dd3..000000000
--- a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk
+++ /dev/null
@@ -1,32 +0,0 @@
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
6BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
7MOUSEKEY_ENABLE = no # Mouse keys
8EXTRAKEY_ENABLE = yes # Audio control and System control
9CONSOLE_ENABLE = no # Console for debug
10COMMAND_ENABLE = no # Commands for debug and configuration
11NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
12BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
13MIDI_ENABLE = no # MIDI controls
14AUDIO_ENABLE = yes # Audio output on port C6
15UNICODE_ENABLE = no # Unicode
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
18RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
19SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
20TAP_DANCE_ENABLE = no
21
22ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
23WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
24CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
25
26
27# Override the LFK78 hardware version:
28#
29# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
30# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
31# J - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
32# LFK_REV = J
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
index 806f402e8..3dbc77557 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
@@ -2,112 +2,98 @@
2 2
3enum keymap_layout { 3enum keymap_layout {
4 VANILLA = 0, // matches MF68 layout 4 VANILLA = 0, // matches MF68 layout
5 FUNC, // 0x02 5 FUNC,
6 SETTINGS, // 0x04 6 SETTINGS
7}; 7};
8 8
9// Colors of the layer indicator LED 9// Colors of the layer indicator LED
10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer 10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
11const Layer_Info layer_info[] = { 11const Layer_Info layer_info[] = {
12 // Layer Mask Red Green Blue 12 // Layer Mask Red Green Blue
13 {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green 13 { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
14 {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue 14 { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
15 {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta 15 { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
16 {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white 16 { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } } // unknown layer - REQUIRED - white
17}; 17};
18 18
19
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 /* Keymap VANILLA: (Base Layer) Default Layer 20 /* Keymap VANILLA: (Base Layer) Default Layer
23 * ,---------. ,------------------------------------------------------------. ,---------. 21 * ,---------. ,------------------------------------------------------------. ,---------.
24 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp| 22 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
25 * |---------| |------------------------------------------------------------| |---------| 23 * |---------| |------------------------------------------------------------| |---------|
26 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del|PgDn| 24 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del|PgDn|
27 * |---------| |--------------------------------------------------------. | `---------' 25 * |---------| |--------------------------------------------------------. | `---------'
28 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | | 26 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |
29 * |---------| |-----------------------------------------------------------| ,----. 27 * |---------| |-----------------------------------------------------------| ,----.
30 * | F7 | F8 | |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | 28 * | F7 | F8 | |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
31 * |---------| |-------------------------------------------------------------------------. 29 * |---------| |-------------------------------------------------------------------------.
32 * | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig | 30 * | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig |
33 * `---------' `------------------------------------------------------' `-------------' 31 * `---------' `------------------------------------------------------' `-------------'
34 */ 32 */
35 [VANILLA] = LAYOUT_iso( 33 [VANILLA] = LAYOUT_iso(
36 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP, \ 34 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
37 KC_F3, KC_F4, 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_ENT, KC_DEL, KC_PGDN, \ 35 KC_F3, KC_F4, 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_ENT, KC_DEL, KC_PGDN,
38 KC_F5, KC_F6, 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_NUHS, \ 36 KC_F5, KC_F6, 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_NUHS,
39 KC_F7, KC_F8, 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, \ 37 KC_F7, KC_F8, 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,
40 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT \ 38 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
41 ), 39 ),
42 40
43 /* Keymap FUNCTION: Function Layer 41 /* Keymap FUNCTION: Function Layer
44 * ,---------. ,-------------------------------------------------------------. ,---------. 42 * ,---------. ,-------------------------------------------------------------. ,---------.
45 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home| 43 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
46 * |---------| |-------------------------------------------------------------| |---------| 44 * |---------| |-------------------------------------------------------------| |---------|
47 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End | 45 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
48 * |---------| |-------------------------------------------------------------| `---------' 46 * |---------| |-------------------------------------------------------------| `---------'
49 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | | 47 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
50 * |---------| |-------------------------------------------------------------| ,----. 48 * |---------| |-------------------------------------------------------------| ,----.
51 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | 49 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
52 * |---------| |--------------------------------------------------------------------------. 50 * |---------| |--------------------------------------------------------------------------.
53 * | | | |Ctrl|Win |Alt | PgD |Alt |Func |CTRL | |Lft| Dn |Rig | 51 * | | | |Ctrl|Win |Alt | PgD |Alt |Func |CTRL | |Lft| Dn |Rig |
54 * `---------' `------------------------------------------------------' `-------------' 52 * `---------' `------------------------------------------------------' `-------------'
55 */ 53 */
56 [FUNC] = LAYOUT( 54 [FUNC] = LAYOUT_iso(
57 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, KC_HOME, \ 55 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, KC_HOME,
58 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, \ 56 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END,
59 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, \ 57 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
60 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, \ 58 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, TG(SETTINGS), _______,
61 _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \ 59 _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______
62 ), 60 ),
63 61
64 /* Keymap SETTINGS: Settings Layer 62 /* Keymap SETTINGS: Settings Layer
65 * ,---------. ,-------------------------------------------------------------. ,-------------. 63 * ,---------. ,-------------------------------------------------------------. ,-------------.
66 * | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| 64 * | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
67 * |---------| |-------------------------------------------------------------| |-------------| 65 * |---------| |-------------------------------------------------------------| |-------------|
68 * | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| 66 * | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
69 * |---------| |-------------------------------------------------------------| `-------------' 67 * |---------| |-------------------------------------------------------------| `-------------'
70 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST | 68 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
71 * |---------| |-------------------------------------------------------------| ,----. 69 * |---------| |-------------------------------------------------------------| ,----.
72 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+| 70 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
73 * |---------| |-------------------------------------------------------------------------. 71 * |---------| |-------------------------------------------------------------------------.
74 * | | | | | | | | | | | |Sat-|Hue-|Sat+| 72 * | | | | | | | | | | | |Sat-|Hue-|Sat+|
75 * `---------' `--------------------------------------------------------' `--------------' 73 * `---------' `--------------------------------------------------------' `--------------'
76 */ 74 */
77 [SETTINGS] = LAYOUT( 75 [SETTINGS] = LAYOUT_iso(
78 XXXXXXX, XXXXXXX, KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, \ 76 XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
79 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, \ 77 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD,
80 XXXXXXX, XXXXXXX, AU_TOG, KC_FN1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \ 78 XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
81 XXXXXXX, XXXXXXX, KC_FN5, KC_FN2, KC_FN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, \ 79 XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
82 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI \ 80 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
83 ), 81 )
84}; 82};
85 83
86const uint16_t PROGMEM fn_actions[] = { 84const uint16_t PROGMEM fn_actions[] = {
87 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers 85 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
88 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click 86 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
89 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click 87 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
90 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click 88 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
91 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click 89 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
92 ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click 90 ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
93 }; 91};
94 92
95void matrix_init_user(void) { 93void matrix_init_user(void) {
96 // This keymap only has a single base layer, so reset the default if needed 94 // This keymap only has a single base layer, so reset the default if needed
97 if(eeconfig_read_default_layer() > 1){ 95 if (eeconfig_read_default_layer() > 1) {
98 eeconfig_update_default_layer(1); 96 eeconfig_update_default_layer(1);
99 default_layer_set(1); 97 default_layer_set(1);
100 } 98 }
101} 99}
102
103void matrix_scan_user(void) {
104
105}
106
107bool process_record_user(uint16_t keycode, keyrecord_t *record) {
108 return true;
109}
110
111void led_set_user(uint8_t usb_led) {
112
113}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/readme.md b/keyboards/lfkeyboards/lfk78/keymaps/iso/readme.md
index 85b7b1a8d..3b9acefbf 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/readme.md
+++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/readme.md
@@ -1 +1 @@
# The default keymap for bluepad # The default ISO keymap for LFK78
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk
deleted file mode 100644
index 04fa7d81b..000000000
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk
+++ /dev/null
@@ -1,41 +0,0 @@
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
6BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
7MOUSEKEY_ENABLE = no # Mouse keys
8EXTRAKEY_ENABLE = yes # Audio control and System control
9CONSOLE_ENABLE = yes # Console for debug
10COMMAND_ENABLE = yes # Commands for debug and configuration
11NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
12BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
13MIDI_ENABLE = no # MIDI controls
14AUDIO_ENABLE = yes # Audio output on port C6
15UNICODE_ENABLE = no # Unicode
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
18RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
19SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
20TAP_DANCE_ENABLE = no
21
22ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
23WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
24
25
26
27# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
28# #
29# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
30# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
31# #
32# # Set to B, C or D
33# LFK_REV = D
34
35# ifeq ($(LFK_REV), B)
36# MCU = atmega32u4
37# else
38# MCU = at90usb1286
39# endif
40# OPT_DEFS += -DLFK_REV_$(LFK_REV)
41# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
index 35d17805c..da7593d39 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
@@ -2,110 +2,98 @@
2 2
3enum keymap_layout { 3enum keymap_layout {
4 VANILLA = 0, // matches MF68 layout 4 VANILLA = 0, // matches MF68 layout
5 FUNC, // 0x02 5 FUNC,
6 SETTINGS, // 0x04 6 SETTINGS
7}; 7};
8 8
9// Colors of the layer indicator LED 9// Colors of the layer indicator LED
10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer 10// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
11const Layer_Info layer_info[] = { 11const Layer_Info layer_info[] = {
12 // Layer Mask Red Green Blue 12 // Layer Mask Red Green Blue
13 {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green 13 { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
14 {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue 14 { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
15 {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta 15 { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
16 {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white 16 { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } } // unknown layer - REQUIRED - white
17}; 17};
18 18
19
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 /* Keymap VANILLA: (Base Layer) Default Layer 20 /* Keymap VANILLA: (Base Layer) Default Layer
23 * ,---------. ,------------------------------------------------------------. ,---------. 21 * ,---------. ,------------------------------------------------------------. ,---------.
24 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = | / | ` | | Ins|PgUp| 22 * | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = | / | ` | | Ins|PgUp|
25 * |---------| |------------------------------------------------------------| |---------| 23 * |---------| |------------------------------------------------------------| |---------|
26 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backsp| | Del|PgDn| 24 * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backsp| | Del|PgDn|
27 * |---------| |------------------------------------------------------------| `---------' 25 * |---------| |------------------------------------------------------------| `---------'
28 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | 26 * | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
29 * |---------| |------------------------------------------------------------| ,----. 27 * |---------| |------------------------------------------------------------| ,----.
30 * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | 28 * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
31 * |---------| |-------------------------------------------------------------------------. 29 * |---------| |-------------------------------------------------------------------------.
32 * | F9 | F10| |Ctrl|Alt |Cmd | Space |Cmd |Ctrl|Func | |Lft| Dn |Rig | 30 * | F9 | F10| |Ctrl|Alt |Cmd | Space |Cmd |Ctrl|Func | |Lft| Dn |Rig |
33 * `---------' `------------------------------------------------------' `-------------' 31 * `---------' `------------------------------------------------------' `-------------'
34 */ 32 */
35 [VANILLA] = LAYOUT_split_bs( 33 [VANILLA] = LAYOUT_split_bs(
36 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_INS, KC_PGUP, \ 34 KC_F1, KC_F2, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_INS, KC_PGUP,
37 KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, KC_PGDN, \ 35 KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, KC_PGDN,
38 KC_F5, KC_F6, 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, \ 36 KC_F5, KC_F6, 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,
39 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \ 37 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
40 KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT \ 38 KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT
41 ), 39 ),
42 40
43 /* Keymap FUNCTION: Function Layer 41 /* Keymap FUNCTION: Function Layer
44 * ,---------. ,-------------------------------------------------------------. ,---------. 42 * ,---------. ,-------------------------------------------------------------. ,---------.
45 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del | | Ins|Home| 43 * | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del | | Ins|Home|
46 * |---------| |-------------------------------------------------------------| |---------| 44 * |---------| |-------------------------------------------------------------| |---------|
47 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End | 45 * | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
48 * |---------| |-------------------------------------------------------------| `---------' 46 * |---------| |-------------------------------------------------------------| `---------'
49 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | | 47 * | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
50 * |---------| |-------------------------------------------------------------| ,----. 48 * |---------| |-------------------------------------------------------------| ,----.
51 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | 49 * | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
52 * |---------| |--------------------------------------------------------------------------. 50 * |---------| |--------------------------------------------------------------------------.
53 * | | | |Ctrl|Alt |Cmd | Enter |Alt |Func |CTRL | |Lft| Dn |Rig | 51 * | | | |Ctrl|Alt |Cmd | Enter |Alt |Func |CTRL | |Lft| Dn |Rig |
54 * `---------' `------------------------------------------------------' `-------------' 52 * `---------' `------------------------------------------------------' `-------------'
55 */ 53 */
56 [FUNC] = LAYOUT_split_bs( 54 [FUNC] = LAYOUT_split_bs(
57 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, _______, KC_HOME, \ 55 _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, _______, KC_HOME,
58 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, \ 56 _______, _______, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END,
59 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, \ 57 _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
60 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, \ 58 _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______,
61 _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______ \ 59 _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______
62 ), 60 ),
63 61
64 /* Keymap SETTINGS: Settings Layer 62 /* Keymap SETTINGS: Settings Layer
65 * ,---------. ,-------------------------------------------------------------. ,-------------. 63 * ,---------. ,-------------------------------------------------------------. ,-------------.
66 * | | | |LayClr| | | | | | | | | | |BL-|BL+| | | |RGB Tog |Val+| 64 * | | | |LayClr| | | | | | | | | | |BL-|BL+| | | |RGB Tog |Val+|
67 * |---------| |-------------------------------------------------------------| |-------------| 65 * |---------| |-------------------------------------------------------------| |-------------|
68 * | | | |MuMode | | | | | | | | | | | | |BLTogl| |RGB Mode|Val-| 66 * | | | |MuMode | | | | | | | | | | | | |BLTogl| |RGB Mode|Val-|
69 * |---------| |-------------------------------------------------------------| `-------------' 67 * |---------| |-------------------------------------------------------------| `-------------'
70 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST | 68 * | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
71 * |---------| |-------------------------------------------------------------| ,----. 69 * |---------| |-------------------------------------------------------------| ,----.
72 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+| 70 * | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
73 * |---------| |-------------------------------------------------------------------------. 71 * |---------| |-------------------------------------------------------------------------.
74 * | | | | | | | | | | | |Sat-|Hue-|Sat+| 72 * | | | | | | | | | | | |Sat-|Hue-|Sat+|
75 * `---------' `--------------------------------------------------------' `--------------' 73 * `---------' `--------------------------------------------------------' `--------------'
76 */ 74 */
77 [SETTINGS] = LAYOUT_split_bs( 75 [SETTINGS] = LAYOUT_split_bs(
78 XXXXXXX, XXXXXXX, KC_FN0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI, \ 76 XXXXXXX, XXXXXXX, F(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI,
79 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_MOD, RGB_VAD, \ 77 XXXXXXX, XXXXXXX, MU_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, RGB_MOD, RGB_VAD,
80 XXXXXXX, XXXXXXX, AU_TOG, KC_FN1, KC_FN3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, \ 78 XXXXXXX, XXXXXXX, AU_TOG, F(1), F(3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
81 XXXXXXX, XXXXXXX, KC_FN5, KC_FN2, KC_FN4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, \ 79 XXXXXXX, XXXXXXX, F(5), F(2), F(4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI,
82 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI \ 80 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI
83 ), 81 )
84}; 82};
85 83
86const uint16_t PROGMEM fn_actions[] = { 84const uint16_t PROGMEM fn_actions[] = {
87 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers 85 ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
88 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click 86 ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
89 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click 87 ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
90 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click 88 ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
91 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click 89 ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
92 ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click 90 ACTION_FUNCTION(LFK_CLICK_TOGGLE) // FN5 - Toggle audio click
93 }; 91};
94 92
95void matrix_init_user(void) { 93void matrix_init_user(void) {
96 // This keymap only has a single base layer, so reset the default if needed 94 // This keymap only has a single base layer, so reset the default if needed
97 if(eeconfig_read_default_layer() > 1){ 95 if (eeconfig_read_default_layer() > 1) {
98 eeconfig_update_default_layer(1); 96 eeconfig_update_default_layer(1);
99 default_layer_set(1); 97 default_layer_set(1);
100 } 98 }
101} 99}
102
103void matrix_scan_user(void) {
104}
105
106bool process_record_user(uint16_t keycode, keyrecord_t *record) {
107 return true;
108}
109
110void led_set_user(uint8_t usb_led) {
111}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk
deleted file mode 100644
index e7f035b75..000000000
--- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk
+++ /dev/null
@@ -1,31 +0,0 @@
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
6BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
7MOUSEKEY_ENABLE = no # Mouse keys
8EXTRAKEY_ENABLE = yes # Audio control and System control
9CONSOLE_ENABLE = no # Console for debug
10COMMAND_ENABLE = no # Commands for debug and configuration
11NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
12BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
13MIDI_ENABLE = no # MIDI controls
14AUDIO_ENABLE = yes # Audio output on port C6
15UNICODE_ENABLE = no # Unicode
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
17RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
18RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
19SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
20TAP_DANCE_ENABLE = no
21
22ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
23WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
24CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
25
26# Override the LFK78 hardware version:
27#
28# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
29# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
30# J - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
31# LFK_REV = J
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.c b/keyboards/lfkeyboards/lfk78/lfk78.c
index 60b7ab4ce..cf49a5cfd 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.c
+++ b/keyboards/lfkeyboards/lfk78/lfk78.c
@@ -1,13 +1,11 @@
1#include <avr/sfr_defs.h> 1#include "lfk78.h"
2
2#include <avr/timer_avr.h> 3#include <avr/timer_avr.h>
3#include <avr/wdt.h> 4#include <avr/wdt.h>
4#include "lfk78.h" 5#include <audio/audio.h>
5#include "keymap.h"
6#include "issi.h" 6#include "issi.h"
7#include "TWIlib.h" 7#include "TWIlib.h"
8#include "lighting.h" 8#include "lighting.h"
9#include "debug.h"
10#include <audio/audio.h>
11 9
12uint16_t click_hz = CLICK_HZ; 10uint16_t click_hz = CLICK_HZ;
13uint16_t click_time = CLICK_MS; 11uint16_t click_time = CLICK_MS;
@@ -15,85 +13,91 @@ uint8_t click_toggle = CLICK_ENABLED;
15 13
16__attribute__((weak)) 14__attribute__((weak))
17const Layer_Info layer_info[] = { 15const Layer_Info layer_info[] = {
18 // Layer Mask Red Green Blue 16 // Layer Mask Red Green Blue
19 {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green 17 { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
20 {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue 18 { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
21 {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta 19 { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
22 {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white 20 { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } } // unknown layer - REQUIRED - white
23}; 21};
24 22
25void matrix_init_kb(void) 23void matrix_init_kb(void) {
26{
27 matrix_init_user(); 24 matrix_init_user();
28 25
29 // Configure the Layer LED 26 // Configure the Layer LED
30 // Set up 16 bit PWM: Fast PWM, mode 15, inverted 27 // Set up 16 bit PWM: Fast PWM, mode 14, inverted
31 TCCR1A = 0b11111110; 28 TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0) | _BV(COM1C1) | _BV(COM1C0) | _BV(WGM11);
32 TCCR1B = 0b00011001; 29 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
33 ICR1 = 0xFFFF; 30 ICR1 = 0xFFFF;
34 // PWM values - 0xFFFF = off, 0x0000 = max 31 // PWM values - 0xFFFF = off, 0x0000 = max
35 OCR1C = 0x0000; // B7 - Blue
36 OCR1B = 0x0000; // B6 - Green
37 OCR1A = 0x0FFF; // B5 - Red 32 OCR1A = 0x0FFF; // B5 - Red
33 OCR1B = 0x0000; // B6 - Green
34 OCR1C = 0x0000; // B7 - Blue
38 // Set as output 35 // Set as output
39 DDRB |= 0b11100000; 36 setPinOutput(B5);
37 setPinOutput(B6);
38 setPinOutput(B7);
40 39
41#ifndef AUDIO_ENABLE 40#ifndef AUDIO_ENABLE
42 // If we're not using the audio pin, drive it low 41 // If we're not using the audio pin, drive it low
43 sbi(DDRC, 6); 42 setPinOutput(C6);
44 cbi(PORTC, 6); 43 writePinLow(C6);
45#endif 44#endif
46 45
47#ifdef ISSI_ENABLE 46#ifdef ISSI_ENABLE
48 issi_init(); 47 issi_init();
49#endif 48#endif
49
50#ifdef WATCHDOG_ENABLE 50#ifdef WATCHDOG_ENABLE
51 // This is done after turning the layer LED red, if we're caught in a loop 51 // This is done after turning the layer LED red, if we're caught in a loop
52 // we should get a flashing red light 52 // we should get a flashing red light
53 wdt_enable(WDTO_500MS); 53 wdt_enable(WDTO_500MS);
54#endif 54#endif
55
56} 55}
57 56
58void matrix_scan_kb(void) 57void matrix_scan_kb(void) {
59{
60#ifdef WATCHDOG_ENABLE 58#ifdef WATCHDOG_ENABLE
61 wdt_reset(); 59 wdt_reset();
62#endif 60#endif
61
63#ifdef ISSI_ENABLE 62#ifdef ISSI_ENABLE
64 // switch/underglow lighting update 63 // switch/underglow lighting update
65 static uint32_t issi_device = 0; 64 static uint32_t issi_device = 0;
66 static uint32_t twi_last_ready = 0; 65 static uint32_t twi_last_ready = 0;
67 if(twi_last_ready > 1000){ 66
68 // Its been way too long since the last ISSI update, reset the I2C bus and start again 67 if (twi_last_ready > 1000) {
68 // It's been way too long since the last ISSI update, reset the I2C bus and start again
69 dprintf("TWI failed to recover, TWI re-init\n"); 69 dprintf("TWI failed to recover, TWI re-init\n");
70 twi_last_ready = 0; 70 twi_last_ready = 0;
71 TWIInit(); 71 TWIInit();
72 force_issi_refresh(); 72 force_issi_refresh();
73 } 73 }
74 if(isTWIReady()){ 74
75 if (isTWIReady()) {
75 twi_last_ready = 0; 76 twi_last_ready = 0;
76 // If the i2c bus is available, kick off the issi update, alternate between devices 77 // If the i2c bus is available, kick off the issi update, alternate between devices
77 update_issi(issi_device, issi_device); 78 update_issi(issi_device, issi_device);
78 if(issi_device){ 79
80 if (issi_device) {
79 issi_device = 0; 81 issi_device = 0;
80 }else{ 82 } else {
81 issi_device = 3; 83 issi_device = 3;
82 } 84 }
83 }else{ 85 } else {
84 twi_last_ready++; 86 twi_last_ready++;
85 } 87 }
86#endif 88#endif
89
87 // Update layer indicator LED 90 // Update layer indicator LED
88 // 91 //
89 // Not sure how else to reliably do this... TMK has the 'hook_layer_change' 92 // Not sure how else to reliably do this... TMK has the 'hook_layer_change'
90 // but can't find QMK equiv 93 // but can't find QMK equiv
91 static uint32_t layer_indicator = -1; 94 static uint32_t layer_indicator = -1;
92 if(layer_indicator != layer_state){ 95
93 for(uint32_t i=0;; i++){ 96 if (layer_indicator != layer_state) {
97 for (uint32_t i = 0; ; i++) {
94 // the layer_info list should end with layer 0xFFFFFFFF 98 // the layer_info list should end with layer 0xFFFFFFFF
95 // it will break this out of the loop and define the unknown layer color 99 // it will break this out of the loop and define the unknown layer color
96 if((layer_info[i].layer == (layer_state & layer_info[i].mask)) || (layer_info[i].layer == 0xFFFFFFFF)){ 100 if ((layer_info[i].layer == (layer_state & layer_info[i].mask)) || (layer_info[i].layer == 0xFFFFFFFF)) {
97 OCR1A = layer_info[i].color.red; 101 OCR1A = layer_info[i].color.red;
98 OCR1B = layer_info[i].color.green; 102 OCR1B = layer_info[i].color.green;
99 OCR1C = layer_info[i].color.blue; 103 OCR1C = layer_info[i].color.blue;
@@ -102,14 +106,15 @@ void matrix_scan_kb(void)
102 } 106 }
103 } 107 }
104 } 108 }
109
105 matrix_scan_user(); 110 matrix_scan_user();
106} 111}
107 112
108void click(uint16_t freq, uint16_t duration){ 113void click(uint16_t freq, uint16_t duration) {
109#ifdef AUDIO_ENABLE 114#ifdef AUDIO_ENABLE
110 if(freq >= 100 && freq <= 20000 && duration < 100){ 115 if (freq >= 100 && freq <= 20000 && duration < 100) {
111 play_note(freq, 10); 116 play_note(freq, 10);
112 for (uint16_t i = 0; i < duration; i++){ 117 for (uint16_t i = 0; i < duration; i++) {
113 _delay_ms(1); 118 _delay_ms(1);
114 } 119 }
115 stop_all_notes(); 120 stop_all_notes();
@@ -117,35 +122,37 @@ void click(uint16_t freq, uint16_t duration){
117#endif 122#endif
118} 123}
119 124
120bool process_record_kb(uint16_t keycode, keyrecord_t* record) 125bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
121{ 126 if (click_toggle && record->event.pressed) {
122 if (click_toggle && record->event.pressed){
123 click(click_hz, click_time); 127 click(click_hz, click_time);
124 } 128 }
129
125 if (keycode == RESET) { 130 if (keycode == RESET) {
126 reset_keyboard_kb(); 131 reset_keyboard_kb();
127 } else {
128 } 132 }
133
129 return process_record_user(keycode, record); 134 return process_record_user(keycode, record);
130} 135}
131 136
132void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) 137void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) {
133{
134#ifdef AUDIO_ENABLE 138#ifdef AUDIO_ENABLE
135 int8_t sign = 1; 139 int8_t sign = 1;
136#endif 140#endif
137 if(id == LFK_ESC_TILDE){ 141
142 if (id == LFK_ESC_TILDE) {
138 // Send ~ on shift-esc 143 // Send ~ on shift-esc
139 void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key; 144 void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
140 uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); 145 uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
141 if(layer_state == 0){ 146
147 if (layer_state == 0) {
142 method(shifted ? KC_GRAVE : KC_ESCAPE); 148 method(shifted ? KC_GRAVE : KC_ESCAPE);
143 }else{ 149 } else {
144 method(shifted ? KC_ESCAPE : KC_GRAVE); 150 method(shifted ? KC_ESCAPE : KC_GRAVE);
145 } 151 }
152
146 send_keyboard_report(); 153 send_keyboard_report();
147 }else if(event->event.pressed){ 154 } else if (event->event.pressed) {
148 switch(id){ 155 switch (id) {
149 case LFK_SET_DEFAULT_LAYER: 156 case LFK_SET_DEFAULT_LAYER:
150 // set/save the current base layer to eeprom, falls through to LFK_CLEAR 157 // set/save the current base layer to eeprom, falls through to LFK_CLEAR
151 eeconfig_update_default_layer(1UL << opt); 158 eeconfig_update_default_layer(1UL << opt);
@@ -161,24 +168,24 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
161#endif 168#endif
162#ifdef AUDIO_ENABLE 169#ifdef AUDIO_ENABLE
163 case LFK_CLICK_FREQ_LOWER: 170 case LFK_CLICK_FREQ_LOWER:
164 sign = -1; // continue to next statement 171 sign = -1; // continue to next statement
165 case LFK_CLICK_FREQ_HIGHER: 172 case LFK_CLICK_FREQ_HIGHER:
166 click_hz += sign * 100; 173 click_hz += sign * 100;
167 click(click_hz, click_time); 174 click(click_hz, click_time);
168 break; 175 break;
169 case LFK_CLICK_TOGGLE: 176 case LFK_CLICK_TOGGLE:
170 if(click_toggle){ 177 if (click_toggle) {
171 click_toggle = 0; 178 click_toggle = 0;
172 click(4000, 100); 179 click(4000, 100);
173 click(1000, 100); 180 click(1000, 100);
174 }else{ 181 } else {
175 click_toggle = 1; 182 click_toggle = 1;
176 click(1000, 100); 183 click(1000, 100);
177 click(4000, 100); 184 click(4000, 100);
178 } 185 }
179 break; 186 break;
180 case LFK_CLICK_TIME_SHORTER: 187 case LFK_CLICK_TIME_SHORTER:
181 sign = -1; // continue to next statement 188 sign = -1; // continue to next statement
182 case LFK_CLICK_TIME_LONGER: 189 case LFK_CLICK_TIME_LONGER:
183 click_time += sign; 190 click_time += sign;
184 click(click_hz, click_time); 191 click(click_hz, click_time);
@@ -194,49 +201,52 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
194 } 201 }
195} 202}
196 203
197void reset_keyboard_kb(){ 204void reset_keyboard_kb() {
198#ifdef WATCHDOG_ENABLE 205#ifdef WATCHDOG_ENABLE
199 MCUSR = 0; 206 MCUSR = 0;
200 wdt_disable(); 207 wdt_disable();
201 wdt_reset(); 208 wdt_reset();
202#endif 209#endif
210
203 OCR1A = 0x0000; // B5 - Red 211 OCR1A = 0x0000; // B5 - Red
204 OCR1B = 0x0FFF; // B6 - Green 212 OCR1B = 0x0FFF; // B6 - Green
205 OCR1C = 0x0FFF; // B7 - Blue 213 OCR1C = 0x0FFF; // B7 - Blue
214
206 reset_keyboard(); 215 reset_keyboard();
207} 216}
208 217
209void led_set_kb(uint8_t usb_led) 218void led_set_kb(uint8_t usb_led) {
210{
211 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here 219 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
212#ifdef ISSI_ENABLE 220#ifdef ISSI_ENABLE
213#ifdef CAPSLOCK_LED 221# ifdef CAPSLOCK_LED
214 if (usb_led & (1 << USB_LED_CAPS_LOCK)) { 222 if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
215 activateLED(0, 3, 7, 255); 223 activateLED(0, 3, 7, 255);
216 }else{ 224 } else {
217 activateLED(0, 3, 7, 0); 225 activateLED(0, 3, 7, 0);
218 } 226 }
219#endif // CAPSLOCK_LED 227# endif // CAPSLOCK_LED
220#endif // ISS_ENABLE 228#endif // ISS_ENABLE
229
221 led_set_user(usb_led); 230 led_set_user(usb_led);
222} 231}
223 232
224// LFK lighting info 233// LFK lighting info
225const uint8_t switch_matrices[] = {0, 1}; 234const uint8_t switch_matrices[] = { 0, 1 };
226const uint8_t rgb_matrices[] = {6, 7}; 235const uint8_t rgb_matrices[] = { 6, 7 };
227const uint8_t rgb_sequence[] = { 236const uint8_t rgb_sequence[] = {
228 12, 11, 10, 9, 16, 32, 31, 30, 28, 25, 24, 22, 21, 237 12, 11, 10, 9, 16, 32, 31, 30, 28, 25, 24, 22, 21,
229 20, 19, 18, 17, 1, 2, 3, 4, 5, 6, 7, 8, 14, 13 238 20, 19, 18, 17, 1, 2, 3, 4, 5, 6, 7, 8, 14, 13
230}; 239};
240
231// Maps switch LEDs from Row/Col to ISSI matrix. 241// Maps switch LEDs from Row/Col to ISSI matrix.
232// Value breakdown: 242// Value breakdown:
233// Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 243// Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
234// / \ ISSI Col | ISSI Row | 244// / \ ISSI Col | ISSI Row |
235// matrix idx 245// matrix idx
236const uint8_t switch_leds[MATRIX_ROWS][MATRIX_COLS] = 246const uint8_t switch_leds[MATRIX_ROWS][MATRIX_COLS] = LAYOUT(
237LAYOUT( 247 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91,
238 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 248 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0xA9, 0xA8, 0xA7, 0xA6, 0xA5, 0xA4, 0xA3, 0xA2, 0xA1,
239 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0xA9, 0xA8, 0xA7, 0xA6, 0xA5, 0xA4, 0xA3, 0xA2, 0xA1, 249 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0xB9, 0xB8, 0xB7, 0xB6, 0xB5, 0xB3,
240 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0xB9, 0xB8, 0xB7, 0xB6, 0xB5, 0xB3, 250 0x49, 0x48, 0x47, 0x45, 0x44, 0x43, 0x42, 0x41, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, 0xC4, 0xC2,
241 0x49, 0x48, 0x47, 0x45, 0x44, 0x43, 0x42, 0x41, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, 0xC4, 0xC2, 251 0x59, 0x58, 0x57, 0x56, 0x55, 0x51, 0xD6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE1
242 0x59, 0x58, 0x57, 0x56, 0x55, 0x51, 0xD6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE1); 252);
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.h b/keyboards/lfkeyboards/lfk78/lfk78.h
index 97a87ded5..711baddec 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.h
+++ b/keyboards/lfkeyboards/lfk78/lfk78.h
@@ -1,24 +1,15 @@
1#ifndef LFK78_H 1#pragma once
2#define LFK78_H
3
4/* if the kb.h file exists (because we're running from qmkbuilder) include it */
5#if __has_include("kb.h")
6#include "kb.h"
7#endif
8 2
9#include "quantum.h" 3#include "quantum.h"
10#include "matrix.h"
11#include <avr/sfr_defs.h>
12
13#ifndef cbi
14#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
15#endif
16 4
17#ifndef sbi 5#if defined(KEYBOARD_lfkeyboards_lfk78_revb)
18#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) 6# include "revb.h"
7#elif defined(KEYBOARD_lfkeyboards_lfk78_revc)
8# include "revc.h"
9#elif defined(KEYBOARD_lfkeyboards_lfk78_revj)
10# include "revj.h"
19#endif 11#endif
20 12
21
22typedef struct RGB_Color { 13typedef struct RGB_Color {
23 uint16_t red; 14 uint16_t red;
24 uint16_t green; 15 uint16_t green;
@@ -53,120 +44,3 @@ enum action_functions {
53 44
54void reset_keyboard_kb(void); 45void reset_keyboard_kb(void);
55void click(uint16_t freq, uint16_t duration); 46void click(uint16_t freq, uint16_t duration);
56
57// readability
58#define ___ KC_NO
59
60#ifdef LFK_REV_B
61 /* RevB Keymap */
62 // This a shortcut to help you visually see your layout.
63 /*
64 * ,---------. ,-----------------------------------------------------------------------. ,---------.
65 * | 0 | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | | 94 | 95 |
66 * |---------| |-----------------------------------------------------------------------| |---------|
67 * | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | | 96 | 97 |
68 * |---------| |-----------------------------------------------------------------------| `---------'
69 * | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 70 | 71 | 72 | 73 | 74 | 75 | 76 |
70 * |---------| |-----------------------------------------------------------------------| ,----.
71 * | 30 | 31 | | 32 | 33 | 34 | 35 | 36 | 37 | 80 | 81 | 82 | 83 | 84 | 85 | | 86 |
72 * |---------| |-------------------------------------------------------------------------------------.
73 * | 40 | 41 | | 42 | 43 | 44 | 45 | 46 | 47 | 90 | | 91 | 92 | 93 |
74 * `---------' `--------------------------------------------------------------------' `--------------'
75 */
76 // The first section contains all of the arguements
77 // The second converts the arguments into a two-dimensional array
78 #define LAYOUT( \
79 k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, k94, k95, \
80 k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k66, k67, k96, k97, \
81 k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, k76, \
82 k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
83 k40, k41, k42, k43, k44, k45, k46, k47, k90, k91, k92, k93 \
84 ) { \
85 { k00, k01, k02, k03, k04, k05, k06, k07 }, \
86 { k10, k11, k12, k13, k14, k15, k16, k17 }, \
87 { k20, k21, k22, k23, k24, k25, k26, k27 }, \
88 { k30, k31, k32, k33, k34, k35, k36, k37 }, \
89 { k40, k41, k42, k43, k44, k45, k46, k47 }, \
90 { k50, k51, k52, k53, k54, k55, k56, k57 }, \
91 { k60, k61, k62, k63, k64, k65, k66, k67 }, \
92 { k70, k71, k72, k73, k74, k75, k76, ___ }, \
93 { k80, k81, k82, k83, k84, k85, k86, ___ }, \
94 { k90, k91, k92, k93, k94, k95, k96, k97 }, \
95 }
96#else
97 /* RevC+ Keymap */
98 // This a shortcut to help you visually see your layout.
99 /*
100 * ,---------. ,-----------------------------------------------------------------------. ,---------.
101 * | 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G | | 1H | 1I |
102 * |---------| |-----------------------------------------------------------------------| |---------|
103 * | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F | 2G | | 2H | 2I |
104 * |---------| |-----------------------------------------------------------------------| `---------'
105 * | 31 | 32 | | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
106 * |---------| |-----------------------------------------------------------------------| ,----.
107 * | 41 | 42 | | 43 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | | 4H |
108 * |---------| |-------------------------------------------------------------------------------------.
109 * | 51 | 52 | | 53 | 54 | 55 | 59 | 5D | 5E | 5F | | 5G | 5H | 5I |
110 * `---------' `--------------------------------------------------------------------' `--------------'
111 */
112 // The first section contains all of the arguements
113 // The second converts the arguments into a two-dimensional array
114 #define LAYOUT( \
115 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
116 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
117 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
118 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
119 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
120 ) { \
121 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
122 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
123 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___, ___, ___ }, \
124 { k41, k42, k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___, k4H, ___ }, \
125 { k51, k52, k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
126 }
127
128 #define LAYOUT_split_bs( \
129 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G, k1H, k1I, \
130 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
131 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
132 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
133 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
134 ) { \
135 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
136 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
137 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, ___, ___ }, \
138 { k41, k42, k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___, k4H, ___ }, \
139 { k51, k52, k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
140 }
141
142 #define LAYOUT_split_rshift( \
143 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
144 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
145 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
146 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, \
147 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
148 ) { \
149 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
150 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
151 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___, ___, ___ }, \
152 { k41, k42, k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, ___ }, \
153 { k51, k52, k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
154 }
155
156 #define LAYOUT_iso( \
157 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
158 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
159 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
160 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
161 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
162 ) { \
163 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
164 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
165 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___, ___, ___ }, \
166 { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___, k4H, ___ }, \
167 { k51, k52, k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
168 }
169
170#endif //LFK_REV_B
171
172#endif //LFK78_H
diff --git a/keyboards/lfkeyboards/lfk78/readme.md b/keyboards/lfkeyboards/lfk78/readme.md
index 7cef9735d..723cf6798 100644
--- a/keyboards/lfkeyboards/lfk78/readme.md
+++ b/keyboards/lfkeyboards/lfk78/readme.md
@@ -1,11 +1,18 @@
1LFK78/68 1# LFK78/68
2===
3 2
4A 65% keyboard similar to the MagicForce68 or VA68M. Optional function key block on left side. 3A 65% keyboard similar to the MagicForce68 or VA68M. Optional function key block on left side.
5 4
6Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards) 5* Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards)
7Hardware Supported: LFK78/68 RevB - RevJ, SMK78/68 6* Hardware Supported: LFK78/68 RevB - RevJ, SMK78/68
8Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/) 7* Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/)
8
9## Revisions
10
11* `revb`: First public release, uses ATmega32U4, has audio, ISSI matrix split between RGB and backlight
12* `revc`: Revisions C through H, uses AT90USB1286, no audio, ISSI device 0 is backlight, 4 is RGB
13* `revj`: Audio on pin C6, uses AT90USB646
14
15---
9 16
10Make example for this keyboard (after setting up your build environment): 17Make example for this keyboard (after setting up your build environment):
11 18
diff --git a/keyboards/lfkeyboards/lfk78/revb/config.h b/keyboards/lfkeyboards/lfk78/revb/config.h
new file mode 100644
index 000000000..34ca869c5
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revb/config.h
@@ -0,0 +1,21 @@
1#pragma once
2
3/* key matrix size */
4#define MATRIX_ROWS 10
5#define MATRIX_COLS 8
6
7/*
8 * Keyboard Matrix Assignments
9 *
10 * Change this to how you wired your keyboard
11 * COLS: AVR pins used for columns, left to right
12 * ROWS: AVR pins used for rows, top to bottom
13 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
14 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
15 *
16 */
17#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, F0, F1, F4, F5, F6 }
18#define MATRIX_COL_PINS { E6, F7, D2, D3, D4, D5, D6, D7 }
19#define UNUSED_PINS
20
21#define RGBLED_NUM 31
diff --git a/keyboards/lfkeyboards/lfk78/revb/info.json b/keyboards/lfkeyboards/lfk78/revb/info.json
new file mode 100644
index 000000000..bc3b13c84
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revb/info.json
@@ -0,0 +1,104 @@
1{
2 "keyboard_name": "LFK78/68 Rev B",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 19.5,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12
13 {"x":2.25, "y":0},
14 {"x":3.25, "y":0},
15 {"x":4.25, "y":0},
16 {"x":5.25, "y":0},
17 {"x":6.25, "y":0},
18 {"x":7.25, "y":0},
19 {"x":8.25, "y":0},
20 {"x":9.25, "y":0},
21 {"x":10.25, "y":0},
22 {"x":11.25, "y":0},
23 {"x":12.25, "y":0},
24 {"x":13.25, "y":0},
25 {"x":14.25, "y":0},
26 {"x":15.25, "y":0, "w":2},
27
28 {"x":17.5, "y":0},
29 {"x":18.5, "y":0},
30
31 {"x":0, "y":1},
32 {"x":1, "y":1},
33
34 {"x":2.25, "y":1, "w":1.5},
35 {"x":3.75, "y":1},
36 {"x":4.75, "y":1},
37 {"x":5.75, "y":1},
38 {"x":6.75, "y":1},
39 {"x":7.75, "y":1},
40 {"x":8.75, "y":1},
41 {"x":9.75, "y":1},
42 {"x":10.75, "y":1},
43 {"x":11.75, "y":1},
44 {"x":12.75, "y":1},
45 {"x":13.75, "y":1},
46 {"x":14.75, "y":1},
47 {"x":15.75, "y":1, "w":1.5},
48
49 {"x":17.5, "y":1},
50 {"x":18.5, "y":1},
51
52 {"x":0, "y":2},
53 {"x":1, "y":2},
54
55 {"x":2.25, "y":2, "w":1.75},
56 {"x":4, "y":2},
57 {"x":5, "y":2},
58 {"x":6, "y":2},
59 {"x":7, "y":2},
60 {"x":8, "y":2},
61 {"x":9, "y":2},
62 {"x":10, "y":2},
63 {"x":11, "y":2},
64 {"x":12, "y":2},
65 {"x":13, "y":2},
66 {"x":14, "y":2},
67 {"x":15, "y":2, "w":2.25},
68
69 {"x":0, "y":3},
70 {"x":1, "y":3},
71
72 {"x":2.25, "y":3, "w":2.25},
73 {"x":4.5, "y":3},
74 {"x":5.5, "y":3},
75 {"x":6.5, "y":3},
76 {"x":7.5, "y":3},
77 {"x":8.5, "y":3},
78 {"x":9.5, "y":3},
79 {"x":10.5, "y":3},
80 {"x":11.5, "y":3},
81 {"x":12.5, "y":3},
82 {"x":13.5, "y":3},
83 {"x":14.5, "y":3, "w":2.75},
84
85 {"x":17.5, "y":3},
86
87 {"x":0, "y":4},
88 {"x":1, "y":4},
89
90 {"x":2.25, "y":4, "w":1.25},
91 {"x":3.5, "y":4, "w":1.25},
92 {"x":4.75, "y":4, "w":1.25},
93 {"x":6, "y":4, "w":6.25},
94 {"x":12.25, "y":4, "w":1.25},
95 {"x":13.5, "y":4, "w":1.25},
96 {"x":14.75, "y":4, "w":1.25},
97
98 {"x":16.5, "y":4},
99 {"x":17.5, "y":4},
100 {"x":18.5, "y":4}
101 ]
102 }
103 }
104}
diff --git a/keyboards/lfkeyboards/lfk78/revb/revb.h b/keyboards/lfkeyboards/lfk78/revb/revb.h
new file mode 100644
index 000000000..aa48c26ed
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revb/revb.h
@@ -0,0 +1,39 @@
1#pragma once
2
3// readability
4#define XXX KC_NO
5
6// This is a shortcut to help you visually see your layout.
7/*
8 * ,---------. ,-----------------------------------------------------------------------. ,---------.
9 * | 0 | 1 | | 2 | 3 | 4 | 5 | 6 | 7 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | | 94 | 95 |
10 * |---------| |-----------------------------------------------------------------------| |---------|
11 * | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | | 96 | 97 |
12 * |---------| |-----------------------------------------------------------------------| `---------'
13 * | 20 | 21 | | 22 | 23 | 24 | 25 | 26 | 27 | 70 | 71 | 72 | 73 | 74 | 75 | 76 |
14 * |---------| |-----------------------------------------------------------------------| ,----.
15 * | 30 | 31 | | 32 | 33 | 34 | 35 | 36 | 37 | 80 | 81 | 82 | 83 | 84 | 85 | | 86 |
16 * |---------| |-------------------------------------------------------------------------------------.
17 * | 40 | 41 | | 42 | 43 | 44 | 45 | 46 | 47 | 90 | | 91 | 92 | 93 |
18 * `---------' `--------------------------------------------------------------------' `--------------'
19 */
20// The first section contains all of the arguements
21// The second converts the arguments into a two-dimensional array
22#define LAYOUT( \
23 k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, k94, k95, \
24 k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k66, k67, k96, k97, \
25 k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, k76, \
26 k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
27 k40, k41, k42, k43, k44, k45, k46, k47, k90, k91, k92, k93 \
28) { \
29 { k00, k01, k02, k03, k04, k05, k06, k07 }, \
30 { k10, k11, k12, k13, k14, k15, k16, k17 }, \
31 { k20, k21, k22, k23, k24, k25, k26, k27 }, \
32 { k30, k31, k32, k33, k34, k35, k36, k37 }, \
33 { k40, k41, k42, k43, k44, k45, k46, k47 }, \
34 { k50, k51, k52, k53, k54, k55, k56, k57 }, \
35 { k60, k61, k62, k63, k64, k65, k66, k67 }, \
36 { k70, k71, k72, k73, k74, k75, k76, XXX }, \
37 { k80, k81, k82, k83, k84, k85, k86, XXX }, \
38 { k90, k91, k92, k93, k94, k95, k96, k97 } \
39}
diff --git a/keyboards/lfkeyboards/lfk78/revb/rules.mk b/keyboards/lfkeyboards/lfk78/revb/rules.mk
new file mode 100644
index 000000000..451373a92
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revb/rules.mk
@@ -0,0 +1,2 @@
1# MCU name
2MCU = atmega32u4
diff --git a/keyboards/lfkeyboards/lfk78/revc/config.h b/keyboards/lfkeyboards/lfk78/revc/config.h
new file mode 100644
index 000000000..1a62dfe4f
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revc/config.h
@@ -0,0 +1,21 @@
1#pragma once
2
3/* key matrix size */
4#define MATRIX_ROWS 5
5#define MATRIX_COLS 18
6
7/*
8 * Keyboard Matrix Assignments
9 *
10 * Change this to how you wired your keyboard
11 * COLS: AVR pins used for columns, left to right
12 * ROWS: AVR pins used for rows, top to bottom
13 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
14 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
15 *
16 */
17#define MATRIX_ROW_PINS { D2, D3, D4, D5, D6 }
18#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, E6, E7, F0, F1, F2, F3, C0, C1, C2, C3 }
19#define UNUSED_PINS
20
21#define RGBLED_NUM 27
diff --git a/keyboards/lfkeyboards/lfk78/revc/info.json b/keyboards/lfkeyboards/lfk78/revc/info.json
new file mode 100644
index 000000000..e895d39a7
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revc/info.json
@@ -0,0 +1,392 @@
1{
2 "keyboard_name": "LFK78/68 Rev C-H",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 19.5,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12
13 {"x":2.25, "y":0},
14 {"x":3.25, "y":0},
15 {"x":4.25, "y":0},
16 {"x":5.25, "y":0},
17 {"x":6.25, "y":0},
18 {"x":7.25, "y":0},
19 {"x":8.25, "y":0},
20 {"x":9.25, "y":0},
21 {"x":10.25, "y":0},
22 {"x":11.25, "y":0},
23 {"x":12.25, "y":0},
24 {"x":13.25, "y":0},
25 {"x":14.25, "y":0},
26 {"x":15.25, "y":0, "w":2},
27
28 {"x":17.5, "y":0},
29 {"x":18.5, "y":0},
30
31 {"x":0, "y":1},
32 {"x":1, "y":1},
33
34 {"x":2.25, "y":1, "w":1.5},
35 {"x":3.75, "y":1},
36 {"x":4.75, "y":1},
37 {"x":5.75, "y":1},
38 {"x":6.75, "y":1},
39 {"x":7.75, "y":1},
40 {"x":8.75, "y":1},
41 {"x":9.75, "y":1},
42 {"x":10.75, "y":1},
43 {"x":11.75, "y":1},
44 {"x":12.75, "y":1},
45 {"x":13.75, "y":1},
46 {"x":14.75, "y":1},
47 {"x":15.75, "y":1, "w":1.5},
48
49 {"x":17.5, "y":1},
50 {"x":18.5, "y":1},
51
52 {"x":0, "y":2},
53 {"x":1, "y":2},
54
55 {"x":2.25, "y":2, "w":1.75},
56 {"x":4, "y":2},
57 {"x":5, "y":2},
58 {"x":6, "y":2},
59 {"x":7, "y":2},
60 {"x":8, "y":2},
61 {"x":9, "y":2},
62 {"x":10, "y":2},
63 {"x":11, "y":2},
64 {"x":12, "y":2},
65 {"x":13, "y":2},
66 {"x":14, "y":2},
67 {"x":15, "y":2, "w":2.25},
68
69 {"x":0, "y":3},
70 {"x":1, "y":3},
71
72 {"x":2.25, "y":3, "w":2.25},
73 {"x":4.5, "y":3},
74 {"x":5.5, "y":3},
75 {"x":6.5, "y":3},
76 {"x":7.5, "y":3},
77 {"x":8.5, "y":3},
78 {"x":9.5, "y":3},
79 {"x":10.5, "y":3},
80 {"x":11.5, "y":3},
81 {"x":12.5, "y":3},
82 {"x":13.5, "y":3},
83 {"x":14.5, "y":3, "w":2.75},
84
85 {"x":17.5, "y":3},
86
87 {"x":0, "y":4},
88 {"x":1, "y":4},
89
90 {"x":2.25, "y":4, "w":1.25},
91 {"x":3.5, "y":4, "w":1.25},
92 {"x":4.75, "y":4, "w":1.25},
93 {"x":6, "y":4, "w":6.25},
94 {"x":12.25, "y":4, "w":1.25},
95 {"x":13.5, "y":4, "w":1.25},
96 {"x":14.75, "y":4, "w":1.25},
97
98 {"x":16.5, "y":4},
99 {"x":17.5, "y":4},
100 {"x":18.5, "y":4}
101 ]
102 },
103 "LAYOUT_split_bs": {
104 "layout": [
105 {"x":0, "y":0},
106 {"x":1, "y":0},
107
108 {"x":2.25, "y":0},
109 {"x":3.25, "y":0},
110 {"x":4.25, "y":0},
111 {"x":5.25, "y":0},
112 {"x":6.25, "y":0},
113 {"x":7.25, "y":0},
114 {"x":8.25, "y":0},
115 {"x":9.25, "y":0},
116 {"x":10.25, "y":0},
117 {"x":11.25, "y":0},
118 {"x":12.25, "y":0},
119 {"x":13.25, "y":0},
120 {"x":14.25, "y":0},
121 {"x":15.25, "y":0},
122 {"x":16.25, "y":0},
123
124 {"x":17.5, "y":0},
125 {"x":18.5, "y":0},
126
127 {"x":0, "y":1},
128 {"x":1, "y":1},
129
130 {"x":2.25, "y":1, "w":1.5},
131 {"x":3.75, "y":1},
132 {"x":4.75, "y":1},
133 {"x":5.75, "y":1},
134 {"x":6.75, "y":1},
135 {"x":7.75, "y":1},
136 {"x":8.75, "y":1},
137 {"x":9.75, "y":1},
138 {"x":10.75, "y":1},
139 {"x":11.75, "y":1},
140 {"x":12.75, "y":1},
141 {"x":13.75, "y":1},
142 {"x":14.75, "y":1},
143 {"x":15.75, "y":1, "w":1.5},
144
145 {"x":17.5, "y":1},
146 {"x":18.5, "y":1},
147
148 {"x":0, "y":2},
149 {"x":1, "y":2},
150
151 {"x":2.25, "y":2, "w":1.75},
152 {"x":4, "y":2},
153 {"x":5, "y":2},
154 {"x":6, "y":2},
155 {"x":7, "y":2},
156 {"x":8, "y":2},
157 {"x":9, "y":2},
158 {"x":10, "y":2},
159 {"x":11, "y":2},
160 {"x":12, "y":2},
161 {"x":13, "y":2},
162 {"x":14, "y":2},
163 {"x":15, "y":2, "w":2.25},
164
165 {"x":0, "y":3},
166 {"x":1, "y":3},
167
168 {"x":2.25, "y":3, "w":2.25},
169 {"x":4.5, "y":3},
170 {"x":5.5, "y":3},
171 {"x":6.5, "y":3},
172 {"x":7.5, "y":3},
173 {"x":8.5, "y":3},
174 {"x":9.5, "y":3},
175 {"x":10.5, "y":3},
176 {"x":11.5, "y":3},
177 {"x":12.5, "y":3},
178 {"x":13.5, "y":3},
179 {"x":14.5, "y":3, "w":2.75},
180
181 {"x":17.5, "y":3},
182
183 {"x":0, "y":4},
184 {"x":1, "y":4},
185
186 {"x":2.25, "y":4, "w":1.25},
187 {"x":3.5, "y":4, "w":1.25},
188 {"x":4.75, "y":4, "w":1.25},
189 {"x":6, "y":4, "w":6.25},
190 {"x":12.25, "y":4, "w":1.25},
191 {"x":13.5, "y":4, "w":1.25},
192 {"x":14.75, "y":4, "w":1.25},
193
194 {"x":16.5, "y":4},
195 {"x":17.5, "y":4},
196 {"x":18.5, "y":4}
197 ]
198 },
199 "LAYOUT_split_rshift": {
200 "layout": [
201 {"x":0, "y":0},
202 {"x":1, "y":0},
203
204 {"x":2.25, "y":0},
205 {"x":3.25, "y":0},
206 {"x":4.25, "y":0},
207 {"x":5.25, "y":0},
208 {"x":6.25, "y":0},
209 {"x":7.25, "y":0},
210 {"x":8.25, "y":0},
211 {"x":9.25, "y":0},
212 {"x":10.25, "y":0},
213 {"x":11.25, "y":0},
214 {"x":12.25, "y":0},
215 {"x":13.25, "y":0},
216 {"x":14.25, "y":0},
217 {"x":15.25, "y":0, "w":2},
218
219 {"x":17.5, "y":0},
220 {"x":18.5, "y":0},
221
222 {"x":0, "y":1},
223 {"x":1, "y":1},
224
225 {"x":2.25, "y":1, "w":1.5},
226 {"x":3.75, "y":1},
227 {"x":4.75, "y":1},
228 {"x":5.75, "y":1},
229 {"x":6.75, "y":1},
230 {"x":7.75, "y":1},
231 {"x":8.75, "y":1},
232 {"x":9.75, "y":1},
233 {"x":10.75, "y":1},
234 {"x":11.75, "y":1},
235 {"x":12.75, "y":1},
236 {"x":13.75, "y":1},
237 {"x":14.75, "y":1},
238 {"x":15.75, "y":1, "w":1.5},
239
240 {"x":17.5, "y":1},
241 {"x":18.5, "y":1},
242
243 {"x":0, "y":2},
244 {"x":1, "y":2},
245
246 {"x":2.25, "y":2, "w":1.75},
247 {"x":4, "y":2},
248 {"x":5, "y":2},
249 {"x":6, "y":2},
250 {"x":7, "y":2},
251 {"x":8, "y":2},
252 {"x":9, "y":2},
253 {"x":10, "y":2},
254 {"x":11, "y":2},
255 {"x":12, "y":2},
256 {"x":13, "y":2},
257 {"x":14, "y":2},
258 {"x":15, "y":2, "w":2.25},
259
260 {"x":0, "y":3},
261 {"x":1, "y":3},
262
263 {"x":2.25, "y":3, "w":2.25},
264 {"x":4.5, "y":3},
265 {"x":5.5, "y":3},
266 {"x":6.5, "y":3},
267 {"x":7.5, "y":3},
268 {"x":8.5, "y":3},
269 {"x":9.5, "y":3},
270 {"x":10.5, "y":3},
271 {"x":11.5, "y":3},
272 {"x":12.5, "y":3},
273 {"x":13.5, "y":3},
274 {"x":14.5, "y":3, "w":1.75},
275 {"x":16.25, "y":3},
276
277 {"x":17.5, "y":3},
278
279 {"x":0, "y":4},
280 {"x":1, "y":4},
281
282 {"x":2.25, "y":4, "w":1.25},
283 {"x":3.5, "y":4, "w":1.25},
284 {"x":4.75, "y":4, "w":1.25},
285 {"x":6, "y":4, "w":6.25},
286 {"x":12.25, "y":4, "w":1.25},
287 {"x":13.5, "y":4, "w":1.25},
288 {"x":14.75, "y":4, "w":1.25},
289
290 {"x":16.5, "y":4},
291 {"x":17.5, "y":4},
292 {"x":18.5, "y":4}
293 ]
294 },
295 "LAYOUT_iso": {
296 "layout": [
297 {"x":0, "y":0},
298 {"x":1, "y":0},
299
300 {"x":2.25, "y":0},
301 {"x":3.25, "y":0},
302 {"x":4.25, "y":0},
303 {"x":5.25, "y":0},
304 {"x":6.25, "y":0},
305 {"x":7.25, "y":0},
306 {"x":8.25, "y":0},
307 {"x":9.25, "y":0},
308 {"x":10.25, "y":0},
309 {"x":11.25, "y":0},
310 {"x":12.25, "y":0},
311 {"x":13.25, "y":0},
312 {"x":14.25, "y":0},
313 {"x":15.25, "y":0, "w":2},
314
315 {"x":17.5, "y":0},
316 {"x":18.5, "y":0},
317
318 {"x":0, "y":1},
319 {"x":1, "y":1},
320
321 {"x":2.25, "y":1, "w":1.5},
322 {"x":3.75, "y":1},
323 {"x":4.75, "y":1},
324 {"x":5.75, "y":1},
325 {"x":6.75, "y":1},
326 {"x":7.75, "y":1},
327 {"x":8.75, "y":1},
328 {"x":9.75, "y":1},
329 {"x":10.75, "y":1},
330 {"x":11.75, "y":1},
331 {"x":12.75, "y":1},
332 {"x":13.75, "y":1},
333 {"x":14.75, "y":1},
334 {"x":16, "y":1, "w":1.25, "h":2},
335
336 {"x":17.5, "y":1},
337 {"x":18.5, "y":1},
338
339 {"x":0, "y":2},
340 {"x":1, "y":2},
341
342 {"x":2.25, "y":2, "w":1.75},
343 {"x":4, "y":2},
344 {"x":5, "y":2},
345 {"x":6, "y":2},
346 {"x":7, "y":2},
347 {"x":8, "y":2},
348 {"x":9, "y":2},
349 {"x":10, "y":2},
350 {"x":11, "y":2},
351 {"x":12, "y":2},
352 {"x":13, "y":2},
353 {"x":14, "y":2},
354 {"x":15, "y":2},
355
356 {"x":0, "y":3},
357 {"x":1, "y":3},
358
359 {"x":2.25, "y":3, "w":1.25},
360 {"x":3.5, "y":3},
361 {"x":4.5, "y":3},
362 {"x":5.5, "y":3},
363 {"x":6.5, "y":3},
364 {"x":7.5, "y":3},
365 {"x":8.5, "y":3},
366 {"x":9.5, "y":3},
367 {"x":10.5, "y":3},
368 {"x":11.5, "y":3},
369 {"x":12.5, "y":3},
370 {"x":13.5, "y":3},
371 {"x":14.5, "y":3, "w":2.75},
372
373 {"x":17.5, "y":3},
374
375 {"x":0, "y":4},
376 {"x":1, "y":4},
377
378 {"x":2.25, "y":4, "w":1.25},
379 {"x":3.5, "y":4, "w":1.25},
380 {"x":4.75, "y":4, "w":1.25},
381 {"x":6, "y":4, "w":6.25},
382 {"x":12.25, "y":4, "w":1.25},
383 {"x":13.5, "y":4, "w":1.25},
384 {"x":14.75, "y":4, "w":1.25},
385
386 {"x":16.5, "y":4},
387 {"x":17.5, "y":4},
388 {"x":18.5, "y":4}
389 ]
390 }
391 }
392}
diff --git a/keyboards/lfkeyboards/lfk78/revc/revc.h b/keyboards/lfkeyboards/lfk78/revc/revc.h
new file mode 100644
index 000000000..6a9dd87bf
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revc/revc.h
@@ -0,0 +1,76 @@
1#pragma once
2
3// readability
4#define XXX KC_NO
5
6// This is a shortcut to help you visually see your layout.
7/*
8 * ,---------. ,-----------------------------------------------------------------------. ,---------.
9 * | 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G | | 1H | 1I |
10 * |---------| |-----------------------------------------------------------------------| |---------|
11 * | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F | 2G | | 2H | 2I |
12 * |---------| |-----------------------------------------------------------------------| `---------'
13 * | 31 | 32 | | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
14 * |---------| |-----------------------------------------------------------------------| ,----.
15 * | 41 | 42 | | 43 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | | 4H |
16 * |---------| |-------------------------------------------------------------------------------------.
17 * | 51 | 52 | | 53 | 54 | 55 | 59 | 5D | 5E | 5F | | 5G | 5H | 5I |
18 * `---------' `--------------------------------------------------------------------' `--------------'
19 */
20// The first section contains all of the arguements
21// The second converts the arguments into a two-dimensional array
22#define LAYOUT( \
23 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
24 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
25 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
26 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
27 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
28) { \
29 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
30 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
31 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
32 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
33 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
34}
35
36#define LAYOUT_split_bs( \
37 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G, k1H, k1I, \
38 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
39 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
40 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
41 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
42) { \
43 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
44 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
45 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, XXX, XXX }, \
46 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
47 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
48}
49
50#define LAYOUT_split_rshift( \
51 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
52 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
53 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
54 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, \
55 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
56) { \
57 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
58 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
59 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
60 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, XXX }, \
61 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
62}
63
64#define LAYOUT_iso( \
65 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
66 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
67 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
68 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
69 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
70) { \
71 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
72 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
73 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
74 { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
75 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
76}
diff --git a/keyboards/lfkeyboards/lfk78/revc/rules.mk b/keyboards/lfkeyboards/lfk78/revc/rules.mk
new file mode 100644
index 000000000..889bfaad5
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revc/rules.mk
@@ -0,0 +1,2 @@
1# MCU name
2MCU = at90usb1286
diff --git a/keyboards/lfkeyboards/lfk78/revj/config.h b/keyboards/lfkeyboards/lfk78/revj/config.h
new file mode 100644
index 000000000..1a62dfe4f
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revj/config.h
@@ -0,0 +1,21 @@
1#pragma once
2
3/* key matrix size */
4#define MATRIX_ROWS 5
5#define MATRIX_COLS 18
6
7/*
8 * Keyboard Matrix Assignments
9 *
10 * Change this to how you wired your keyboard
11 * COLS: AVR pins used for columns, left to right
12 * ROWS: AVR pins used for rows, top to bottom
13 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
14 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
15 *
16 */
17#define MATRIX_ROW_PINS { D2, D3, D4, D5, D6 }
18#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, E6, E7, F0, F1, F2, F3, C0, C1, C2, C3 }
19#define UNUSED_PINS
20
21#define RGBLED_NUM 27
diff --git a/keyboards/lfkeyboards/lfk78/revj/info.json b/keyboards/lfkeyboards/lfk78/revj/info.json
new file mode 100644
index 000000000..945ee8cd1
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revj/info.json
@@ -0,0 +1,392 @@
1{
2 "keyboard_name": "LFK78/68 Rev J",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 19.5,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12
13 {"x":2.25, "y":0},
14 {"x":3.25, "y":0},
15 {"x":4.25, "y":0},
16 {"x":5.25, "y":0},
17 {"x":6.25, "y":0},
18 {"x":7.25, "y":0},
19 {"x":8.25, "y":0},
20 {"x":9.25, "y":0},
21 {"x":10.25, "y":0},
22 {"x":11.25, "y":0},
23 {"x":12.25, "y":0},
24 {"x":13.25, "y":0},
25 {"x":14.25, "y":0},
26 {"x":15.25, "y":0, "w":2},
27
28 {"x":17.5, "y":0},
29 {"x":18.5, "y":0},
30
31 {"x":0, "y":1},
32 {"x":1, "y":1},
33
34 {"x":2.25, "y":1, "w":1.5},
35 {"x":3.75, "y":1},
36 {"x":4.75, "y":1},
37 {"x":5.75, "y":1},
38 {"x":6.75, "y":1},
39 {"x":7.75, "y":1},
40 {"x":8.75, "y":1},
41 {"x":9.75, "y":1},
42 {"x":10.75, "y":1},
43 {"x":11.75, "y":1},
44 {"x":12.75, "y":1},
45 {"x":13.75, "y":1},
46 {"x":14.75, "y":1},
47 {"x":15.75, "y":1, "w":1.5},
48
49 {"x":17.5, "y":1},
50 {"x":18.5, "y":1},
51
52 {"x":0, "y":2},
53 {"x":1, "y":2},
54
55 {"x":2.25, "y":2, "w":1.75},
56 {"x":4, "y":2},
57 {"x":5, "y":2},
58 {"x":6, "y":2},
59 {"x":7, "y":2},
60 {"x":8, "y":2},
61 {"x":9, "y":2},
62 {"x":10, "y":2},
63 {"x":11, "y":2},
64 {"x":12, "y":2},
65 {"x":13, "y":2},
66 {"x":14, "y":2},
67 {"x":15, "y":2, "w":2.25},
68
69 {"x":0, "y":3},
70 {"x":1, "y":3},
71
72 {"x":2.25, "y":3, "w":2.25},
73 {"x":4.5, "y":3},
74 {"x":5.5, "y":3},
75 {"x":6.5, "y":3},
76 {"x":7.5, "y":3},
77 {"x":8.5, "y":3},
78 {"x":9.5, "y":3},
79 {"x":10.5, "y":3},
80 {"x":11.5, "y":3},
81 {"x":12.5, "y":3},
82 {"x":13.5, "y":3},
83 {"x":14.5, "y":3, "w":2.75},
84
85 {"x":17.5, "y":3},
86
87 {"x":0, "y":4},
88 {"x":1, "y":4},
89
90 {"x":2.25, "y":4, "w":1.25},
91 {"x":3.5, "y":4, "w":1.25},
92 {"x":4.75, "y":4, "w":1.25},
93 {"x":6, "y":4, "w":6.25},
94 {"x":12.25, "y":4, "w":1.25},
95 {"x":13.5, "y":4, "w":1.25},
96 {"x":14.75, "y":4, "w":1.25},
97
98 {"x":16.5, "y":4},
99 {"x":17.5, "y":4},
100 {"x":18.5, "y":4}
101 ]
102 },
103 "LAYOUT_split_bs": {
104 "layout": [
105 {"x":0, "y":0},
106 {"x":1, "y":0},
107
108 {"x":2.25, "y":0},
109 {"x":3.25, "y":0},
110 {"x":4.25, "y":0},
111 {"x":5.25, "y":0},
112 {"x":6.25, "y":0},
113 {"x":7.25, "y":0},
114 {"x":8.25, "y":0},
115 {"x":9.25, "y":0},
116 {"x":10.25, "y":0},
117 {"x":11.25, "y":0},
118 {"x":12.25, "y":0},
119 {"x":13.25, "y":0},
120 {"x":14.25, "y":0},
121 {"x":15.25, "y":0},
122 {"x":16.25, "y":0},
123
124 {"x":17.5, "y":0},
125 {"x":18.5, "y":0},
126
127 {"x":0, "y":1},
128 {"x":1, "y":1},
129
130 {"x":2.25, "y":1, "w":1.5},
131 {"x":3.75, "y":1},
132 {"x":4.75, "y":1},
133 {"x":5.75, "y":1},
134 {"x":6.75, "y":1},
135 {"x":7.75, "y":1},
136 {"x":8.75, "y":1},
137 {"x":9.75, "y":1},
138 {"x":10.75, "y":1},
139 {"x":11.75, "y":1},
140 {"x":12.75, "y":1},
141 {"x":13.75, "y":1},
142 {"x":14.75, "y":1},
143 {"x":15.75, "y":1, "w":1.5},
144
145 {"x":17.5, "y":1},
146 {"x":18.5, "y":1},
147
148 {"x":0, "y":2},
149 {"x":1, "y":2},
150
151 {"x":2.25, "y":2, "w":1.75},
152 {"x":4, "y":2},
153 {"x":5, "y":2},
154 {"x":6, "y":2},
155 {"x":7, "y":2},
156 {"x":8, "y":2},
157 {"x":9, "y":2},
158 {"x":10, "y":2},
159 {"x":11, "y":2},
160 {"x":12, "y":2},
161 {"x":13, "y":2},
162 {"x":14, "y":2},
163 {"x":15, "y":2, "w":2.25},
164
165 {"x":0, "y":3},
166 {"x":1, "y":3},
167
168 {"x":2.25, "y":3, "w":2.25},
169 {"x":4.5, "y":3},
170 {"x":5.5, "y":3},
171 {"x":6.5, "y":3},
172 {"x":7.5, "y":3},
173 {"x":8.5, "y":3},
174 {"x":9.5, "y":3},
175 {"x":10.5, "y":3},
176 {"x":11.5, "y":3},
177 {"x":12.5, "y":3},
178 {"x":13.5, "y":3},
179 {"x":14.5, "y":3, "w":2.75},
180
181 {"x":17.5, "y":3},
182
183 {"x":0, "y":4},
184 {"x":1, "y":4},
185
186 {"x":2.25, "y":4, "w":1.25},
187 {"x":3.5, "y":4, "w":1.25},
188 {"x":4.75, "y":4, "w":1.25},
189 {"x":6, "y":4, "w":6.25},
190 {"x":12.25, "y":4, "w":1.25},
191 {"x":13.5, "y":4, "w":1.25},
192 {"x":14.75, "y":4, "w":1.25},
193
194 {"x":16.5, "y":4},
195 {"x":17.5, "y":4},
196 {"x":18.5, "y":4}
197 ]
198 },
199 "LAYOUT_split_rshift": {
200 "layout": [
201 {"x":0, "y":0},
202 {"x":1, "y":0},
203
204 {"x":2.25, "y":0},
205 {"x":3.25, "y":0},
206 {"x":4.25, "y":0},
207 {"x":5.25, "y":0},
208 {"x":6.25, "y":0},
209 {"x":7.25, "y":0},
210 {"x":8.25, "y":0},
211 {"x":9.25, "y":0},
212 {"x":10.25, "y":0},
213 {"x":11.25, "y":0},
214 {"x":12.25, "y":0},
215 {"x":13.25, "y":0},
216 {"x":14.25, "y":0},
217 {"x":15.25, "y":0, "w":2},
218
219 {"x":17.5, "y":0},
220 {"x":18.5, "y":0},
221
222 {"x":0, "y":1},
223 {"x":1, "y":1},
224
225 {"x":2.25, "y":1, "w":1.5},
226 {"x":3.75, "y":1},
227 {"x":4.75, "y":1},
228 {"x":5.75, "y":1},
229 {"x":6.75, "y":1},
230 {"x":7.75, "y":1},
231 {"x":8.75, "y":1},
232 {"x":9.75, "y":1},
233 {"x":10.75, "y":1},
234 {"x":11.75, "y":1},
235 {"x":12.75, "y":1},
236 {"x":13.75, "y":1},
237 {"x":14.75, "y":1},
238 {"x":15.75, "y":1, "w":1.5},
239
240 {"x":17.5, "y":1},
241 {"x":18.5, "y":1},
242
243 {"x":0, "y":2},
244 {"x":1, "y":2},
245
246 {"x":2.25, "y":2, "w":1.75},
247 {"x":4, "y":2},
248 {"x":5, "y":2},
249 {"x":6, "y":2},
250 {"x":7, "y":2},
251 {"x":8, "y":2},
252 {"x":9, "y":2},
253 {"x":10, "y":2},
254 {"x":11, "y":2},
255 {"x":12, "y":2},
256 {"x":13, "y":2},
257 {"x":14, "y":2},
258 {"x":15, "y":2, "w":2.25},
259
260 {"x":0, "y":3},
261 {"x":1, "y":3},
262
263 {"x":2.25, "y":3, "w":2.25},
264 {"x":4.5, "y":3},
265 {"x":5.5, "y":3},
266 {"x":6.5, "y":3},
267 {"x":7.5, "y":3},
268 {"x":8.5, "y":3},
269 {"x":9.5, "y":3},
270 {"x":10.5, "y":3},
271 {"x":11.5, "y":3},
272 {"x":12.5, "y":3},
273 {"x":13.5, "y":3},
274 {"x":14.5, "y":3, "w":1.75},
275 {"x":16.25, "y":3},
276
277 {"x":17.5, "y":3},
278
279 {"x":0, "y":4},
280 {"x":1, "y":4},
281
282 {"x":2.25, "y":4, "w":1.25},
283 {"x":3.5, "y":4, "w":1.25},
284 {"x":4.75, "y":4, "w":1.25},
285 {"x":6, "y":4, "w":6.25},
286 {"x":12.25, "y":4, "w":1.25},
287 {"x":13.5, "y":4, "w":1.25},
288 {"x":14.75, "y":4, "w":1.25},
289
290 {"x":16.5, "y":4},
291 {"x":17.5, "y":4},
292 {"x":18.5, "y":4}
293 ]
294 },
295 "LAYOUT_iso": {
296 "layout": [
297 {"x":0, "y":0},
298 {"x":1, "y":0},
299
300 {"x":2.25, "y":0},
301 {"x":3.25, "y":0},
302 {"x":4.25, "y":0},
303 {"x":5.25, "y":0},
304 {"x":6.25, "y":0},
305 {"x":7.25, "y":0},
306 {"x":8.25, "y":0},
307 {"x":9.25, "y":0},
308 {"x":10.25, "y":0},
309 {"x":11.25, "y":0},
310 {"x":12.25, "y":0},
311 {"x":13.25, "y":0},
312 {"x":14.25, "y":0},
313 {"x":15.25, "y":0, "w":2},
314
315 {"x":17.5, "y":0},
316 {"x":18.5, "y":0},
317
318 {"x":0, "y":1},
319 {"x":1, "y":1},
320
321 {"x":2.25, "y":1, "w":1.5},
322 {"x":3.75, "y":1},
323 {"x":4.75, "y":1},
324 {"x":5.75, "y":1},
325 {"x":6.75, "y":1},
326 {"x":7.75, "y":1},
327 {"x":8.75, "y":1},
328 {"x":9.75, "y":1},
329 {"x":10.75, "y":1},
330 {"x":11.75, "y":1},
331 {"x":12.75, "y":1},
332 {"x":13.75, "y":1},
333 {"x":14.75, "y":1},
334 {"x":16, "y":1, "w":1.25, "h":2},
335
336 {"x":17.5, "y":1},
337 {"x":18.5, "y":1},
338
339 {"x":0, "y":2},
340 {"x":1, "y":2},
341
342 {"x":2.25, "y":2, "w":1.75},
343 {"x":4, "y":2},
344 {"x":5, "y":2},
345 {"x":6, "y":2},
346 {"x":7, "y":2},
347 {"x":8, "y":2},
348 {"x":9, "y":2},
349 {"x":10, "y":2},
350 {"x":11, "y":2},
351 {"x":12, "y":2},
352 {"x":13, "y":2},
353 {"x":14, "y":2},
354 {"x":15, "y":2},
355
356 {"x":0, "y":3},
357 {"x":1, "y":3},
358
359 {"x":2.25, "y":3, "w":1.25},
360 {"x":3.5, "y":3},
361 {"x":4.5, "y":3},
362 {"x":5.5, "y":3},
363 {"x":6.5, "y":3},
364 {"x":7.5, "y":3},
365 {"x":8.5, "y":3},
366 {"x":9.5, "y":3},
367 {"x":10.5, "y":3},
368 {"x":11.5, "y":3},
369 {"x":12.5, "y":3},
370 {"x":13.5, "y":3},
371 {"x":14.5, "y":3, "w":2.75},
372
373 {"x":17.5, "y":3},
374
375 {"x":0, "y":4},
376 {"x":1, "y":4},
377
378 {"x":2.25, "y":4, "w":1.25},
379 {"x":3.5, "y":4, "w":1.25},
380 {"x":4.75, "y":4, "w":1.25},
381 {"x":6, "y":4, "w":6.25},
382 {"x":12.25, "y":4, "w":1.25},
383 {"x":13.5, "y":4, "w":1.25},
384 {"x":14.75, "y":4, "w":1.25},
385
386 {"x":16.5, "y":4},
387 {"x":17.5, "y":4},
388 {"x":18.5, "y":4}
389 ]
390 }
391 }
392}
diff --git a/keyboards/lfkeyboards/lfk78/revj/revj.h b/keyboards/lfkeyboards/lfk78/revj/revj.h
new file mode 100644
index 000000000..6a9dd87bf
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revj/revj.h
@@ -0,0 +1,76 @@
1#pragma once
2
3// readability
4#define XXX KC_NO
5
6// This is a shortcut to help you visually see your layout.
7/*
8 * ,---------. ,-----------------------------------------------------------------------. ,---------.
9 * | 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G | | 1H | 1I |
10 * |---------| |-----------------------------------------------------------------------| |---------|
11 * | 21 | 22 | | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F | 2G | | 2H | 2I |
12 * |---------| |-----------------------------------------------------------------------| `---------'
13 * | 31 | 32 | | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
14 * |---------| |-----------------------------------------------------------------------| ,----.
15 * | 41 | 42 | | 43 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | | 4H |
16 * |---------| |-------------------------------------------------------------------------------------.
17 * | 51 | 52 | | 53 | 54 | 55 | 59 | 5D | 5E | 5F | | 5G | 5H | 5I |
18 * `---------' `--------------------------------------------------------------------' `--------------'
19 */
20// The first section contains all of the arguements
21// The second converts the arguments into a two-dimensional array
22#define LAYOUT( \
23 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
24 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
25 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
26 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
27 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
28) { \
29 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
30 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
31 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
32 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
33 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
34}
35
36#define LAYOUT_split_bs( \
37 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G, k1H, k1I, \
38 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
39 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
40 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
41 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
42) { \
43 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
44 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
45 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, XXX, XXX }, \
46 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
47 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
48}
49
50#define LAYOUT_split_rshift( \
51 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
52 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
53 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
54 k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, \
55 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
56) { \
57 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
58 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
59 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
60 { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, XXX }, \
61 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
62}
63
64#define LAYOUT_iso( \
65 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
66 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
67 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
68 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
69 k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
70) { \
71 { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
72 { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
73 { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
74 { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
75 { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
76}
diff --git a/keyboards/lfkeyboards/lfk78/revj/rules.mk b/keyboards/lfkeyboards/lfk78/revj/rules.mk
new file mode 100644
index 000000000..c1836b749
--- /dev/null
+++ b/keyboards/lfkeyboards/lfk78/revj/rules.mk
@@ -0,0 +1,4 @@
1# MCU name
2MCU = at90usb646
3
4AUDIO_ENABLE = yes
diff --git a/keyboards/lfkeyboards/lfk78/rules.mk b/keyboards/lfkeyboards/lfk78/rules.mk
index 74a1f7989..6da6ea4b8 100644
--- a/keyboards/lfkeyboards/lfk78/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/rules.mk
@@ -1,24 +1,16 @@
1# Set the LFK78 hardware version. 1# Bootloader selection
2# 2# Teensy halfkay
3# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight 3# Pro Micro caterina
4# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB 4# Atmel DFU atmel-dfu
5# J - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB 5# LUFA DFU lufa-dfu
6LFK_REV = J 6# QMK DFU qmk-dfu
7 7# ATmega32A bootloadHID
8ifeq ($(LFK_REV), B) 8# ATmega328P USBasp
9 MCU = atmega32u4
10else ifeq ($(LFK_REV), J)
11 MCU = at90usb646
12else
13 MCU = at90usb1286
14endif
15BOOTLOADER = atmel-dfu 9BOOTLOADER = atmel-dfu
16OPT_DEFS += -DLFK_REV_$(LFK_REV)
17OPT_DEFS += -DLFK_REV_STRING=\"Rev$(LFK_REV)\"
18
19# Extra source files for IS3731 lighting
20SRC = TWIlib.c issi.c lighting.c
21 10
11# Build Options
12# change yes to no to disable
13#
22BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration 14BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
23MOUSEKEY_ENABLE = no # Mouse keys 15MOUSEKEY_ENABLE = no # Mouse keys
24EXTRAKEY_ENABLE = yes # Audio control and System control 16EXTRAKEY_ENABLE = yes # Audio control and System control
@@ -28,11 +20,11 @@ NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here
28BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality 20BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
29BACKLIGHT_DRIVER = custom 21BACKLIGHT_DRIVER = custom
30MIDI_ENABLE = no # MIDI controls 22MIDI_ENABLE = no # MIDI controls
31AUDIO_ENABLE = yes # Audio output on port C6 23AUDIO_ENABLE = no # Audio output on port C6
32UNICODE_ENABLE = no # Unicode 24UNICODE_ENABLE = no # Unicode
33BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 25BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
34RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. 26RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
35RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base 27RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lfkeyboards, not qmk base
36SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend 28SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
37TAP_DANCE_ENABLE = no 29TAP_DANCE_ENABLE = no
38 30
@@ -40,6 +32,8 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
40WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms 32WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
41CAPSLOCK_LED = no # Toggle back light LED of Caps Lock 33CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
42 34
35# Extra source files for IS3731 lighting
36SRC = TWIlib.c issi.c lighting.c
43 37
44ifeq ($(strip $(ISSI_ENABLE)), yes) 38ifeq ($(strip $(ISSI_ENABLE)), yes)
45 TMK_COMMON_DEFS += -DISSI_ENABLE 39 TMK_COMMON_DEFS += -DISSI_ENABLE
@@ -53,18 +47,4 @@ ifeq ($(strip $(CAPSLOCK_LED)), yes)
53 TMK_COMMON_DEFS += -DCAPSLOCK_LED 47 TMK_COMMON_DEFS += -DCAPSLOCK_LED
54endif 48endif
55 49
56# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired 50DEFAULT_FOLDER = lfkeyboards/lfk78/revj
57# #
58# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
59# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
60# #
61# # Set to B, C or D
62# LFK_REV = D
63
64# ifeq ($(LFK_REV), B)
65# MCU = atmega32u4
66# else
67# MCU = at90usb1286
68# endif
69# OPT_DEFS += -DLFK_REV_$(LFK_REV)
70# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"