From e1e66c78bf0168c3c83357e19127d9b0ab3fa823 Mon Sep 17 00:00:00 2001
From: Maxime Coirault <mcoirault@users.noreply.github.com>
Date: Sun, 21 Feb 2021 18:18:48 +0200
Subject: [PATCH] [Keymap] Add via support to Durgod K320 (#11960)

Co-authored-by: Maxime Coirault <maxime.coirault@zerokeyboard.com>
---
 keyboards/durgod/k320/k320.h                | 19 +++++
 keyboards/durgod/k320/keymaps/via/config.h  | 20 +++++
 keyboards/durgod/k320/keymaps/via/keymap.c  | 81 +++++++++++++++++++++
 keyboards/durgod/k320/keymaps/via/readme.md | 12 +++
 keyboards/durgod/k320/keymaps/via/rules.mk  |  2 +
 5 files changed, 134 insertions(+)
 create mode 100644 keyboards/durgod/k320/keymaps/via/config.h
 create mode 100644 keyboards/durgod/k320/keymaps/via/keymap.c
 create mode 100644 keyboards/durgod/k320/keymaps/via/readme.md
 create mode 100644 keyboards/durgod/k320/keymaps/via/rules.mk

diff --git a/keyboards/durgod/k320/k320.h b/keyboards/durgod/k320/k320.h
index 0e409a72cc..48da048410 100644
--- a/keyboards/durgod/k320/k320.h
+++ b/keyboards/durgod/k320/k320.h
@@ -60,3 +60,22 @@ void on_all_leds(void);
     { K50,  K51,  K52,  XXX,  XXX,  XXX,  K56,  XXX,  XXX,  XXX,  K5A,  K5B,  K5C,  K5D,  K5E,  K5F },  \
     { XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  K6F }   \
 }
