]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Keyboard: Add support for LFK65-HS - a hotswap 65% (#3009)
authorscott-t-wilson <scott.t.wilson@gmail.com>
Wed, 18 Jul 2018 16:54:49 +0000 (12:54 -0400)
committerDrashna Jaelre <drashna@live.com>
Wed, 18 Jul 2018 16:54:49 +0000 (09:54 -0700)
* Add support for LFK65-HS - a hotswap 65%

* Add info.json for LFK65-HS

* Clean up for new build system, remove uneeded code.

* LFK65-HS cleanup. Fixed LAYOUT macros, etc

keyboards/lfkeyboards/lfk65_hs/config.h [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/info.json [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/keymaps/default/rules.mk [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/readme.md [new file with mode: 0644]
keyboards/lfkeyboards/lfk65_hs/rules.mk [new file with mode: 0644]

diff --git a/keyboards/lfkeyboards/lfk65_hs/config.h b/keyboards/lfkeyboards/lfk65_hs/config.h
new file mode 100644 (file)
index 0000000..ffbd1de
--- /dev/null
@@ -0,0 +1,141 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6064
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    LFKeyboards
+#define PRODUCT         LFK65_HS
+#define DESCRIPTION     QMK keyboard firmware for LFK65_HS
+
+#define DIODE_DIRECTION COL2ROW
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+#define MATRIX_ROW_PINS {B0, B3, B2, B1, F5}
+#define MATRIX_COL_PINS {E6, F4, B7, D5, D3, D2, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4}
+#define UNUSED_PINS {}
+#define RGBLED_NUM 20     // Number of LEDs
+
+#define QMK_ESC_OUTPUT E6 // usually COL
+#define QMK_ESC_INPUT B0 // usually ROW
+#define QMK_LED F1
+// #define QMK_SPEAKER C6
+
+#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 RGBLED_NUM 20     // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 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
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#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_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#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_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lfkeyboards/lfk65_hs/info.json b/keyboards/lfkeyboards/lfk65_hs/info.json
new file mode 100644 (file)
index 0000000..a3a7245
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "keyboard_name": "LFK65-HS",
+  "url": "https://github.com/lfkeyboards",
+  "maintainer": "LFKeyboards",
+  "width": 16,
+  "height": 5,
+  "layouts": {
+    "LAYOUT_all": {"layout":[{"label": "~","x": 0,"y": 0},{"label": "!","x": 1,"y": 0},{"label": "@","x": 2,"y": 0},{"label": "#","x": 3,"y": 0},{"label": "$","x": 4,"y": 0},{"label": "%","x": 5,"y": 0},{"label": "^","x": 6,"y": 0},{"label": "&","x": 7,"y": 0},{"label": "*","x": 8,"y": 0},{"label": "(","x": 9,"y": 0},{"label": ")","x": 10,"y": 0},{"label": "_","x": 11,"y": 0},{"label": "+","x": 12,"y": 0},{"label": "","x": 13,"y": 0,"w": 1},{"label": "","x": 14,"y": 0,"w": 1},{"label": "Home","x": 15,"y": 0},{"label": "Tab","x": 0,"y": 1,"w": 1.5},{"label": "Q","x": 1.5,"y": 1},{"label": "W","x": 2.5,"y": 1},{"label": "E","x": 3.5,"y": 1},{"label": "R","x": 4.5,"y": 1},{"label": "T","x": 5.5,"y": 1},{"label": "Y","x": 6.5,"y": 1},{"label": "U","x": 7.5,"y": 1},{"label": "I","x": 8.5,"y": 1},{"label": "O","x": 9.5,"y": 1},{"label": "P","x": 10.5,"y": 1},{"label": "{","x": 11.5,"y": 1},{"label": "}","x": 12.5,"y": 1},{"label": "|","x": 13.5,"y": 1,"w": 1.5},{"label": "Page Up","x": 15,"y": 1},{"label": "Caps Lock","x": 0,"y": 2,"w": 1.75},{"label": "A","x": 1.75,"y": 2},{"label": "S","x": 2.75,"y": 2},{"label": "D","x": 3.75,"y": 2},{"label": "F","x": 4.75,"y": 2},{"label": "G","x": 5.75,"y": 2},{"label": "H","x": 6.75,"y": 2},{"label": "J","x": 7.75,"y": 2},{"label": "K","x": 8.75,"y": 2},{"label": "L","x": 9.75,"y": 2},{"label": ":","x": 10.75,"y": 2},{"label": "\"","x": 11.75,"y": 2},{"label": "","x": 12.75,"y": 2},{"label": "Enter","x": 13.75,"y": 2,"w": 1.25},{"label": "Page Down","x": 15,"y": 2},{"label": "Shift","x": 0,"y": 3,"w": 1.25},{"label": "","x": 1.25,"y": 3},{"label": "Z","x": 2.25,"y": 3},{"label": "X","x": 3.25,"y": 3},{"label": "C","x": 4.25,"y": 3},{"label": "V","x": 5.25,"y": 3},{"label": "B","x": 6.25,"y": 3},{"label": "N","x": 7.25,"y": 3},{"label": "M","x": 8.25,"y": 3},{"label": "<","x": 9.25,"y": 3},{"label": ">","x": 10.25,"y": 3},{"label": "?","x": 11.25,"y": 3},{"label": "Shift","x": 12.25,"y": 3,"w": 1.75},{"label": "↑","x": 14,"y": 3},{"label": "End","x": 15,"y": 3},{"label": "Ctrl","x": 0,"y": 4,"w": 1.25},{"label": "Win","x": 1.25,"y": 4,"w": 1.25},{"label": "Alt","x": 2.5,"y": 4,"w": 1.25},{"x": 3.75,"y": 4,"w": 6.25},{"label": "Alt","x": 10,"y": 4},{"label": "Fn","x": 11,"y": 4},{"label": "Ctrl","x": 12,"y": 4},{"label": "←","x": 13,"y": 4},{"label": "↓","x": 14,"y": 4},{"label": "→","x": 15,"y": 4}]},
+    "LAYOUT_ansi": {"layout":[{"label": "~","x": 0,"y": 0},{"label": "!","x": 1,"y": 0},{"label": "@","x": 2,"y": 0},{"label": "#","x": 3,"y": 0},{"label": "$","x": 4,"y": 0},{"label": "%","x": 5,"y": 0},{"label": "^","x": 6,"y": 0},{"label": "&","x": 7,"y": 0},{"label": "*","x": 8,"y": 0},{"label": "(","x": 9,"y": 0},{"label": ")","x": 10,"y": 0},{"label": "_","x": 11,"y": 0},{"label": "+","x": 12,"y": 0},{"label": "Backspace","x": 13,"y": 0,"w": 2},{"label": "Home","x": 15,"y": 0},{"label": "Tab","x": 0,"y": 1,"w": 1.5},{"label": "Q","x": 1.5,"y": 1},{"label": "W","x": 2.5,"y": 1},{"label": "E","x": 3.5,"y": 1},{"label": "R","x": 4.5,"y": 1},{"label": "T","x": 5.5,"y": 1},{"label": "Y","x": 6.5,"y": 1},{"label": "U","x": 7.5,"y": 1},{"label": "I","x": 8.5,"y": 1},{"label": "O","x": 9.5,"y": 1},{"label": "P","x": 10.5,"y": 1},{"label": "{","x": 11.5,"y": 1},{"label": "}","x": 12.5,"y": 1},{"label": "|","x": 13.5,"y": 1,"w": 1.5},{"label": "Page Up","x": 15,"y": 1},{"label": "Caps Lock","x": 0,"y": 2,"w": 1.75},{"label": "A","x": 1.75,"y": 2},{"label": "S","x": 2.75,"y": 2},{"label": "D","x": 3.75,"y": 2},{"label": "F","x": 4.75,"y": 2},{"label": "G","x": 5.75,"y": 2},{"label": "H","x": 6.75,"y": 2},{"label": "J","x": 7.75,"y": 2},{"label": "K","x": 8.75,"y": 2},{"label": "L","x": 9.75,"y": 2},{"label": ":","x": 10.75,"y": 2},{"label": "\"","x": 11.75,"y": 2},{"label": "Enter","x": 12.75,"y": 2,"w": 2.25},{"label": "Page Down","x": 15,"y": 2},{"label": "Shift","x": 0,"y": 3,"w": 2.25},{"label": "Z","x": 2.25,"y": 3},{"label": "X","x": 3.25,"y": 3},{"label": "C","x": 4.25,"y": 3},{"label": "V","x": 5.25,"y": 3},{"label": "B","x": 6.25,"y": 3},{"label": "N","x": 7.25,"y": 3},{"label": "M","x": 8.25,"y": 3},{"label": "<","x": 9.25,"y": 3},{"label": ">","x": 10.25,"y": 3},{"label": "?","x": 11.25,"y": 3},{"label": "Shift","x": 12.25,"y": 3,"w": 1.75},{"label": "↑","x": 14,"y": 3},{"label": "End","x": 15,"y": 3},{"label": "Ctrl","x": 0,"y": 4,"w": 1.25},{"label": "Win","x": 1.25,"y": 4,"w": 1.25},{"label": "Alt","x": 2.5,"y": 4,"w": 1.25},{"x": 3.75,"y": 4,"w": 6.25},{"label": "Alt","x": 10,"y": 4},{"label": "Fn","x": 11,"y": 4},{"label": "Ctrl","x": 12,"y": 4},{"label": "←","x": 13,"y": 4},{"label": "↓","x": 14,"y": 4},{"label": "→","x": 15,"y": 4}]}
+  }
+}
\ No newline at end of file
diff --git a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..0985deb
--- /dev/null
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+
+//Define a shorter 'transparent' key code to make the keymaps more compact
+#define KC_TR KC_TRNS
+
+enum keymap_layout {
+    BASE = 0,
+    FUNC,
+};
+
+// #define uint16_t int
+// #define uint8_t int
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = LAYOUT_ansi(
+  /* Keymap VANILLA: (Base Layer) Default Layer
+   * ,------------------------------------------------------------.----.
+   * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa| Ins|
+   * |------------------------------------------------------------|----|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     \| Del|
+   * |------------------------------------------------------------|----|
+   * |CAPS    |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
+   * |------------------------------------------------------------|----|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift  |Up |PgDn|
+   * |-----------------------------------------------------------------|
+   * |Ctrl|Win |Alt |       Space         |Alt |Ctrl|Func|Lft| Dn |Rig |
+   * `-----------------------------------------------------------------'
+   */
+    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_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_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_PGUP,
+    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_PGDN,
+    KC_LCTL, KC_LGUI, KC_LALT,         KC_SPC,       KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN,  KC_RGHT),
+
+[FUNC] = LAYOUT_ansi(
+   /*Keymap VANILLA: Function Layer
+   * ,------------------------------------------------------------.----.
+   * |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backspa| Ins|
+   * |------------------------------------------------------------|----|
+   * |MuMode | |  |  |E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     \| Del|
+   * |------------------------------------------------------------|----|
+   * |AudTgl|Hz+|MS+| |  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
+   * |------------------------------------------------------------|----|
+   * |ClickTgl|Hz-|MS-|| C|  V|  B| N|MuTgl|  ,|  .|  /|Shift |Up |PgDn|
+   * |-----------------------------------------------------------------|
+   * |Ctrl|Win |Alt |       Space         |Alt |Ctrl|Func|Lft| Dn |Rig |
+   * `-----------------------------------------------------------------'
+   */
+    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_F13,  KC_F14,
+    MU_MOD, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,     KC_TR,  RGB_TOG,
+    AU_TOG,  KC_FN1,KC_FN3, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,           RESET,  RGB_MOD,
+    KC_FN5,    KC_FN2,KC_FN4, KC_TR, KC_TR, KC_TR, KC_TR, MU_TOG, RGB_VAD, RGB_VAI, KC_TR, KC_TR,        RGB_HUI,  KC_TR,
+    KC_TR, KC_TR, KC_TR,         KC_TR,       KC_TR, KC_TR, KC_TR, RGB_SAD, RGB_HUD,  RGB_SAI),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+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) {
+
+}
diff --git a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c
new file mode 100644 (file)
index 0000000..26ab883
--- /dev/null
@@ -0,0 +1,34 @@
+#include <avr/sfr_defs.h>
+#include <avr/timer_avr.h>
+#include <avr/wdt.h>
+#include "lfk65_hs.h"
+#include "keymap.h"
+
+void matrix_init_kb(void)
+{
+    matrix_init_user();
+
+}
+
+void matrix_scan_kb(void)
+{
+    matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t* record)
+{
+    if (keycode == RESET) {
+        reset_keyboard_kb();
+    } else {
+    }
+    return process_record_user(keycode, record);
+}
+
+void reset_keyboard_kb(){
+#ifdef WATCHDOG_ENABLE
+    MCUSR = 0;
+    wdt_disable();
+    wdt_reset();
+#endif
+    reset_keyboard();
+}
diff --git a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h
new file mode 100644 (file)
index 0000000..9f22efb
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef LFK65_HS_H
+#define LFK65_HS_H
+
+/* if the kb.h file exists (because we're running from qmkbuilder) include it */
+#ifdef __has_include
+#if __has_include("kb.h")
+#include "kb.h"
+#endif
+#endif
+
+#include "quantum.h"
+#include "matrix.h"
+#include <avr/sfr_defs.h>
+#include <stdint.h>
+
+#ifndef cbi
+#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
+#endif
+
+#ifndef sbi
+#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
+#endif
+
+void reset_keyboard_kb(void);
+
+/* All Keymap - contains every possible switch
+* ,-------------------------------------------------------------------------------.
+* | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G |
+* |-------------------------------------------------------------------------------|
+* | 21  | 22 |23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D |    2F   | 2G |
+* |-------------------------------------------------------------------------------|
+* | 31   | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C |      3F    | 3G |
+* |-------------------------------------------------------------------------------|
+* | 41     | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C |    4D    | 4F | 4G |
+* |-------------------------------------------------------------------------------|
+* | 51  |  52  | 53  |              57        | 5A | 5B | 5C | 5D |  5E | 3E | 4E |
+* `-------------------------------------------------------------------------------'
+*/
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_all( \
+    k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, \
+    k21,   k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D,    k2F, k2G, \
+    k31,    k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, K3D,   k3F, k3G, \
+    k41, k42, k43, k44,  k45, k46, k47, k48, k49, k4A, k4B, k4C,     k4D, k4F, k4G, \
+    k51, k52, k53,              k57,                   k5B, k5C, k5D, k5E, k3E, k4E \
+) { \
+    {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G}, \
+    {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F, k2G}, \
+    {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G}, \
+    {k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G}, \
+    {k51, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, KC_NO, KC_NO} \
+}
+
+/* ANSI Keymap
+* ,-------------------------------------------------------------------------------.
+* | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D |   1E    | 1G |
+* |-------------------------------------------------------------------------------|
+* | 21   | 22 |23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D |   2F   | 2G |
+* |-------------------------------------------------------------------------------|
+* | 31    | 32 |33 | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C |      3F    | 3G |
+* |-------------------------------------------------------------------------------|
+* | 41      | 42 |43 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C |    4D    | 4F | 4G |
+* |-------------------------------------------------------------------------------|
+* | 51  |  52  | 53  |              57        | 5A | 5B | 5C | 5D |  5E | 3E | 4E |
+* `-------------------------------------------------------------------------------'
+*/
+#define LAYOUT_ansi( \
+    k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D,         k1F, k1G, \
+    k21,   k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D,       k2F, k2G, \
+    k31,    k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C,           k3F, k3G, \
+    k41,     k43, k44,  k45, k46, k47, k48, k49, k4A, k4B, k4C,         k4D, k4F, k4G, \
+    k51, k52, k53,              k57,                      k5B, k5C, k5D, k5E, k3E, k4E \
+) { \
+    {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F, k1G}, \
+    {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F, k2G}, \
+    {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, k3F, k3G}, \
+    {k41, KC_NO, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G}, \
+    {k51, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, KC_NO, KC_NO} \
+}
+
+#endif //LFK65_HS_H
diff --git a/keyboards/lfkeyboards/lfk65_hs/readme.md b/keyboards/lfkeyboards/lfk65_hs/readme.md
new file mode 100644 (file)
index 0000000..ebe62ae
--- /dev/null
@@ -0,0 +1,14 @@
+LFK65-HS
+===
+
+65% layout based with hotswap support.
+
+Keyboard Maintainer: [LFKeyboards](https://github.com/lfkeyboards)
+Hardware Supported: LFK65-HS
+Hardware Availability: [LFKeyboards.com](https://www.lfkeyboards.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make lfkeyboards/lfk65_hs:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/lfkeyboards/lfk65_hs/rules.mk b/keyboards/lfkeyboards/lfk65_hs/rules.mk
new file mode 100644 (file)
index 0000000..5118c35
--- /dev/null
@@ -0,0 +1,20 @@
+MCU = atmega32u4
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+FLASH_SIZE_KB = 32
+BOOT_SECTION_SIZE_KB = 4
+BOOT_LOADER = BootloaderHID
+
+# Extra source files for IS3731 lighting
+SRC = TWIlib.c issi.c lighting.c
+
+# Processor frequency.
+F_CPU = 16000000
+
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT