[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
This commit is contained in:
		@@ -15,68 +15,58 @@ You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_H
 | 
			
		||||
#define CONFIG_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "config_common.h"
 | 
			
		||||
 | 
			
		||||
/* USB Device descriptor parameter */
 | 
			
		||||
#define VENDOR_ID       0xFEED
 | 
			
		||||
#define PRODUCT_ID      0x6060
 | 
			
		||||
#define DEVICE_VER      0x0001
 | 
			
		||||
#define MANUFACTURER    LFKeyboards
 | 
			
		||||
#define PRODUCT         LFK78
 | 
			
		||||
#define DESCRIPTION     QMK keyboard firmware for LFK78 LFK_REV_STRING
 | 
			
		||||
#define DESCRIPTION     QMK keyboard firmware for LFK78
 | 
			
		||||
 | 
			
		||||
#ifdef LFK_REV_B
 | 
			
		||||
/* RevB Matrix config */
 | 
			
		||||
    #define DIODE_DIRECTION COL2ROW
 | 
			
		||||
    #define MATRIX_ROWS 10
 | 
			
		||||
    #define MATRIX_COLS 8
 | 
			
		||||
    #define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, F0, F1, F4, F5, F6}
 | 
			
		||||
    #define MATRIX_COL_PINS { E6, F7, D2, D3, D4, D5, D6, D7 }
 | 
			
		||||
    #define UNUSED_PINS { C7 }
 | 
			
		||||
    #define RGBLED_NUM 31     // Number of LEDs
 | 
			
		||||
#else
 | 
			
		||||
/* RevC/D Matrix config */
 | 
			
		||||
    #define DIODE_DIRECTION COL2ROW
 | 
			
		||||
    #define MATRIX_ROWS 5
 | 
			
		||||
    #define MATRIX_COLS 18
 | 
			
		||||
    #define MATRIX_ROW_PINS {D2, D3, D4, D5, D6 }
 | 
			
		||||
    #define MATRIX_COL_PINS {A0, A1, A2, A3, A4, A5, A6, A7, E6, E7,\
 | 
			
		||||
                             F0, F1, F2, F3, C0, C1, C2, C3 }
 | 
			
		||||
    #define UNUSED_PINS {B0, B1, B2, B3, B4, B4, B5, B6, B7, C4, C5, C6, C7,\
 | 
			
		||||
                         D0, D1, D7, E0, E1, E2, E3, E4, D5, F4, F5, F6, F7,\
 | 
			
		||||
                         E6, E7, F0, F1, F2, F3, C0, C1, C2, C3}
 | 
			
		||||
    #define RGBLED_NUM 27     // Number of LEDs
 | 
			
		||||
#endif
 | 
			
		||||
/* COL2ROW, ROW2COL*/
 | 
			
		||||
#define DIODE_DIRECTION COL2ROW
 | 
			
		||||
 | 
			
		||||
#define AUDIO_VOICES
 | 
			
		||||
#define C6_AUDIO
 | 
			
		||||
/*
 | 
			
		||||
 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
 | 
			
		||||
 */
 | 
			
		||||
#define SOFT_SERIAL_PIN D0  // or D1, D2, D3, E6
 | 
			
		||||
 | 
			
		||||
#define BACKLIGHT_LEVELS 8
 | 
			
		||||
#define BACKLIGHT_PWM_MAP {8, 16, 40, 55, 70, 128, 200, 255}
 | 
			
		||||
 | 
			
		||||
#define RGB_DI_PIN C7  // Have to set it to something to get the ws2812 code to compile
 | 
			
		||||
#define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
#define BACKLIGHT_PWM_MAP { 8, 16, 40, 55, 70, 128, 200, 255 }
 | 
			
		||||
 | 
			
		||||
#define TAPPING_TERM 200
 | 
			
		||||
 | 
			
		||||
#define C6_AUDIO
 | 
			
		||||
#define AUDIO_VOICES
 | 
			
		||||
 | 
			
		||||
#define RGB_DI_PIN C7 // Have to set it to something to get the ws2812 code to compile
 | 
			
		||||
#ifdef RGB_DI_PIN
 | 
			
		||||
#    define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#    define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#    define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
#    define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
			
		||||
#define DEBOUNCE 5
 | 
			
		||||
 | 
			
		||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
 | 
			
		||||
//#define MATRIX_HAS_GHOST
 | 
			
		||||
 | 
			
		||||
/* number of backlight levels */
 | 
			
		||||
 | 
			
		||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
			
		||||
#define LOCKING_SUPPORT_ENABLE
 | 
			
		||||
/* Locking resynchronize hack */
 | 
			
		||||
#define LOCKING_RESYNC_ENABLE
 | 
			
		||||
 | 
			
		||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
 | 
			
		||||
 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
 | 
			
		||||
 */
 | 
			
		||||
// #define GRAVE_ESC_CTRL_OVERRIDE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Force NKRO
 | 
			
		||||
 *
 | 
			
		||||
@@ -110,6 +100,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* key combination for magic key command */
 | 
			
		||||
/* defined by default; to change, uncomment and set to the combination you want */
 | 
			
		||||
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
 | 
			
		||||
 | 
			
		||||
/* control how magic key switches layers */
 | 
			
		||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
 | 
			
		||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
 | 
			
		||||
@@ -119,8 +113,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
 | 
			
		||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
 | 
			
		||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
 | 
			
		||||
//#define MAGIC_KEY_HELP1          H
 | 
			
		||||
//#define MAGIC_KEY_HELP2          SLASH
 | 
			
		||||
//#define MAGIC_KEY_HELP           H
 | 
			
		||||
//#define MAGIC_KEY_HELP_ALT       SLASH
 | 
			
		||||
//#define MAGIC_KEY_DEBUG          D
 | 
			
		||||
//#define MAGIC_KEY_DEBUG_MATRIX   X
 | 
			
		||||
//#define MAGIC_KEY_DEBUG_KBD      K
 | 
			
		||||
@@ -128,9 +122,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
//#define MAGIC_KEY_VERSION        V
 | 
			
		||||
//#define MAGIC_KEY_STATUS         S
 | 
			
		||||
//#define MAGIC_KEY_CONSOLE        C
 | 
			
		||||
//#define MAGIC_KEY_LAYER0_ALT1    ESC
 | 
			
		||||
//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
 | 
			
		||||
//#define MAGIC_KEY_LAYER0         0
 | 
			
		||||
//#define MAGIC_KEY_LAYER0_ALT     GRAVE
 | 
			
		||||
//#define MAGIC_KEY_LAYER1         1
 | 
			
		||||
//#define MAGIC_KEY_LAYER2         2
 | 
			
		||||
//#define MAGIC_KEY_LAYER3         3
 | 
			
		||||
@@ -140,9 +133,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
//#define MAGIC_KEY_LAYER7         7
 | 
			
		||||
//#define MAGIC_KEY_LAYER8         8
 | 
			
		||||
//#define MAGIC_KEY_LAYER9         9
 | 
			
		||||
//#define MAGIC_KEY_BOOTLOADER     PAUSE
 | 
			
		||||
//#define MAGIC_KEY_BOOTLOADER     B
 | 
			
		||||
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
 | 
			
		||||
//#define MAGIC_KEY_LOCK           CAPS
 | 
			
		||||
//#define MAGIC_KEY_EEPROM         E
 | 
			
		||||
//#define MAGIC_KEY_EEPROM_CLEAR   BSPACE
 | 
			
		||||
//#define MAGIC_KEY_NKRO           N
 | 
			
		||||
//#define MAGIC_KEY_SLEEP_LED      Z
 | 
			
		||||
 | 
			
		||||
@@ -161,7 +156,63 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
//#define NO_ACTION_LAYER
 | 
			
		||||
//#define NO_ACTION_TAPPING
 | 
			
		||||
//#define NO_ACTION_ONESHOT
 | 
			
		||||
//#define NO_ACTION_MACRO
 | 
			
		||||
//#define NO_ACTION_FUNCTION
 | 
			
		||||
 | 
			
		||||
/* disable these deprecated features by default */
 | 
			
		||||
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
 | 
			
		||||
  #define NO_ACTION_MACRO
 | 
			
		||||
  #define NO_ACTION_FUNCTION
 | 
			
		||||
#endif
 | 
			
		||||
/*
 | 
			
		||||
 * MIDI options
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Prevent use of disabled MIDI features in the keymap */
 | 
			
		||||
//#define MIDI_ENABLE_STRICT 1
 | 
			
		||||
 | 
			
		||||
/* enable basic MIDI features:
 | 
			
		||||
   - MIDI notes can be sent when in Music mode is on
 | 
			
		||||
*/
 | 
			
		||||
//#define MIDI_BASIC
 | 
			
		||||
 | 
			
		||||
/* enable advanced MIDI features:
 | 
			
		||||
   - MIDI notes can be added to the keymap
 | 
			
		||||
   - Octave shift and transpose
 | 
			
		||||
   - Virtual sustain, portamento, and modulation wheel
 | 
			
		||||
   - etc.
 | 
			
		||||
*/
 | 
			
		||||
//#define MIDI_ADVANCED
 | 
			
		||||
 | 
			
		||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 | 
			
		||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * HD44780 LCD Display Configuration
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
#define LCD_LINES           2     //< number of visible lines of the display
 | 
			
		||||
#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
 | 
			
		||||
 | 
			
		||||
#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
 | 
			
		||||
 | 
			
		||||
#if LCD_IO_MODE
 | 
			
		||||
#define LCD_PORT         PORTB        //< port for the LCD lines
 | 
			
		||||
#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
 | 
			
		||||
#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
 | 
			
		||||
#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
 | 
			
		||||
#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
 | 
			
		||||
#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
 | 
			
		||||
#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
 | 
			
		||||
#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
 | 
			
		||||
#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
 | 
			
		||||
#define LCD_RS_PORT      LCD_PORT     //< port for RS line
 | 
			
		||||
#define LCD_RS_PIN       3            //< pin  for RS line
 | 
			
		||||
#define LCD_RW_PORT      LCD_PORT     //< port for RW line
 | 
			
		||||
#define LCD_RW_PIN       2            //< pin  for RW line
 | 
			
		||||
#define LCD_E_PORT       LCD_PORT     //< port for Enable line
 | 
			
		||||
#define LCD_E_PIN        1            //< pin  for Enable line
 | 
			
		||||
#endif
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Bootmagic Lite key configuration */
 | 
			
		||||
// #define BOOTMAGIC_LITE_ROW 0
 | 
			
		||||
// #define BOOTMAGIC_LITE_COLUMN 0
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "keyboard_name": "LFK78/68",
 | 
			
		||||
  "url": "",
 | 
			
		||||
  "maintainer": "qmk",
 | 
			
		||||
  "width": 19.5,
 | 
			
		||||
  "height": 5,
 | 
			
		||||
  "layouts": {
 | 
			
		||||
    "LAYOUT": {
 | 
			
		||||
      "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}]
 | 
			
		||||
    },
 | 
			
		||||
    "LAYOUT_split_bs": {
 | 
			
		||||
      "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}]
 | 
			
		||||
    },
 | 
			
		||||
    "LAYOUT_split_rshift": {
 | 
			
		||||
      "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}]
 | 
			
		||||
    },
 | 
			
		||||
    "LAYOUT_iso": {
 | 
			
		||||
      "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}]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,111 +1,99 @@
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
enum keymap_layout {
 | 
			
		||||
    VANILLA = 0,  // matches MF68 layout
 | 
			
		||||
    FUNC,         // 0x02
 | 
			
		||||
    SETTINGS,     // 0x04
 | 
			
		||||
    VANILLA = 0, // matches MF68 layout
 | 
			
		||||
    FUNC,
 | 
			
		||||
    SETTINGS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Colors of the layer indicator LED
 | 
			
		||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
 | 
			
		||||
const Layer_Info layer_info[] = {
 | 
			
		||||
  // Layer     Mask           Red     Green   Blue
 | 
			
		||||
  {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
 | 
			
		||||
  {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
 | 
			
		||||
  {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
 | 
			
		||||
  {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
 | 
			
		||||
    // Layer      Mask          Red     Green   Blue
 | 
			
		||||
    { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
 | 
			
		||||
    { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
 | 
			
		||||
    { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
 | 
			
		||||
    { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } }  // unknown layer - REQUIRED - white
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
  /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
   * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa|  | Ins|PgUp|
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
   * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     \|  | Del|PgDn|
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  `---------'
 | 
			
		||||
   * | F5 | F6 |  |CAPS    |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  ,----.
 | 
			
		||||
   * | F7 | F8 |  |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift      |  | Up |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * | F9 | F10|  |Ctrl|Win |Alt |      Space            |Alt |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [VANILLA] = LAYOUT(
 | 
			
		||||
    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, \
 | 
			
		||||
    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, \
 | 
			
		||||
    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,                             \
 | 
			
		||||
    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,            \
 | 
			
		||||
    KC_F9,   KC_F10,  KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RCTL, MO(FUNC),          KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
     * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa|  | Ins|PgUp|
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
     * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     \|  | Del|PgDn|
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  `---------'
 | 
			
		||||
     * | F5 | F6 |  |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| Return |
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  ,----.
 | 
			
		||||
     * | F7 | F8 |  |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift      |  | Up |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * | F9 | F10|  |Ctrl|Win |Alt |      Space            |Alt |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [VANILLA] = LAYOUT(
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        KC_F9,   KC_F10,  KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RCTL, MO(FUNC),          KC_LEFT, KC_DOWN, KC_RGHT
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap FUNCTION: Function Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete   |  | Ins|Home|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
   * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
   * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
   * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |Ctrl|Win |Alt |        Enter         |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [FUNC] = LAYOUT(
 | 
			
		||||
    _______, _______, 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, \
 | 
			
		||||
    _______, _______, XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,               _______, KC_END,  \
 | 
			
		||||
    _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX,          XXXXXXX,                                 \
 | 
			
		||||
    _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,                   TG(SETTINGS),          _______,          \
 | 
			
		||||
    _______, _______, _______, _______, _______,                            KC_ENT,                             _______, _______, _______,               _______, _______, _______  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap FUNCTION: Function Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete   |  | Ins|Home|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
     * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
     * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
     * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |Ctrl|Win |Alt |        Enter         |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [FUNC] = LAYOUT(
 | 
			
		||||
        _______, _______, 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,
 | 
			
		||||
        _______, _______, XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,               _______, KC_END,
 | 
			
		||||
        _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX,          XXXXXXX,
 | 
			
		||||
        _______, _______, _______,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,          TG(SETTINGS),          _______,
 | 
			
		||||
        _______, _______, _______, _______, _______,                            KC_ENT,                             _______, _______, _______,               _______, _______, _______
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
   * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|BL Togl|  |RGB Tog |Val+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
   * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |LEDTst|  |RGB Mode|Val-|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
   * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
   * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
   */
 | 
			
		||||
  [SETTINGS] = LAYOUT(
 | 
			
		||||
    XXXXXXX, XXXXXXX, KC_FN0,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  BL_TOGG,          RGB_TOG, RGB_VAI, \
 | 
			
		||||
    XXXXXXX, XXXXXXX, MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RGB_MOD, RGB_VAD, \
 | 
			
		||||
    XXXXXXX, XXXXXXX, AU_TOG,  KC_FN1,  KC_FN3,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RESET,                              \
 | 
			
		||||
    XXXXXXX, XXXXXXX, KC_FN5,  KC_FN2,  KC_FN4,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX,          RGB_HUI,          \
 | 
			
		||||
    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,          RGB_SAD, RGB_HUD, RGB_SAI  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
     * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|BL Togl|  |RGB Tog |Val+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
     * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |LEDTst|  |RGB Mode|Val-|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
     * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
     * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
     */
 | 
			
		||||
    [SETTINGS] = LAYOUT(
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(0),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  BL_TOGG,          RGB_TOG, RGB_VAI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RGB_MOD, RGB_VAD,
 | 
			
		||||
        XXXXXXX, XXXXXXX, AU_TOG,  F(1),    F(3),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RESET,
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(5),             F(2),    F(4),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,          RGB_HUI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,          RGB_SAD, RGB_HUD, RGB_SAI
 | 
			
		||||
    )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM fn_actions[] = {
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),                               // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),                   // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),                    // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),                   // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER),                  // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE),                        // FN5 - Toggle audio click
 | 
			
		||||
  };
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),              // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),  // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),   // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),  // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE)        // FN5 - Toggle audio click
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void matrix_init_user(void) {
 | 
			
		||||
    // This keymap only has a single base layer, so reset the default if needed
 | 
			
		||||
    if(eeconfig_read_default_layer() > 1){
 | 
			
		||||
    if (eeconfig_read_default_layer() > 1) {
 | 
			
		||||
        eeconfig_update_default_layer(1);
 | 
			
		||||
        default_layer_set(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_set_user(uint8_t usb_led) {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
# Build Options
 | 
			
		||||
#   change to "no" to disable the options, or define them in the Makefile in
 | 
			
		||||
#   the appropriate keymap folder that will get included automatically
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BOOTMAGIC_ENABLE = no           # Virtual DIP switch configuration
 | 
			
		||||
MOUSEKEY_ENABLE = no            # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes           # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no             # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no             # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes               # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
			
		||||
BACKLIGHT_ENABLE = yes          # Enable keyboard backlight functionality
 | 
			
		||||
MIDI_ENABLE = no                # MIDI controls
 | 
			
		||||
AUDIO_ENABLE = yes               # Audio output on port C6
 | 
			
		||||
UNICODE_ENABLE = no             # Unicode
 | 
			
		||||
BLUETOOTH_ENABLE = no           # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
			
		||||
RGBLIGHT_ENABLE = yes           # Enable WS2812 RGB underlight.
 | 
			
		||||
RGBLIGHT_CUSTOM_DRIVER = yes    # RGB code is implemented in lefkeyboards, not qmk base
 | 
			
		||||
SLEEP_LED_ENABLE = yes          # Breathing sleep LED during USB suspend
 | 
			
		||||
TAP_DANCE_ENABLE = no
 | 
			
		||||
 | 
			
		||||
ISSI_ENABLE = yes               # If the I2C pullup resistors aren't install this must be disabled
 | 
			
		||||
WATCHDOG_ENABLE = no            # Resets keyboard if matrix_scan isn't run every 250ms
 | 
			
		||||
CAPSLOCK_LED = no              # Toggle back light LED of Caps Lock
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Override the LFK78 hardware version:
 | 
			
		||||
#
 | 
			
		||||
# B   - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# J   - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# LFK_REV = J
 | 
			
		||||
@@ -2,112 +2,98 @@
 | 
			
		||||
 | 
			
		||||
enum keymap_layout {
 | 
			
		||||
    VANILLA = 0,  // matches MF68 layout
 | 
			
		||||
    FUNC,         // 0x02
 | 
			
		||||
    SETTINGS,     // 0x04
 | 
			
		||||
    FUNC,
 | 
			
		||||
    SETTINGS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Colors of the layer indicator LED
 | 
			
		||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
 | 
			
		||||
const Layer_Info layer_info[] = {
 | 
			
		||||
  // Layer     Mask           Red     Green   Blue
 | 
			
		||||
  {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
 | 
			
		||||
  {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
 | 
			
		||||
  {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
 | 
			
		||||
  {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
 | 
			
		||||
    // Layer      Mask          Red     Green   Blue
 | 
			
		||||
    { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
 | 
			
		||||
    { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
 | 
			
		||||
    { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
 | 
			
		||||
    { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } }  // unknown layer - REQUIRED - white
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
  /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
   * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa|  | Ins|PgUp|
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
   * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  Ret|  | Del|PgDn|
 | 
			
		||||
   * |---------|  |--------------------------------------------------------.  |  `---------'
 | 
			
		||||
   * | F5 | F6 |  |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  # |  |
 | 
			
		||||
   * |---------|  |-----------------------------------------------------------|  ,----.
 | 
			
		||||
   * | F7 | F8 |  |Shft| \ |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |  | Up |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * | F9 | F10|  |Ctrl|Win |Alt |      Space            |Alt |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [VANILLA] = LAYOUT_iso(
 | 
			
		||||
    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, \
 | 
			
		||||
    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, \
 | 
			
		||||
    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,                                      \
 | 
			
		||||
    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,            \
 | 
			
		||||
    KC_F9,  KC_F10,   KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RCTL, MO(FUNC),          KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
     * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa|  | Ins|PgUp|
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
     * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  Ret|  | Del|PgDn|
 | 
			
		||||
     * |---------|  |--------------------------------------------------------.  |  `---------'
 | 
			
		||||
     * | F5 | F6 |  |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  # |  |
 | 
			
		||||
     * |---------|  |-----------------------------------------------------------|  ,----.
 | 
			
		||||
     * | F7 | F8 |  |Shft| \ |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |  | Up |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * | F9 | F10|  |Ctrl|Win |Alt |      Space            |Alt |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [VANILLA] = LAYOUT_iso(
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        KC_F9,   KC_F10,  KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RCTL, MO(FUNC),          KC_LEFT, KC_DOWN, KC_RGHT
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap FUNCTION: Function Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete   |  | Ins|Home|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
   * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
   * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
   * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |Ctrl|Win |Alt |        PgD            |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [FUNC] = LAYOUT(
 | 
			
		||||
    _______, _______, 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, \
 | 
			
		||||
    _______, _______, XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,      XXXXXXX,          _______, KC_END,  \
 | 
			
		||||
    _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,                                          \
 | 
			
		||||
    _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,          TG(SETTINGS),                   _______,          \
 | 
			
		||||
    _______, _______, _______, _______, _______,                            KC_PGDN,                            _______, _______, _______,               _______, _______, _______  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap FUNCTION: Function Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete   |  | Ins|Home|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
     * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
     * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
     * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |Ctrl|Win |Alt |        PgD            |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [FUNC] = LAYOUT_iso(
 | 
			
		||||
        _______, _______, 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,
 | 
			
		||||
        _______, _______, XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,               _______, KC_END,
 | 
			
		||||
        _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,
 | 
			
		||||
        _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,          TG(SETTINGS),          _______,
 | 
			
		||||
        _______, _______, _______, _______, _______,                            KC_PGDN,                            _______, _______, _______,               _______, _______, _______
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
   * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|BL Togl|  |RGB Tog |Val+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
   * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |LEDTst|  |RGB Mode|Val-|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
   * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
   * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
   */
 | 
			
		||||
  [SETTINGS] = LAYOUT(
 | 
			
		||||
    XXXXXXX, XXXXXXX, KC_FN0,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  BL_TOGG,          RGB_TOG, RGB_VAI, \
 | 
			
		||||
    XXXXXXX, XXXXXXX, MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RGB_MOD, RGB_VAD, \
 | 
			
		||||
    XXXXXXX, XXXXXXX, AU_TOG,  KC_FN1,  KC_FN3,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,                                       \
 | 
			
		||||
    XXXXXXX, XXXXXXX, KC_FN5,  KC_FN2,  KC_FN4,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,                   RGB_HUI,          \
 | 
			
		||||
    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,          RGB_SAD, RGB_HUD, RGB_SAI  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
     * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|BL Togl|  |RGB Tog |Val+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
     * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |LEDTst|  |RGB Mode|Val-|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
     * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
     * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
     */
 | 
			
		||||
    [SETTINGS] = LAYOUT_iso(
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(0),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  BL_TOGG,          RGB_TOG, RGB_VAI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RGB_MOD, RGB_VAD,
 | 
			
		||||
        XXXXXXX, XXXXXXX, AU_TOG,  F(1),    F(3),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(5),    F(2),    F(4),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,          RGB_HUI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,          RGB_SAD, RGB_HUD, RGB_SAI
 | 
			
		||||
    )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM fn_actions[] = {
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),                               // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),                   // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),                    // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),                   // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER),                  // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE),                        // FN5 - Toggle audio click
 | 
			
		||||
  };
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),              // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),  // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),   // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),  // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE)        // FN5 - Toggle audio click
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void matrix_init_user(void) {
 | 
			
		||||
    // This keymap only has a single base layer, so reset the default if needed
 | 
			
		||||
    if(eeconfig_read_default_layer() > 1){
 | 
			
		||||
    if (eeconfig_read_default_layer() > 1) {
 | 
			
		||||
        eeconfig_update_default_layer(1);
 | 
			
		||||
        default_layer_set(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_set_user(uint8_t usb_led) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
# The default keymap for bluepad
 | 
			
		||||
# The default ISO keymap for LFK78
 | 
			
		||||
 
 | 
			
		||||
@@ -1,41 +0,0 @@
 | 
			
		||||
# Build Options
 | 
			
		||||
#   change to "no" to disable the options, or define them in the Makefile in
 | 
			
		||||
#   the appropriate keymap folder that will get included automatically
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BOOTMAGIC_ENABLE = no           # Virtual DIP switch configuration
 | 
			
		||||
MOUSEKEY_ENABLE = no            # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes           # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = yes             # Console for debug
 | 
			
		||||
COMMAND_ENABLE = yes             # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes               # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
			
		||||
BACKLIGHT_ENABLE = yes          # Enable keyboard backlight functionality
 | 
			
		||||
MIDI_ENABLE = no                # MIDI controls
 | 
			
		||||
AUDIO_ENABLE = yes               # Audio output on port C6
 | 
			
		||||
UNICODE_ENABLE = no             # Unicode
 | 
			
		||||
BLUETOOTH_ENABLE = no           # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
			
		||||
RGBLIGHT_ENABLE = yes           # Enable WS2812 RGB underlight.
 | 
			
		||||
RGBLIGHT_CUSTOM_DRIVER = yes    # RGB code is implemented in lefkeyboards, not qmk base
 | 
			
		||||
SLEEP_LED_ENABLE = yes          # Breathing sleep LED during USB suspend
 | 
			
		||||
TAP_DANCE_ENABLE = no
 | 
			
		||||
 | 
			
		||||
ISSI_ENABLE = yes           # If the I2C pullup resistors aren't install this must be disabled
 | 
			
		||||
WATCHDOG_ENABLE = no       # Resets keyboard if matrix_scan isn't run every 250ms
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
 | 
			
		||||
# #
 | 
			
		||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# #
 | 
			
		||||
# # Set to B, C or D
 | 
			
		||||
# LFK_REV = D
 | 
			
		||||
 | 
			
		||||
# ifeq ($(LFK_REV), B)
 | 
			
		||||
#   MCU = atmega32u4
 | 
			
		||||
# else
 | 
			
		||||
#   MCU = at90usb1286
 | 
			
		||||
# endif
 | 
			
		||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
 | 
			
		||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
 | 
			
		||||
@@ -2,110 +2,98 @@
 | 
			
		||||
 | 
			
		||||
enum keymap_layout {
 | 
			
		||||
    VANILLA = 0,  // matches MF68 layout
 | 
			
		||||
    FUNC,         // 0x02
 | 
			
		||||
    SETTINGS,     // 0x04
 | 
			
		||||
    FUNC,
 | 
			
		||||
    SETTINGS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Colors of the layer indicator LED
 | 
			
		||||
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
 | 
			
		||||
const Layer_Info layer_info[] = {
 | 
			
		||||
  // Layer     Mask           Red     Green   Blue
 | 
			
		||||
  {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
 | 
			
		||||
  {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
 | 
			
		||||
  {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
 | 
			
		||||
  {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
 | 
			
		||||
    // Layer      Mask          Red     Green   Blue
 | 
			
		||||
    { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
 | 
			
		||||
    { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
 | 
			
		||||
    { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
 | 
			
		||||
    { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } }  // unknown layer - REQUIRED - white
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
  /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
   * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = | / | ` |  | Ins|PgUp|
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
   * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Backsp|  | Del|PgDn|
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  `---------'
 | 
			
		||||
   * | F5 | F6 |  |CAPS    |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
 | 
			
		||||
   * |---------|  |------------------------------------------------------------|  ,----.
 | 
			
		||||
   * | F7 | F8 |  |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift      |  | Up |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * | F9 | F10|  |Ctrl|Alt |Cmd |      Space            |Cmd |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [VANILLA] = LAYOUT_split_bs(
 | 
			
		||||
    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, \
 | 
			
		||||
    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, \
 | 
			
		||||
    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,                                      \
 | 
			
		||||
    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,            \
 | 
			
		||||
    KC_F9,   KC_F10,    KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_RGUI, KC_RCTL, MO(FUNC),                   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap VANILLA: (Base Layer) Default Layer
 | 
			
		||||
     * ,---------.  ,------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * | F1 | F2 |  |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = | / | ` |  | Ins|PgUp|
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  |---------|
 | 
			
		||||
     * | F3 | F4 |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Backsp|  | Del|PgDn|
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  `---------'
 | 
			
		||||
     * | F5 | F6 |  |CAPS    |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
 | 
			
		||||
     * |---------|  |------------------------------------------------------------|  ,----.
 | 
			
		||||
     * | F7 | F8 |  |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift      |  | Up |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * | F9 | F10|  |Ctrl|Alt |Cmd |      Space            |Cmd |Ctrl|Func |    |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'    `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [VANILLA] = LAYOUT_split_bs(
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        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,
 | 
			
		||||
        KC_F9,   KC_F10,  KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_RGUI, KC_RCTL, MO(FUNC),                   KC_LEFT, KC_DOWN, KC_RGHT
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap FUNCTION: Function Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
   * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del |  | Ins|Home|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
   * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
   * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
   * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |Ctrl|Alt |Cmd |        Enter         |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
   * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
   */
 | 
			
		||||
  [FUNC] = LAYOUT_split_bs(
 | 
			
		||||
    _______, _______,   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, \
 | 
			
		||||
    _______, _______,   XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                       _______, KC_END,  \
 | 
			
		||||
    _______, _______,   _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX,          XXXXXXX,                                         \
 | 
			
		||||
    _______, _______,   _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,                   TG(SETTINGS),                  _______,          \
 | 
			
		||||
    _______, _______,   _______, _______, _______,                            KC_ENT,                             _______, _______, _______,                       _______, _______, _______  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap FUNCTION: Function Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,---------.
 | 
			
		||||
     * |    |    |  | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del |  | Ins|Home|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |---------|
 | 
			
		||||
     * |    |    |  |Tab  |Hom| Up|End|PgU|   |   |   |   |   |   |   |   |       |  | Del|End |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `---------'
 | 
			
		||||
     * |    |    |  |MO(FUNC)|Lft|Dn |Rig|PgD|   |Lft|Dwn| Up|Rgt|   |   |        |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |Shift   |   |   |   |   |   |   |Mute|V- |V+ |  |TG(SETTINGS)|  | Up |
 | 
			
		||||
     * |---------|  |--------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |Ctrl|Alt |Cmd |        Enter         |Alt |Func |CTRL |     |Lft| Dn |Rig |
 | 
			
		||||
     * `---------'  `------------------------------------------------------'     `-------------'
 | 
			
		||||
     */
 | 
			
		||||
    [FUNC] = LAYOUT_split_bs(
 | 
			
		||||
        _______, _______, 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,
 | 
			
		||||
        _______, _______, XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                       _______, KC_END,
 | 
			
		||||
        _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, XXXXXXX, XXXXXXX,          XXXXXXX,
 | 
			
		||||
        _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,                   TG(SETTINGS),                  _______,
 | 
			
		||||
        _______, _______, _______, _______, _______,                            KC_ENT,                             _______, _______, _______,                       _______, _______, _______
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
  /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
   * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
   * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|   |   |  |RGB Tog |Val+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
   * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |BLTogl|  |RGB Mode|Val-|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
   * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
   * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
   * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
   * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
   * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
   */
 | 
			
		||||
  [SETTINGS] = LAYOUT_split_bs(
 | 
			
		||||
    XXXXXXX, XXXXXXX,   KC_FN0,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  XXXXXXX, XXXXXXX,          RGB_TOG, RGB_VAI, \
 | 
			
		||||
    XXXXXXX, XXXXXXX,   MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG,                   RGB_MOD, RGB_VAD, \
 | 
			
		||||
    XXXXXXX, XXXXXXX,   AU_TOG,  KC_FN1,  KC_FN3,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RESET,                                       \
 | 
			
		||||
    XXXXXXX, XXXXXXX,   KC_FN5,  KC_FN2,  KC_FN4,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX,                   RGB_HUI,          \
 | 
			
		||||
    XXXXXXX, XXXXXXX,   XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,                   RGB_SAD, RGB_HUD, RGB_SAI  \
 | 
			
		||||
  ),
 | 
			
		||||
    /* Keymap SETTINGS: Settings Layer
 | 
			
		||||
     * ,---------.  ,-------------------------------------------------------------.  ,-------------.
 | 
			
		||||
     * |    |    |  |LayClr|   |   |   |   |   |   |   |   |  |   |BL-|BL+|   |   |  |RGB Tog |Val+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  |-------------|
 | 
			
		||||
     * |    |    |  |MuMode |   |   |   |   |   |   |   |   |   |   |   |  |BLTogl|  |RGB Mode|Val-|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  `-------------'
 | 
			
		||||
     * |    |    |  |AudTgl   |Hz+|MS+|   |   |   |   |   |   |   |   |   |  RST  |
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------|  ,----.
 | 
			
		||||
     * |    |    |  |ClickTgl  |Hz-|MS-|   |   |   |   |MuTgl|  |  |   |Layer Clr |  |Hue+|
 | 
			
		||||
     * |---------|  |-------------------------------------------------------------------------.
 | 
			
		||||
     * |    |    |  |    |    |    |                         |    |    |     |  |Sat-|Hue-|Sat+|
 | 
			
		||||
     * `---------'  `--------------------------------------------------------'  `--------------'
 | 
			
		||||
     */
 | 
			
		||||
    [SETTINGS] = LAYOUT_split_bs(
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(0),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_INC,  XXXXXXX, XXXXXXX,          RGB_TOG, RGB_VAI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, MU_MOD,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG,                   RGB_MOD, RGB_VAD,
 | 
			
		||||
        XXXXXXX, XXXXXXX, AU_TOG,  F(1),    F(3),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          RESET,
 | 
			
		||||
        XXXXXXX, XXXXXXX, F(5),    F(2),    F(4),    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOG,  XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX,                   RGB_HUI,
 | 
			
		||||
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX,                   RGB_SAD, RGB_HUD, RGB_SAI
 | 
			
		||||
    )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM fn_actions[] = {
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),                               // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),                   // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),                    // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),                   // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER),                  // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE),                        // FN5 - Toggle audio click
 | 
			
		||||
  };
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLEAR),              // FN0 - reset layers
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER),  // FN1 - Increase Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER),   // FN2 - Decrease Freq of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_LONGER),  // FN3 - Increase length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
 | 
			
		||||
    ACTION_FUNCTION(LFK_CLICK_TOGGLE)        // FN5 - Toggle audio click
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void matrix_init_user(void) {
 | 
			
		||||
    // This keymap only has a single base layer, so reset the default if needed
 | 
			
		||||
    if(eeconfig_read_default_layer() > 1){
 | 
			
		||||
    if (eeconfig_read_default_layer() > 1) {
 | 
			
		||||
        eeconfig_update_default_layer(1);
 | 
			
		||||
        default_layer_set(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_set_user(uint8_t usb_led) {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
# Build Options
 | 
			
		||||
#   change to "no" to disable the options, or define them in the Makefile in
 | 
			
		||||
#   the appropriate keymap folder that will get included automatically
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BOOTMAGIC_ENABLE = no           # Virtual DIP switch configuration
 | 
			
		||||
MOUSEKEY_ENABLE = no            # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes           # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no             # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no             # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes               # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
			
		||||
BACKLIGHT_ENABLE = yes          # Enable keyboard backlight functionality
 | 
			
		||||
MIDI_ENABLE = no                # MIDI controls
 | 
			
		||||
AUDIO_ENABLE = yes               # Audio output on port C6
 | 
			
		||||
UNICODE_ENABLE = no             # Unicode
 | 
			
		||||
BLUETOOTH_ENABLE = no           # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
			
		||||
RGBLIGHT_ENABLE = yes           # Enable WS2812 RGB underlight.
 | 
			
		||||
RGBLIGHT_CUSTOM_DRIVER = yes    # RGB code is implemented in lefkeyboards, not qmk base
 | 
			
		||||
SLEEP_LED_ENABLE = yes          # Breathing sleep LED during USB suspend
 | 
			
		||||
TAP_DANCE_ENABLE = no
 | 
			
		||||
 | 
			
		||||
ISSI_ENABLE = yes               # If the I2C pullup resistors aren't install this must be disabled
 | 
			
		||||
WATCHDOG_ENABLE = no            # Resets keyboard if matrix_scan isn't run every 250ms
 | 
			
		||||
CAPSLOCK_LED = no              # Toggle back light LED of Caps Lock
 | 
			
		||||
 | 
			
		||||
# Override the LFK78 hardware version:
 | 
			
		||||
#
 | 
			
		||||
# B   - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# J   - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# LFK_REV = J
 | 
			
		||||
@@ -1,13 +1,11 @@
 | 
			
		||||
#include <avr/sfr_defs.h>
 | 
			
		||||
#include "lfk78.h"
 | 
			
		||||
 | 
			
		||||
#include <avr/timer_avr.h>
 | 
			
		||||
#include <avr/wdt.h>
 | 
			
		||||
#include "lfk78.h"
 | 
			
		||||
#include "keymap.h"
 | 
			
		||||
#include <audio/audio.h>
 | 
			
		||||
#include "issi.h"
 | 
			
		||||
#include "TWIlib.h"
 | 
			
		||||
#include "lighting.h"
 | 
			
		||||
#include "debug.h"
 | 
			
		||||
#include <audio/audio.h>
 | 
			
		||||
 | 
			
		||||
uint16_t click_hz = CLICK_HZ;
 | 
			
		||||
uint16_t click_time = CLICK_MS;
 | 
			
		||||
@@ -15,85 +13,91 @@ uint8_t click_toggle = CLICK_ENABLED;
 | 
			
		||||
 | 
			
		||||
__attribute__((weak))
 | 
			
		||||
const Layer_Info layer_info[] = {
 | 
			
		||||
  // Layer     Mask           Red     Green   Blue
 | 
			
		||||
  {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
 | 
			
		||||
  {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
 | 
			
		||||
  {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
 | 
			
		||||
  {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
 | 
			
		||||
    // Layer      Mask          Red     Green   Blue
 | 
			
		||||
    { 0x00000000, 0xFFFFFFFF, { 0x0000, 0x0FFF, 0x0000 } }, // base layer - green
 | 
			
		||||
    { 0x00000002, 0xFFFFFFFE, { 0x0000, 0x0000, 0x0FFF } }, // function layer - blue
 | 
			
		||||
    { 0x00000004, 0xFFFFFFFC, { 0x0FFF, 0x0000, 0x0FFF } }, // settings layer - magenta
 | 
			
		||||
    { 0xFFFFFFFF, 0xFFFFFFFF, { 0x0FFF, 0x0FFF, 0x0FFF } }  // unknown layer - REQUIRED - white
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void matrix_init_kb(void)
 | 
			
		||||
{
 | 
			
		||||
void matrix_init_kb(void) {
 | 
			
		||||
    matrix_init_user();
 | 
			
		||||
 | 
			
		||||
    // Configure the Layer LED
 | 
			
		||||
    // Set up 16 bit PWM: Fast PWM, mode 15, inverted
 | 
			
		||||
    TCCR1A = 0b11111110;
 | 
			
		||||
    TCCR1B = 0b00011001;
 | 
			
		||||
    // Set up 16 bit PWM: Fast PWM, mode 14, inverted
 | 
			
		||||
    TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0) | _BV(COM1C1) | _BV(COM1C0) | _BV(WGM11);
 | 
			
		||||
    TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
 | 
			
		||||
    ICR1 = 0xFFFF;
 | 
			
		||||
    // PWM values - 0xFFFF = off, 0x0000 = max
 | 
			
		||||
    OCR1C = 0x0000; // B7 - Blue
 | 
			
		||||
    OCR1B = 0x0000; // B6 - Green
 | 
			
		||||
    OCR1A = 0x0FFF; // B5 - Red
 | 
			
		||||
    OCR1B = 0x0000; // B6 - Green
 | 
			
		||||
    OCR1C = 0x0000; // B7 - Blue
 | 
			
		||||
    // Set as output
 | 
			
		||||
    DDRB |= 0b11100000;
 | 
			
		||||
    setPinOutput(B5);
 | 
			
		||||
    setPinOutput(B6);
 | 
			
		||||
    setPinOutput(B7);
 | 
			
		||||
 | 
			
		||||
#ifndef AUDIO_ENABLE
 | 
			
		||||
    // If we're not using the audio pin, drive it low
 | 
			
		||||
    sbi(DDRC, 6);
 | 
			
		||||
    cbi(PORTC, 6);
 | 
			
		||||
    setPinOutput(C6);
 | 
			
		||||
    writePinLow(C6);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef ISSI_ENABLE
 | 
			
		||||
    issi_init();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WATCHDOG_ENABLE
 | 
			
		||||
    // This is done after turning the layer LED red, if we're caught in a loop
 | 
			
		||||
    // we should get a flashing red light
 | 
			
		||||
    wdt_enable(WDTO_500MS);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_kb(void)
 | 
			
		||||
{
 | 
			
		||||
void matrix_scan_kb(void) {
 | 
			
		||||
#ifdef WATCHDOG_ENABLE
 | 
			
		||||
    wdt_reset();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef ISSI_ENABLE
 | 
			
		||||
    // switch/underglow lighting update
 | 
			
		||||
    static uint32_t issi_device = 0;
 | 
			
		||||
    static uint32_t twi_last_ready = 0;
 | 
			
		||||
    if(twi_last_ready > 1000){
 | 
			
		||||
        // Its been way too long since the last ISSI update, reset the I2C bus and start again
 | 
			
		||||
 | 
			
		||||
    if (twi_last_ready > 1000) {
 | 
			
		||||
        // It's been way too long since the last ISSI update, reset the I2C bus and start again
 | 
			
		||||
        dprintf("TWI failed to recover, TWI re-init\n");
 | 
			
		||||
        twi_last_ready = 0;
 | 
			
		||||
        TWIInit();
 | 
			
		||||
        force_issi_refresh();
 | 
			
		||||
    }
 | 
			
		||||
    if(isTWIReady()){
 | 
			
		||||
 | 
			
		||||
    if (isTWIReady()) {
 | 
			
		||||
        twi_last_ready = 0;
 | 
			
		||||
        // If the i2c bus is available, kick off the issi update, alternate between devices
 | 
			
		||||
        update_issi(issi_device, issi_device);
 | 
			
		||||
        if(issi_device){
 | 
			
		||||
 | 
			
		||||
        if (issi_device) {
 | 
			
		||||
            issi_device = 0;
 | 
			
		||||
        }else{
 | 
			
		||||
        } else {
 | 
			
		||||
            issi_device = 3;
 | 
			
		||||
        }
 | 
			
		||||
    }else{
 | 
			
		||||
    } else {
 | 
			
		||||
        twi_last_ready++;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // Update layer indicator LED
 | 
			
		||||
    //
 | 
			
		||||
    // Not sure how else to reliably do this... TMK has the 'hook_layer_change'
 | 
			
		||||
    // but can't find QMK equiv
 | 
			
		||||
    static uint32_t layer_indicator = -1;
 | 
			
		||||
    if(layer_indicator != layer_state){
 | 
			
		||||
        for(uint32_t i=0;; i++){
 | 
			
		||||
 | 
			
		||||
    if (layer_indicator != layer_state) {
 | 
			
		||||
        for (uint32_t i = 0; ; i++) {
 | 
			
		||||
            // the layer_info list should end with layer 0xFFFFFFFF
 | 
			
		||||
            // it will break this out of the loop and define the unknown layer color
 | 
			
		||||
            if((layer_info[i].layer == (layer_state & layer_info[i].mask)) || (layer_info[i].layer == 0xFFFFFFFF)){
 | 
			
		||||
            if ((layer_info[i].layer == (layer_state & layer_info[i].mask)) || (layer_info[i].layer == 0xFFFFFFFF)) {
 | 
			
		||||
                OCR1A = layer_info[i].color.red;
 | 
			
		||||
                OCR1B = layer_info[i].color.green;
 | 
			
		||||
                OCR1C = layer_info[i].color.blue;
 | 
			
		||||
@@ -102,14 +106,15 @@ void matrix_scan_kb(void)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    matrix_scan_user();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void click(uint16_t freq, uint16_t duration){
 | 
			
		||||
void click(uint16_t freq, uint16_t duration) {
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
    if(freq >= 100 && freq <= 20000 && duration < 100){
 | 
			
		||||
    if (freq >= 100 && freq <= 20000 && duration < 100) {
 | 
			
		||||
        play_note(freq, 10);
 | 
			
		||||
        for (uint16_t i = 0; i < duration; i++){
 | 
			
		||||
        for (uint16_t i = 0; i < duration; i++) {
 | 
			
		||||
            _delay_ms(1);
 | 
			
		||||
        }
 | 
			
		||||
        stop_all_notes();
 | 
			
		||||
@@ -117,35 +122,37 @@ void click(uint16_t freq, uint16_t duration){
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_kb(uint16_t keycode, keyrecord_t* record)
 | 
			
		||||
{
 | 
			
		||||
    if (click_toggle && record->event.pressed){
 | 
			
		||||
bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
    if (click_toggle && record->event.pressed) {
 | 
			
		||||
        click(click_hz, click_time);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (keycode == RESET) {
 | 
			
		||||
        reset_keyboard_kb();
 | 
			
		||||
    } else {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return process_record_user(keycode, record);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
 | 
			
		||||
{
 | 
			
		||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) {
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
    int8_t sign = 1;
 | 
			
		||||
#endif
 | 
			
		||||
    if(id == LFK_ESC_TILDE){
 | 
			
		||||
 | 
			
		||||
    if (id == LFK_ESC_TILDE) {
 | 
			
		||||
        // Send ~ on shift-esc
 | 
			
		||||
        void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
 | 
			
		||||
        uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
 | 
			
		||||
        if(layer_state == 0){
 | 
			
		||||
 | 
			
		||||
        if (layer_state == 0) {
 | 
			
		||||
            method(shifted ? KC_GRAVE : KC_ESCAPE);
 | 
			
		||||
        }else{
 | 
			
		||||
        } else {
 | 
			
		||||
            method(shifted ? KC_ESCAPE : KC_GRAVE);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        send_keyboard_report();
 | 
			
		||||
    }else if(event->event.pressed){
 | 
			
		||||
        switch(id){
 | 
			
		||||
    } else if (event->event.pressed) {
 | 
			
		||||
        switch (id) {
 | 
			
		||||
            case LFK_SET_DEFAULT_LAYER:
 | 
			
		||||
                // set/save the current base layer to eeprom, falls through to LFK_CLEAR
 | 
			
		||||
                eeconfig_update_default_layer(1UL << opt);
 | 
			
		||||
@@ -161,24 +168,24 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
            case LFK_CLICK_FREQ_LOWER:
 | 
			
		||||
                sign = -1;  // continue to next statement
 | 
			
		||||
                sign = -1; // continue to next statement
 | 
			
		||||
            case LFK_CLICK_FREQ_HIGHER:
 | 
			
		||||
                click_hz += sign * 100;
 | 
			
		||||
                click(click_hz, click_time);
 | 
			
		||||
                break;
 | 
			
		||||
            case LFK_CLICK_TOGGLE:
 | 
			
		||||
                if(click_toggle){
 | 
			
		||||
                if (click_toggle) {
 | 
			
		||||
                    click_toggle = 0;
 | 
			
		||||
                    click(4000, 100);
 | 
			
		||||
                    click(1000, 100);
 | 
			
		||||
                }else{
 | 
			
		||||
                } else {
 | 
			
		||||
                    click_toggle = 1;
 | 
			
		||||
                    click(1000, 100);
 | 
			
		||||
                    click(4000, 100);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            case LFK_CLICK_TIME_SHORTER:
 | 
			
		||||
                sign = -1;  // continue to next statement
 | 
			
		||||
                sign = -1; // continue to next statement
 | 
			
		||||
            case LFK_CLICK_TIME_LONGER:
 | 
			
		||||
                click_time += sign;
 | 
			
		||||
                click(click_hz, click_time);
 | 
			
		||||
@@ -194,49 +201,52 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void reset_keyboard_kb(){
 | 
			
		||||
void reset_keyboard_kb() {
 | 
			
		||||
#ifdef WATCHDOG_ENABLE
 | 
			
		||||
    MCUSR = 0;
 | 
			
		||||
    wdt_disable();
 | 
			
		||||
    wdt_reset();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    OCR1A = 0x0000; // B5 - Red
 | 
			
		||||
    OCR1B = 0x0FFF; // B6 - Green
 | 
			
		||||
    OCR1C = 0x0FFF; // B7 - Blue
 | 
			
		||||
 | 
			
		||||
    reset_keyboard();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_set_kb(uint8_t usb_led)
 | 
			
		||||
{
 | 
			
		||||
void led_set_kb(uint8_t usb_led) {
 | 
			
		||||
    // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
 | 
			
		||||
#ifdef ISSI_ENABLE
 | 
			
		||||
#ifdef CAPSLOCK_LED
 | 
			
		||||
#    ifdef CAPSLOCK_LED
 | 
			
		||||
    if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
 | 
			
		||||
        activateLED(0, 3, 7, 255);
 | 
			
		||||
    }else{
 | 
			
		||||
    } else {
 | 
			
		||||
        activateLED(0, 3, 7, 0);
 | 
			
		||||
    }
 | 
			
		||||
#endif // CAPSLOCK_LED
 | 
			
		||||
#    endif // CAPSLOCK_LED
 | 
			
		||||
#endif // ISS_ENABLE
 | 
			
		||||
 | 
			
		||||
    led_set_user(usb_led);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LFK lighting info
 | 
			
		||||
const uint8_t switch_matrices[] = {0, 1};
 | 
			
		||||
const uint8_t rgb_matrices[] = {6, 7};
 | 
			
		||||
const uint8_t switch_matrices[] = { 0, 1 };
 | 
			
		||||
const uint8_t rgb_matrices[] = { 6, 7 };
 | 
			
		||||
const uint8_t rgb_sequence[] = {
 | 
			
		||||
    12, 11, 10, 9, 16, 32, 31, 30, 28, 25, 24, 22, 21,
 | 
			
		||||
    20, 19, 18, 17, 1, 2, 3, 4, 5, 6, 7, 8, 14, 13
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Maps switch LEDs from Row/Col to ISSI matrix.
 | 
			
		||||
// Value breakdown:
 | 
			
		||||
//     Bit     | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
 | 
			
		||||
//            /    \ ISSI Col  |    ISSI Row   |
 | 
			
		||||
//          matrix idx
 | 
			
		||||
const uint8_t switch_leds[MATRIX_ROWS][MATRIX_COLS] =
 | 
			
		||||
LAYOUT(
 | 
			
		||||
  0x19, 0x18,   0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94,   0x93,   0x92, 0x91,
 | 
			
		||||
  0x29, 0x28,    0x27,  0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0xA9, 0xA8, 0xA7, 0xA6, 0xA5, 0xA4, 0xA3,   0xA2, 0xA1,
 | 
			
		||||
  0x39, 0x38,      0x37,  0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0xB9, 0xB8, 0xB7, 0xB6, 0xB5,     0xB3,
 | 
			
		||||
  0x49, 0x48,    0x47,     0x45, 0x44, 0x43, 0x42, 0x41, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5,          0xC4,   0xC2,
 | 
			
		||||
  0x59, 0x58,   0x57,  0x56,  0x55,             0x51,                   0xD6, 0xE5, 0xE4,         0xE3, 0xE2, 0xE1);
 | 
			
		||||
const uint8_t switch_leds[MATRIX_ROWS][MATRIX_COLS] = LAYOUT(
 | 
			
		||||
    0x19, 0x18,   0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94,   0x93,   0x92, 0x91,
 | 
			
		||||
    0x29, 0x28,    0x27,  0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0xA9, 0xA8, 0xA7, 0xA6, 0xA5, 0xA4, 0xA3,   0xA2, 0xA1,
 | 
			
		||||
    0x39, 0x38,      0x37,  0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0xB9, 0xB8, 0xB7, 0xB6, 0xB5,     0xB3,
 | 
			
		||||
    0x49, 0x48,    0x47,     0x45, 0x44, 0x43, 0x42, 0x41, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5,          0xC4,   0xC2,
 | 
			
		||||
    0x59, 0x58,   0x57,  0x56,  0x55,             0x51,                   0xD6, 0xE5, 0xE4,         0xE3, 0xE2, 0xE1
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,15 @@
 | 
			
		||||
#ifndef LFK78_H
 | 
			
		||||
#define LFK78_H
 | 
			
		||||
 | 
			
		||||
/* if the kb.h file exists (because we're running from qmkbuilder) include it */
 | 
			
		||||
#if __has_include("kb.h")
 | 
			
		||||
#include "kb.h"
 | 
			
		||||
#endif
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include <avr/sfr_defs.h>
 | 
			
		||||
 | 
			
		||||
#ifndef cbi
 | 
			
		||||
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
 | 
			
		||||
#if defined(KEYBOARD_lfkeyboards_lfk78_revb)
 | 
			
		||||
#    include "revb.h"
 | 
			
		||||
#elif defined(KEYBOARD_lfkeyboards_lfk78_revc)
 | 
			
		||||
#    include "revc.h"
 | 
			
		||||
#elif defined(KEYBOARD_lfkeyboards_lfk78_revj)
 | 
			
		||||
#    include "revj.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef sbi
 | 
			
		||||
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct RGB_Color {
 | 
			
		||||
    uint16_t red;
 | 
			
		||||
    uint16_t green;
 | 
			
		||||
@@ -53,120 +44,3 @@ enum action_functions {
 | 
			
		||||
 | 
			
		||||
void reset_keyboard_kb(void);
 | 
			
		||||
void click(uint16_t freq, uint16_t duration);
 | 
			
		||||
 | 
			
		||||
// readability
 | 
			
		||||
#define ___ KC_NO
 | 
			
		||||
 | 
			
		||||
#ifdef LFK_REV_B
 | 
			
		||||
    /* RevB Keymap */
 | 
			
		||||
    // This a shortcut to help you visually see your layout.
 | 
			
		||||
    /*
 | 
			
		||||
    * ,---------.  ,-----------------------------------------------------------------------.  ,---------.
 | 
			
		||||
    * |  0 |  1 |  |  2 |  3 |  4 |  5 |  6 |  7 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |   57 |  | 94 | 95 |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  |---------|
 | 
			
		||||
    * | 10 | 11 |  | 12  | 13 | 14 | 15 | 16 |  17 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |  | 96 | 97 |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  `---------'
 | 
			
		||||
    * | 20 | 21 |  | 22    | 23 | 24 | 25 | 26 | 27 | 70 | 71 | 72 | 73 | 74 | 75 |     76 |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  ,----.
 | 
			
		||||
    * | 30 | 31 |  | 32      | 33 | 34 | 35 | 36 | 37 | 80 | 81 | 82 | 83 | 84 |        85 |  | 86 |
 | 
			
		||||
    * |---------|  |-------------------------------------------------------------------------------------.
 | 
			
		||||
    * | 40 | 41 |  | 42  | 43  | 44 |               45                |  46 |  47 |  90 | | 91 | 92 | 93 |
 | 
			
		||||
    * `---------'  `--------------------------------------------------------------------' `--------------'
 | 
			
		||||
    */
 | 
			
		||||
    // The first section contains all of the arguements
 | 
			
		||||
    // The second converts the arguments into a two-dimensional array
 | 
			
		||||
    #define LAYOUT( \
 | 
			
		||||
        k00, k01,   k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57,   k94, k95, \
 | 
			
		||||
        k10, k11,   k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k66, k67,   k96, k97, \
 | 
			
		||||
        k20, k21,   k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75,      k76, \
 | 
			
		||||
        k30, k31,   k32,  k33, k34, k35, k36, k37, k80, k81, k82, k83, k84,          k85,   k86, \
 | 
			
		||||
        k40, k41,   k42, k43, k44,              k45,                  k46, k47, k90,   k91, k92, k93 \
 | 
			
		||||
    ) { \
 | 
			
		||||
        { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
        { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
        { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
        { k30, k31, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
        { k40, k41, k42, k43, k44, k45, k46, k47 }, \
 | 
			
		||||
        { k50, k51, k52, k53, k54, k55, k56, k57 }, \
 | 
			
		||||
        { k60, k61, k62, k63, k64, k65, k66, k67 }, \
 | 
			
		||||
        { k70, k71, k72, k73, k74, k75, k76, ___ }, \
 | 
			
		||||
        { k80, k81, k82, k83, k84, k85, k86, ___ }, \
 | 
			
		||||
        { k90, k91, k92, k93, k94, k95, k96, k97 }, \
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    /* RevC+ Keymap */
 | 
			
		||||
    // This a shortcut to help you visually see your layout.
 | 
			
		||||
    /*
 | 
			
		||||
    * ,---------.  ,-----------------------------------------------------------------------.  ,---------.
 | 
			
		||||
    * | 11 | 12 |  | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |   1G |  | 1H | 1I |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  |---------|
 | 
			
		||||
    * | 21 | 22 |  | 23  | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |  2G |  | 2H | 2I |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  `---------'
 | 
			
		||||
    * | 31 | 32 |  | 33    | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E |     3F |
 | 
			
		||||
    * |---------|  |-----------------------------------------------------------------------|  ,----.
 | 
			
		||||
    * | 41 | 42 |  | 43      | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |        4F |  | 4H |
 | 
			
		||||
    * |---------|  |-------------------------------------------------------------------------------------.
 | 
			
		||||
    * | 51 | 52 |  | 53  | 54  | 55 |               59                |  5D |  5E |  5F | | 5G | 5H | 5I |
 | 
			
		||||
    * `---------'  `--------------------------------------------------------------------' `--------------'
 | 
			
		||||
    */
 | 
			
		||||
    // The first section contains all of the arguements
 | 
			
		||||
    // The second converts the arguments into a two-dimensional array
 | 
			
		||||
    #define LAYOUT( \
 | 
			
		||||
        k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
        k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
        k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
        k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,   k4H, \
 | 
			
		||||
        k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
    ) { \
 | 
			
		||||
        { k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
        { k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
        { k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___, ___, ___ }, \
 | 
			
		||||
        { k41, k42,   k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___, k4H, ___ }, \
 | 
			
		||||
        { k51, k52,   k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #define LAYOUT_split_bs( \
 | 
			
		||||
        k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G,   k1H, k1I, \
 | 
			
		||||
        k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,        k2H, k2I, \
 | 
			
		||||
        k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
        k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,        k4H, \
 | 
			
		||||
        k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,        k5G, k5H, k5I \
 | 
			
		||||
    ) { \
 | 
			
		||||
        { k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
        { k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
        { k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, ___, ___ }, \
 | 
			
		||||
        { k41, k42,   k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___, k4H, ___ }, \
 | 
			
		||||
        { k51, k52,   k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #define LAYOUT_split_rshift( \
 | 
			
		||||
        k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
        k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
        k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
        k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,     k4F, k4G,   k4H, \
 | 
			
		||||
        k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
    ) { \
 | 
			
		||||
        { k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
        { k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
        { k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___, ___, ___ }, \
 | 
			
		||||
        { k41, k42,   k43, ___, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, ___ }, \
 | 
			
		||||
        { k51, k52,   k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #define LAYOUT_iso( \
 | 
			
		||||
        k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
        k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
        k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F,     \
 | 
			
		||||
        k41, k42,   k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,      k4F,   k4H, \
 | 
			
		||||
        k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
    ) { \
 | 
			
		||||
        { k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I }, \
 | 
			
		||||
        { k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I }, \
 | 
			
		||||
        { k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, ___,   ___, ___ }, \
 | 
			
		||||
        { k41, k42,   k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, ___,   k4H, ___ }, \
 | 
			
		||||
        { k51, k52,   k53, k54, k55, ___, ___, ___, k59, ___, ___, ___, k5D, k5E, k5F, k5G,   k5H, k5I } \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#endif //LFK_REV_B
 | 
			
		||||
 | 
			
		||||
#endif //LFK78_H
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,18 @@
 | 
			
		||||
LFK78/68
 | 
			
		||||
===
 | 
			
		||||
# LFK78/68
 | 
			
		||||
 | 
			
		||||
A 65% keyboard similar to the MagicForce68 or VA68M. Optional function key block on left side.
 | 
			
		||||
 | 
			
		||||
Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards)  
 | 
			
		||||
Hardware Supported: LFK78/68 RevB - RevJ, SMK78/68  
 | 
			
		||||
Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/)
 | 
			
		||||
* Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards)
 | 
			
		||||
* Hardware Supported: LFK78/68 RevB - RevJ, SMK78/68
 | 
			
		||||
* Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/)
 | 
			
		||||
 | 
			
		||||
## Revisions
 | 
			
		||||
 | 
			
		||||
* `revb`: First public release, uses ATmega32U4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
* `revc`: Revisions C through H, uses AT90USB1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
* `revj`: Audio on pin C6, uses AT90USB646
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Make example for this keyboard (after setting up your build environment):
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revb/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revb/config.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 10
 | 
			
		||||
#define MATRIX_COLS 8
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Keyboard Matrix Assignments
 | 
			
		||||
 *
 | 
			
		||||
 * Change this to how you wired your keyboard
 | 
			
		||||
 * COLS: AVR pins used for columns, left to right
 | 
			
		||||
 * ROWS: AVR pins used for rows, top to bottom
 | 
			
		||||
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
			
		||||
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, F0, F1, F4, F5, F6 }
 | 
			
		||||
#define MATRIX_COL_PINS { E6, F7, D2, D3, D4, D5, D6, D7 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
#define RGBLED_NUM 31
 | 
			
		||||
							
								
								
									
										104
									
								
								keyboards/lfkeyboards/lfk78/revb/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								keyboards/lfkeyboards/lfk78/revb/info.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
{
 | 
			
		||||
    "keyboard_name": "LFK78/68 Rev B",
 | 
			
		||||
    "url": "",
 | 
			
		||||
    "maintainer": "qmk",
 | 
			
		||||
    "width": 19.5,
 | 
			
		||||
    "height": 5,
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								keyboards/lfkeyboards/lfk78/revb/revb.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								keyboards/lfkeyboards/lfk78/revb/revb.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// readability
 | 
			
		||||
#define XXX KC_NO
 | 
			
		||||
 | 
			
		||||
// This is a shortcut to help you visually see your layout.
 | 
			
		||||
/*
 | 
			
		||||
 * ,---------.  ,-----------------------------------------------------------------------.  ,---------.
 | 
			
		||||
 * |  0 |  1 |  |  2 |  3 |  4 |  5 |  6 |  7 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |   57 |  | 94 | 95 |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  |---------|
 | 
			
		||||
 * | 10 | 11 |  | 12  | 13 | 14 | 15 | 16 | 17 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |  67 |  | 96 | 97 |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  `---------'
 | 
			
		||||
 * | 20 | 21 |  | 22    | 23 | 24 | 25 | 26 | 27 | 70 | 71 | 72 | 73 | 74 | 75 |     76 |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  ,----.
 | 
			
		||||
 * | 30 | 31 |  | 32      | 33 | 34 | 35 | 36 | 37 | 80 | 81 | 82 | 83 | 84 |        85 |  | 86 |
 | 
			
		||||
 * |---------|  |-------------------------------------------------------------------------------------.
 | 
			
		||||
 * | 40 | 41 |  | 42  | 43  | 44 |               45                |  46 |  47 |  90 | | 91 | 92 | 93 |
 | 
			
		||||
 * `---------'  `--------------------------------------------------------------------' `--------------'
 | 
			
		||||
 */
 | 
			
		||||
// The first section contains all of the arguements
 | 
			
		||||
// The second converts the arguments into a two-dimensional array
 | 
			
		||||
#define LAYOUT( \
 | 
			
		||||
    k00, k01,   k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57,   k94, k95, \
 | 
			
		||||
    k10, k11,   k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k66, k67,   k96, k97, \
 | 
			
		||||
    k20, k21,   k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75,      k76, \
 | 
			
		||||
    k30, k31,   k32,  k33, k34, k35, k36, k37, k80, k81, k82, k83, k84,          k85,   k86, \
 | 
			
		||||
    k40, k41,   k42, k43, k44,              k45,                  k46, k47, k90,   k91, k92, k93 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, k31, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, k43, k44, k45, k46, k47 }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, k55, k56, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, k66, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, k74, k75, k76, XXX }, \
 | 
			
		||||
    { k80, k81, k82, k83, k84, k85, k86, XXX }, \
 | 
			
		||||
    { k90, k91, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								keyboards/lfkeyboards/lfk78/revb/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/lfkeyboards/lfk78/revb/rules.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
# MCU name
 | 
			
		||||
MCU = atmega32u4
 | 
			
		||||
							
								
								
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revc/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revc/config.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 5
 | 
			
		||||
#define MATRIX_COLS 18
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Keyboard Matrix Assignments
 | 
			
		||||
 *
 | 
			
		||||
 * Change this to how you wired your keyboard
 | 
			
		||||
 * COLS: AVR pins used for columns, left to right
 | 
			
		||||
 * ROWS: AVR pins used for rows, top to bottom
 | 
			
		||||
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
			
		||||
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#define MATRIX_ROW_PINS { D2, D3, D4, D5, D6 }
 | 
			
		||||
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, E6, E7, F0, F1, F2, F3, C0, C1, C2, C3 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
#define RGBLED_NUM 27
 | 
			
		||||
							
								
								
									
										392
									
								
								keyboards/lfkeyboards/lfk78/revc/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										392
									
								
								keyboards/lfkeyboards/lfk78/revc/info.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,392 @@
 | 
			
		||||
{
 | 
			
		||||
    "keyboard_name": "LFK78/68 Rev C-H",
 | 
			
		||||
    "url": "",
 | 
			
		||||
    "maintainer": "qmk",
 | 
			
		||||
    "width": 19.5,
 | 
			
		||||
    "height": 5,
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_split_bs": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0},
 | 
			
		||||
                {"x":16.25, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_split_rshift": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":1.75},
 | 
			
		||||
                {"x":16.25, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_iso": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":16, "y":1, "w":1.25, "h":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":3},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								keyboards/lfkeyboards/lfk78/revc/revc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								keyboards/lfkeyboards/lfk78/revc/revc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// readability
 | 
			
		||||
#define XXX KC_NO
 | 
			
		||||
 | 
			
		||||
// This is a shortcut to help you visually see your layout.
 | 
			
		||||
/*
 | 
			
		||||
 * ,---------.  ,-----------------------------------------------------------------------.  ,---------.
 | 
			
		||||
 * | 11 | 12 |  | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |   1G |  | 1H | 1I |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  |---------|
 | 
			
		||||
 * | 21 | 22 |  | 23  | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |  2G |  | 2H | 2I |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  `---------'
 | 
			
		||||
 * | 31 | 32 |  | 33    | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E |     3F |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  ,----.
 | 
			
		||||
 * | 41 | 42 |  | 43      | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |        4F |  | 4H |
 | 
			
		||||
 * |---------|  |-------------------------------------------------------------------------------------.
 | 
			
		||||
 * | 51 | 52 |  | 53  | 54  | 55 |               59                |  5D |  5E |  5F | | 5G | 5H | 5I |
 | 
			
		||||
 * `---------'  `--------------------------------------------------------------------' `--------------'
 | 
			
		||||
 */
 | 
			
		||||
// The first section contains all of the arguements
 | 
			
		||||
// The second converts the arguments into a two-dimensional array
 | 
			
		||||
#define LAYOUT( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_split_bs( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,        k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,        k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,        k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_split_rshift( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,     k4F, k4G,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_iso( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
 | 
			
		||||
    k41, k42,   k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,      k4F,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								keyboards/lfkeyboards/lfk78/revc/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/lfkeyboards/lfk78/revc/rules.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
# MCU name
 | 
			
		||||
MCU = at90usb1286
 | 
			
		||||
							
								
								
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revj/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								keyboards/lfkeyboards/lfk78/revj/config.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 5
 | 
			
		||||
#define MATRIX_COLS 18
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Keyboard Matrix Assignments
 | 
			
		||||
 *
 | 
			
		||||
 * Change this to how you wired your keyboard
 | 
			
		||||
 * COLS: AVR pins used for columns, left to right
 | 
			
		||||
 * ROWS: AVR pins used for rows, top to bottom
 | 
			
		||||
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
			
		||||
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#define MATRIX_ROW_PINS { D2, D3, D4, D5, D6 }
 | 
			
		||||
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, E6, E7, F0, F1, F2, F3, C0, C1, C2, C3 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
#define RGBLED_NUM 27
 | 
			
		||||
							
								
								
									
										392
									
								
								keyboards/lfkeyboards/lfk78/revj/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										392
									
								
								keyboards/lfkeyboards/lfk78/revj/info.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,392 @@
 | 
			
		||||
{
 | 
			
		||||
    "keyboard_name": "LFK78/68 Rev J",
 | 
			
		||||
    "url": "",
 | 
			
		||||
    "maintainer": "qmk",
 | 
			
		||||
    "width": 19.5,
 | 
			
		||||
    "height": 5,
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_split_bs": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0},
 | 
			
		||||
                {"x":16.25, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_split_rshift": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":15.75, "y":1, "w":1.5},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2, "w":2.25},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":2.25},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":1.75},
 | 
			
		||||
                {"x":16.25, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        "LAYOUT_iso": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"x":0, "y":0},
 | 
			
		||||
                {"x":1, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":0},
 | 
			
		||||
                {"x":3.25, "y":0},
 | 
			
		||||
                {"x":4.25, "y":0},
 | 
			
		||||
                {"x":5.25, "y":0},
 | 
			
		||||
                {"x":6.25, "y":0},
 | 
			
		||||
                {"x":7.25, "y":0},
 | 
			
		||||
                {"x":8.25, "y":0},
 | 
			
		||||
                {"x":9.25, "y":0},
 | 
			
		||||
                {"x":10.25, "y":0},
 | 
			
		||||
                {"x":11.25, "y":0},
 | 
			
		||||
                {"x":12.25, "y":0},
 | 
			
		||||
                {"x":13.25, "y":0},
 | 
			
		||||
                {"x":14.25, "y":0},
 | 
			
		||||
                {"x":15.25, "y":0, "w":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":0},
 | 
			
		||||
                {"x":18.5, "y":0},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":1},
 | 
			
		||||
                {"x":1, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":1, "w":1.5},
 | 
			
		||||
                {"x":3.75, "y":1},
 | 
			
		||||
                {"x":4.75, "y":1},
 | 
			
		||||
                {"x":5.75, "y":1},
 | 
			
		||||
                {"x":6.75, "y":1},
 | 
			
		||||
                {"x":7.75, "y":1},
 | 
			
		||||
                {"x":8.75, "y":1},
 | 
			
		||||
                {"x":9.75, "y":1},
 | 
			
		||||
                {"x":10.75, "y":1},
 | 
			
		||||
                {"x":11.75, "y":1},
 | 
			
		||||
                {"x":12.75, "y":1},
 | 
			
		||||
                {"x":13.75, "y":1},
 | 
			
		||||
                {"x":14.75, "y":1},
 | 
			
		||||
                {"x":16, "y":1, "w":1.25, "h":2},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":1},
 | 
			
		||||
                {"x":18.5, "y":1},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":2},
 | 
			
		||||
                {"x":1, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":2, "w":1.75},
 | 
			
		||||
                {"x":4, "y":2},
 | 
			
		||||
                {"x":5, "y":2},
 | 
			
		||||
                {"x":6, "y":2},
 | 
			
		||||
                {"x":7, "y":2},
 | 
			
		||||
                {"x":8, "y":2},
 | 
			
		||||
                {"x":9, "y":2},
 | 
			
		||||
                {"x":10, "y":2},
 | 
			
		||||
                {"x":11, "y":2},
 | 
			
		||||
                {"x":12, "y":2},
 | 
			
		||||
                {"x":13, "y":2},
 | 
			
		||||
                {"x":14, "y":2},
 | 
			
		||||
                {"x":15, "y":2},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":3},
 | 
			
		||||
                {"x":1, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":3, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":3},
 | 
			
		||||
                {"x":4.5, "y":3},
 | 
			
		||||
                {"x":5.5, "y":3},
 | 
			
		||||
                {"x":6.5, "y":3},
 | 
			
		||||
                {"x":7.5, "y":3},
 | 
			
		||||
                {"x":8.5, "y":3},
 | 
			
		||||
                {"x":9.5, "y":3},
 | 
			
		||||
                {"x":10.5, "y":3},
 | 
			
		||||
                {"x":11.5, "y":3},
 | 
			
		||||
                {"x":12.5, "y":3},
 | 
			
		||||
                {"x":13.5, "y":3},
 | 
			
		||||
                {"x":14.5, "y":3, "w":2.75},
 | 
			
		||||
 | 
			
		||||
                {"x":17.5, "y":3},
 | 
			
		||||
 | 
			
		||||
                {"x":0, "y":4},
 | 
			
		||||
                {"x":1, "y":4},
 | 
			
		||||
 | 
			
		||||
                {"x":2.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":3.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":4.75, "y":4, "w":1.25},
 | 
			
		||||
                {"x":6, "y":4, "w":6.25},
 | 
			
		||||
                {"x":12.25, "y":4, "w":1.25},
 | 
			
		||||
                {"x":13.5, "y":4, "w":1.25},
 | 
			
		||||
                {"x":14.75, "y":4, "w":1.25},
 | 
			
		||||
 | 
			
		||||
                {"x":16.5, "y":4},
 | 
			
		||||
                {"x":17.5, "y":4},
 | 
			
		||||
                {"x":18.5, "y":4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								keyboards/lfkeyboards/lfk78/revj/revj.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								keyboards/lfkeyboards/lfk78/revj/revj.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// readability
 | 
			
		||||
#define XXX KC_NO
 | 
			
		||||
 | 
			
		||||
// This is a shortcut to help you visually see your layout.
 | 
			
		||||
/*
 | 
			
		||||
 * ,---------.  ,-----------------------------------------------------------------------.  ,---------.
 | 
			
		||||
 * | 11 | 12 |  | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |   1G |  | 1H | 1I |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  |---------|
 | 
			
		||||
 * | 21 | 22 |  | 23  | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |  2G |  | 2H | 2I |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  `---------'
 | 
			
		||||
 * | 31 | 32 |  | 33    | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E |     3F |
 | 
			
		||||
 * |---------|  |-----------------------------------------------------------------------|  ,----.
 | 
			
		||||
 * | 41 | 42 |  | 43      | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E |        4F |  | 4H |
 | 
			
		||||
 * |---------|  |-------------------------------------------------------------------------------------.
 | 
			
		||||
 * | 51 | 52 |  | 53  | 54  | 55 |               59                |  5D |  5E |  5F | | 5G | 5H | 5I |
 | 
			
		||||
 * `---------'  `--------------------------------------------------------------------' `--------------'
 | 
			
		||||
 */
 | 
			
		||||
// The first section contains all of the arguements
 | 
			
		||||
// The second converts the arguments into a two-dimensional array
 | 
			
		||||
#define LAYOUT( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_split_bs( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,        k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,          k4F,        k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,        k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_split_rshift( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E,      k3F, \
 | 
			
		||||
    k41, k42,   k43,  k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,     k4F, k4G,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, XXX, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_iso( \
 | 
			
		||||
    k11, k12,   k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G,   k1H, k1I, \
 | 
			
		||||
    k21, k22,   k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G,   k2H, k2I, \
 | 
			
		||||
    k31, k32,   k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
 | 
			
		||||
    k41, k42,   k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E,      k4F,   k4H, \
 | 
			
		||||
    k51, k52,   k53, k54, k55,              k59,                  k5D, k5E, k5F,   k5G, k5H, k5I \
 | 
			
		||||
) { \
 | 
			
		||||
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I }, \
 | 
			
		||||
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I }, \
 | 
			
		||||
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, XXX, XXX, XXX }, \
 | 
			
		||||
    { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, XXX, k4H, XXX }, \
 | 
			
		||||
    { k51, k52, k53, k54, k55, XXX, XXX, XXX, k59, XXX, XXX, XXX, k5D, k5E, k5F, k5G, k5H, k5I } \
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								keyboards/lfkeyboards/lfk78/revj/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								keyboards/lfkeyboards/lfk78/revj/rules.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
# MCU name
 | 
			
		||||
MCU = at90usb646
 | 
			
		||||
 | 
			
		||||
AUDIO_ENABLE = yes
 | 
			
		||||
@@ -1,24 +1,16 @@
 | 
			
		||||
# Set the LFK78 hardware version.
 | 
			
		||||
#
 | 
			
		||||
# B   - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# J   - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
LFK_REV = J
 | 
			
		||||
 | 
			
		||||
ifeq ($(LFK_REV), B)
 | 
			
		||||
    MCU = atmega32u4
 | 
			
		||||
else ifeq ($(LFK_REV), J)
 | 
			
		||||
    MCU = at90usb646
 | 
			
		||||
else
 | 
			
		||||
    MCU = at90usb1286
 | 
			
		||||
endif
 | 
			
		||||
# Bootloader selection
 | 
			
		||||
#   Teensy       halfkay
 | 
			
		||||
#   Pro Micro    caterina
 | 
			
		||||
#   Atmel DFU    atmel-dfu
 | 
			
		||||
#   LUFA DFU     lufa-dfu
 | 
			
		||||
#   QMK DFU      qmk-dfu
 | 
			
		||||
#   ATmega32A    bootloadHID
 | 
			
		||||
#   ATmega328P   USBasp
 | 
			
		||||
BOOTLOADER = atmel-dfu
 | 
			
		||||
OPT_DEFS += -DLFK_REV_$(LFK_REV)
 | 
			
		||||
OPT_DEFS += -DLFK_REV_STRING=\"Rev$(LFK_REV)\"
 | 
			
		||||
 | 
			
		||||
# Extra source files for IS3731 lighting
 | 
			
		||||
SRC = TWIlib.c issi.c lighting.c
 | 
			
		||||
 | 
			
		||||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = no           # Virtual DIP switch configuration
 | 
			
		||||
MOUSEKEY_ENABLE = no            # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes           # Audio control and System control
 | 
			
		||||
@@ -28,11 +20,11 @@ NKRO_ENABLE = yes               # Nkey Rollover - if this doesn't work, see here
 | 
			
		||||
BACKLIGHT_ENABLE = yes          # Enable keyboard backlight functionality
 | 
			
		||||
BACKLIGHT_DRIVER = custom
 | 
			
		||||
MIDI_ENABLE = no                # MIDI controls
 | 
			
		||||
AUDIO_ENABLE = yes               # Audio output on port C6
 | 
			
		||||
AUDIO_ENABLE = no               # Audio output on port C6
 | 
			
		||||
UNICODE_ENABLE = no             # Unicode
 | 
			
		||||
BLUETOOTH_ENABLE = no           # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
			
		||||
RGBLIGHT_ENABLE = yes           # Enable WS2812 RGB underlight.
 | 
			
		||||
RGBLIGHT_CUSTOM_DRIVER = yes    # RGB code is implemented in lefkeyboards, not qmk base
 | 
			
		||||
RGBLIGHT_CUSTOM_DRIVER = yes    # RGB code is implemented in lfkeyboards, not qmk base
 | 
			
		||||
SLEEP_LED_ENABLE = yes          # Breathing sleep LED during USB suspend
 | 
			
		||||
TAP_DANCE_ENABLE = no
 | 
			
		||||
 | 
			
		||||
@@ -40,6 +32,8 @@ ISSI_ENABLE = yes               # If the I2C pullup resistors aren't install thi
 | 
			
		||||
WATCHDOG_ENABLE = no            # Resets keyboard if matrix_scan isn't run every 250ms
 | 
			
		||||
CAPSLOCK_LED = no              # Toggle back light LED of Caps Lock
 | 
			
		||||
 | 
			
		||||
# Extra source files for IS3731 lighting
 | 
			
		||||
SRC = TWIlib.c issi.c lighting.c
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(ISSI_ENABLE)), yes)
 | 
			
		||||
    TMK_COMMON_DEFS += -DISSI_ENABLE
 | 
			
		||||
@@ -53,18 +47,4 @@ ifeq ($(strip $(CAPSLOCK_LED)), yes)
 | 
			
		||||
    TMK_COMMON_DEFS += -DCAPSLOCK_LED
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
 | 
			
		||||
# #
 | 
			
		||||
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
 | 
			
		||||
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
 | 
			
		||||
# #
 | 
			
		||||
# # Set to B, C or D
 | 
			
		||||
# LFK_REV = D
 | 
			
		||||
 | 
			
		||||
# ifeq ($(LFK_REV), B)
 | 
			
		||||
#   MCU = atmega32u4
 | 
			
		||||
# else
 | 
			
		||||
#   MCU = at90usb1286
 | 
			
		||||
# endif
 | 
			
		||||
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
 | 
			
		||||
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
 | 
			
		||||
DEFAULT_FOLDER = lfkeyboards/lfk78/revj
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user