+
+
+// This a shortcut to help you visually see your layout.
+#define LAYOUT_all( \
+      K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,            K0D,  K0E,  K0F,  \
+      K10,  K11,  K12,  K13,  K14,  K15,  K16,  K17,  K18,  K19,  K1A,  K1B,  K1C,  K1E,      K2E,  K2F,  K1F,  \
+      K20,  K21,  K22,  K23,  K24,  K25,  K26,  K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,      K3D,  K3E,  K3F,  \
+      K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K3C,  K4E,                        \
+      K40,  K41,  K42,  K43,  K44,  K45,  K46,  K47,  K48,  K49,  K4A,  K4B,        K4D,            K4F,        \
+      K50,  K51,  K52,                    K56,                    K5A,  K5B,  K5C,  K5D,      K5E,  K5F,  K6F   \
+) { \
+    { K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K0E,  K0F },  \
+    { K10,  K11,  K12,  K13,  K14,  K15,  K16,  K17,  K18,  K19,  K1A,  K1B,  K1C,  XXX,  K1E,  K1F },  \
+    { K20,  K21,  K22,  K23,  K24,  K25,  K26,  K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,  K2E,  K2F },  \
+    { K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D,  K3E,  K3F },  \
+    { K40,  K41,  K42,  K43,  K44,  K45,  K46,  K47,  K48,  K49,  K4A,  K4B,  XXX,  K4D,  K4E,  K4F },  \
+    { K50,  K51,  K52,  XXX,  XXX,  XXX,  K56,  XXX,  XXX,  XXX,  K5A,  K5B,  K5C,  K5D,  K5E,  K5F },  \
+    { XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  XXX,  K6F }   \
+}
diff --git a/keyboards/durgod/k320/keymaps/via/config.h b/keyboards/durgod/k320/keymaps/via/config.h
new file mode 100644
index 0000000000..2ae6fca9d9
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/via/config.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2021 Maxime Coirault
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/durgod/k320/keymaps/via/keymap.c b/keyboards/durgod/k320/keymaps/via/keymap.c
new file mode 100644
index 0000000000..9a4d9ff38c
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/via/keymap.c
@@ -0,0 +1,81 @@
+/* Copyright 2021 kuenhlee and Don Kjer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum _layer {
+    _BASE,
+    _FUNC,
+    _LAYER3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BASE: Base Layer (Default Layer)
+   * ,-----------------------------------------------------------.  ,--------------.
+   * |Esc  |f1| f2| f3| f4|  | f5| f6| f7| f8|   | f9|f10|f11|f12|  |Prnt|ScLk|Paus|
+   * |-----------------------------------------------------------|  |--------------|
+   * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |  0| - | = |Backsp |  | Ins|Home|PgUp|
+   * |-----------------------------------------------------------|  |--------------|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     |  | Del| End|PgDn|
+   * |------------------------------------------------------ Ret |  `--------------'
+   * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| #|    |
+   * |-----------------------------------------------------------|        ,----.
+   * |Shift| \|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |        | Up |
+   * |-----------------------------------------------------------|   ,-------------.
+   * |Ctrl|Gui |Alt |      Space            |Alt | Fn  |App |Ctrl|   |Lft| Dn |Rig |
+   * `-----------------------------------------------------------'   `-------------'
+   */
+  [_BASE] = LAYOUT_all( /* Base Layer */
+      KC_ESC,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,             KC_PSCR,  KC_SLCK,  KC_PAUS,
+      KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  KC_INS,   KC_HOME,  KC_PGUP,
+      KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  KC_DEL,   KC_END,   KC_PGDN,
+      KC_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_ENT,
+      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_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT,  MO(_FUNC),KC_APP,   KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT
+  ),
+  /* Keymap _FUNC: Function Layer
+   * ,-----------------------------------------------------------.  ,--------------.
+   * |   |Play|Stop|Prev|Next| |Mute|Vol+|Vol-|    | |  |  |  |  |  |    |    |    |
+   * |-----------------------------------------------------------|  |--------------|
+   * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |  |    |    |    |
+   * |-----------------------------------------------------------|  |--------------|
+   * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |  |    |    |    |
+   * |-------------------------------------------------------    |  `--------------'
+   * |       |   |   |   |   |   |   |   |   |   |   |   |  |    |
+   * |-----------------------------------------------------------|        ,----.
+   * |     |  |   |   |   |   |   |   |   |   |   |   |          |        |    |
+   * |-----------------------------------------------------------|   ,-------------.
+   * |    |    |    |                       |    |Func |    |    |   |   |    |    |
+   * `-----------------------------------------------------------'   `-------------'
+   */
+  [_FUNC] = LAYOUT_all( /* Function Layer */
+      _______,  KC_MPLY,  KC_MSTP,  KC_MRWD,  KC_MFFD,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,  _______,  _______,  _______,                _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,      _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,      _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,                _______,
+      _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,      _______,  _______,  _______
+  ),
+  [_LAYER3] = LAYOUT_all( /* Function Layer */
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,      _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,      _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
+      _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,                _______,
+      _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,      _______,  _______,  _______
+  ),
+};
+
diff --git a/keyboards/durgod/k320/keymaps/via/readme.md b/keyboards/durgod/k320/keymaps/via/readme.md
new file mode 100644
index 0000000000..1ed99238c6
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/via/readme.md
@@ -0,0 +1,12 @@
+# The default keymap for Durgod Taurus K320.
+
+Layer 0 : Standard Keys TKL layout
+
+Layer 1 : Media control
+- Reusing Durgod's Original Media Control for Fn + F1 ~ Fn + F7
+
+## Supported PCBs
+
+This firmware was tested on a Durgod K320 ISO with the PCB marked "DGK320ST-Single v1.0 HS20181227".
+
+The pcb features switch holes for ANSI layout, so this firmware might be compatible with with the Durgod K320 ANSI.
diff --git a/keyboards/durgod/k320/keymaps/via/rules.mk b/keyboards/durgod/k320/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/durgod/k320/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes