Pārlūkot izejas kodu

[Keyboard] 45-ATS (#10104)

* add ats folder

* fix duplicate matrix key

* fix matrix issues

* fix missing comma in info.json

* clean up info.json

* rm game layer toggle in via keymap

* update via keymap rules.mk

* Update info.json

* clear up layout graphics

* Apply suggestions from code review

* Update 45_ats.c

* Update 45_ats.h

* Update config.h

* Update config.h

* Update keyboards/45_ats/keymaps/default/config.h

* Update keymap.c

* Update keyboards/45_ats/keymaps/default/keymap.c

* Update keymap.c

* Update keyboards/45_ats/keymaps/via/keymap.c

* Apply suggestions from code review

* Update keyboards/45_ats/config.h
Garret G 4 gadi atpakaļ
vecāks
revīzija
616dc7dd5d

+ 19 - 0
keyboards/45_ats/45_ats.c

@@ -0,0 +1,19 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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 "45_ats.h"

+ 59 - 0
keyboards/45_ats/45_ats.h

@@ -0,0 +1,59 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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
+
+#include "quantum.h"
+
+#define xxx KC_NO
+
+#define LAYOUT_split_space( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C,      k0D, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A,    k1B,        k1D, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A,         k2B,   k2D, \
+    k30, k31,  k32,      k33,      k36,        k38,   k39,    k3A, k3B, k3D    \
+) { \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, xxx, k1D }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, xxx, k2D }, \
+    { k30, k31, k32, k33, xxx, xxx, k36, xxx, k38, k39, k3A, k3B, xxx, k3D }  \
+}
+
+#define LAYOUT_625_space( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C,      k0D, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A,    k1B,        k1D, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A,         k2B,   k2D, \
+    k30, k31,  k32,            k36,                 k39,      k3A, k3B, k3D    \
+) { \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, xxx, k1D }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, xxx, k2D }, \
+    { k30, k31, k32, xxx, xxx, xxx, k36, xxx, xxx, k39, k3A, k3B, xxx, k3D }  \
+}
+
+#define LAYOUT_600_space( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C,      k0D, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A,    k1B,        k1D, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A,         k2B,   k2D, \
+    k30, k31,  k32,            k36,           k38,    k39,    k3A, k3B, k3D    \
+) { \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, xxx, k1D }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, xxx, k2D }, \
+    { k30, k31, k32, xxx, xxx, xxx, k36, xxx, k38, k39, k3A, k3B, xxx, k3D }  \
+}

+ 52 - 0
keyboards/45_ats/config.h

@@ -0,0 +1,52 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xAB13
+#define PRODUCT_ID      0x4511
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Abec13
+#define PRODUCT         45ATS
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 14
+
+#define ENCODERS_PAD_A { B4 }
+#define ENCODERS_PAD_B { B5 }
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D3, D5, D7, D6 }
+#define MATRIX_COL_PINS { E6, B0, B1, B2, B3, B7, F6, F5, F4, C7, F7, C6, B6, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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

+ 169 - 0
keyboards/45_ats/info.json

@@ -0,0 +1,169 @@
+{
+    "keyboard_name": "45-ATS",
+    "url": "",
+    "maintainer": "The-Royal",
+    "width": 14.25,
+    "height": 4.25,
+    "layouts": {
+      "LAYOUT_split_space": {
+        "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.5, "y":0},
+          {"label":"", "x":0, "y":1, "w":1.25},
+          {"label":"", "x":1.25, "y":1},
+          {"label":"", "x":2.25, "y":1},
+          {"label":"", "x":3.25, "y":1},
+          {"label":"", "x":4.25, "y":1},
+          {"label":"", "x":5.25, "y":1},
+          {"label":"", "x":6.25, "y":1},
+          {"label":"", "x":7.25, "y":1},
+          {"label":"", "x":8.25, "y":1},
+          {"label":"", "x":9.25, "y":1},
+          {"label":"", "x":10.25, "y":1},
+          {"label":"", "x":11.25, "y":1, "w":1.75},
+          {"label":"", "x":13.5, "y":1},
+          {"label":"", "x":0, "y":2, "w":1.75},
+          {"label":"", "x":1.75, "y":2},
+          {"label":"", "x":2.75, "y":2},
+          {"label":"", "x":3.75, "y":2},
+          {"label":"", "x":4.75, "y":2},
+          {"label":"", "x":5.75, "y":2},
+          {"label":"", "x":6.75, "y":2},
+          {"label":"", "x":7.75, "y":2},
+          {"label":"", "x":8.75, "y":2},
+          {"label":"", "x":9.75, "y":2},
+          {"label":"", "x":10.75, "y":2, "w":1.25},
+          {"label":"", "x":12.25, "y":2.25},
+          {"label":"", "x":13.5, "y":2},
+          {"label":"", "x":0, "y":3, "w":1.25},
+          {"label":"", "x":1.25, "y":3},
+          {"label":"", "x":2.25, "y":3, "w":1.25},
+          {"label":"", "x":3.5, "y":3, "w":2.75},
+          {"label":"", "x":6.25, "y":3, "w":2.25},
+          {"label":"", "x":8.5, "y":3, "w":1.25},
+          {"label":"", "x":9.75, "y":3, "w":1.25},
+          {"label":"", "x":11.25, "y":3.25},
+          {"label":"", "x":12.25, "y":3.25},
+          {"label":"", "x":13.25, "y":3.25}
+        ]
+      },
+      "LAYOUT_625_space": {
+        "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.5, "y":0},
+          {"label":"", "x":0, "y":1, "w":1.25},
+          {"label":"", "x":1.25, "y":1},
+          {"label":"", "x":2.25, "y":1},
+          {"label":"", "x":3.25, "y":1},
+          {"label":"", "x":4.25, "y":1},
+          {"label":"", "x":5.25, "y":1},
+          {"label":"", "x":6.25, "y":1},
+          {"label":"", "x":7.25, "y":1},
+          {"label":"", "x":8.25, "y":1},
+          {"label":"", "x":9.25, "y":1},
+          {"label":"", "x":10.25, "y":1},
+          {"label":"", "x":11.25, "y":1, "w":1.75},
+          {"label":"", "x":13.5, "y":1},
+          {"label":"", "x":0, "y":2, "w":1.75},
+          {"label":"", "x":1.75, "y":2},
+          {"label":"", "x":2.75, "y":2},
+          {"label":"", "x":3.75, "y":2},
+          {"label":"", "x":4.75, "y":2},
+          {"label":"", "x":5.75, "y":2},
+          {"label":"", "x":6.75, "y":2},
+          {"label":"", "x":7.75, "y":2},
+          {"label":"", "x":8.75, "y":2},
+          {"label":"", "x":9.75, "y":2},
+          {"label":"", "x":10.75, "y":2, "w":1.25},
+          {"label":"", "x":12.25, "y":2.25},
+          {"label":"K", "x":13.5, "y":2},
+          {"label":"", "x":0, "y":3, "w":1.25},
+          {"label":"", "x":1.25, "y":3},
+          {"label":"", "x":2.25, "y":3, "w":1.25},
+          {"label":"", "x":3.5, "y":3, "w":6.25},
+          {"label":"", "x":9.75, "y":3, "w":1.25},
+          {"label":"", "x":11.25, "y":3.25},
+          {"label":"", "x":12.25, "y":3.25},
+          {"label":"", "x":13.25, "y":3.25}
+        ]
+      },
+      "LAYOUT_600_space": {
+        "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.5, "y":0},
+          {"label":"", "x":0, "y":1, "w":1.25},
+          {"label":"", "x":1.25, "y":1},
+          {"label":"", "x":2.25, "y":1},
+          {"label":"", "x":3.25, "y":1},
+          {"label":"", "x":4.25, "y":1},
+          {"label":"", "x":5.25, "y":1},
+          {"label":"", "x":6.25, "y":1},
+          {"label":"", "x":7.25, "y":1},
+          {"label":"", "x":8.25, "y":1},
+          {"label":"", "x":9.25, "y":1},
+          {"label":"", "x":10.25, "y":1},
+          {"label":"", "x":11.25, "y":1, "w":1.75},
+          {"label":"", "x":13.5, "y":1},
+          {"label":"", "x":0, "y":2, "w":1.75},
+          {"label":"", "x":1.75, "y":2},
+          {"label":"", "x":2.75, "y":2},
+          {"label":"", "x":3.75, "y":2},
+          {"label":"", "x":4.75, "y":2},
+          {"label":"", "x":5.75, "y":2},
+          {"label":"", "x":6.75, "y":2},
+          {"label":"", "x":7.75, "y":2},
+          {"label":"", "x":8.75, "y":2},
+          {"label":"", "x":9.75, "y":2},
+          {"label":"", "x":10.75, "y":2, "w":1.25},
+          {"label":"", "x":12.25, "y":2.25},
+          {"label":"", "x":13.5, "y":2},
+          {"label":"", "x":0, "y":3},
+          {"label":"", "x":1, "y":3},
+          {"label":"", "x":2, "y":3},
+          {"label":"", "x":3, "y":3, "w":6.00},
+          {"label":"", "x":9, "y":3},
+          {"label":"", "x":10, "y":3},
+          {"label":"", "x":11.25, "y":3.25},
+          {"label":"", "x":12.25, "y":3.25},
+          {"label":"", "x":13.25, "y":3.25}
+        ]
+      }
+    }
+  }
+  

+ 25 - 0
keyboards/45_ats/keymaps/default/config.h

@@ -0,0 +1,25 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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 TAPPING_TERM 175
+
+#define PERMISSIVE_HOLD
+
+#define MOD_TAP_INTERUPT

+ 107 - 0
keyboards/45_ats/keymaps/default/keymap.c

@@ -0,0 +1,107 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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 names
+enum ats_layers{
+  // - Base layer:
+  _BASE,
+  // - Symbols, numbers, and functions:
+  _FN,
+  // - Alternate Function layer:
+  _LN
+};
+
+#define RS_SLS RSFT_T(KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Default QWERTY layer 
+     * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │Esc│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │Del│BkS│   │PgU│
+     * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │Tab │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ' │Enter │   │PgD│
+     * ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │LShift│ Z │ X │ C │ V │ B │ N │ M │ , │ . │Sft/│ ┌───┐ │CAP│
+     * ├────┬─┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │ ↑ │ └───┘
+     * │LCtl│OS │LAlt│    Fn    │  Space │RAlt│ Ln │ ┌───┼───┼───┐
+     * └────┴───┴────┴──────────┴────────┴────┴────┘ │ ← │ ↓ │ → │
+     *                                               └───┴───┴───┘
+     */
+    [_BASE] = LAYOUT_split_space(
+        KC_ESC,   KC_Q,     KC_W,    KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,     KC_O,    KC_P,      KC_DEL, KC_BSPC,         KC_PGUP,
+        KC_TAB,   KC_A,     KC_S,    KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,     KC_L,    KC_QUOTE,      KC_ENT,              KC_PGDN,
+        KC_LSFT,  KC_Z,     KC_X,    KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM,  KC_DOT,  RS_SLS,                 KC_UP,      KC_CAPS,
+        KC_LCTL,  KC_LGUI,  KC_LALT,          MO(_FN),      KC_SPACE,        KC_RALT,      MO(_LN),       KC_LEFT, KC_DOWN, KC_RIGHT
+    ),
+    /* Main Numbers, Symbols & Function Layer (MOMENTARY)
+     * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │   │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ [ │ ] │ \ │   │   │Hme│
+     * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │    │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │      │   │End│
+     * ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │      │ ( │ ) │ ; │ . │   │ - │ + │ * │ / │ =  │ ┌───┐ │   │
+     * ├────┬─┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │   │ └───┘
+     * │    │   │    │          │        │    │    │ ┌───┼───┼───┐
+     * └────┴───┴────┴──────────┴────────┴────┴────┘ │   │   │   │
+     *                                               └───┴───┴───┘
+     */
+    [_FN] = LAYOUT_split_space(
+        _______,  KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,  KC_PERC,  KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LBRC,  KC_RBRC,  KC_BSLS,   _______,             KC_HOME,
+        _______,  KC_1,     KC_2,     KC_3,     KC_4,    KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,          KC_ENTER,                  KC_END,
+        _______,  KC_LPRN,  KC_RPRN,  KC_SCLN,  KC_DOT,  _______,  KC_MINS,  KC_PLUS,  KC_ASTR,  KC_SLSH,  KC_EQL,                     _______,      _______,
+        _______,  _______,  _______,                _______,            _______,            _______,       _______,          _______,  _______,   _______
+    ),
+
+    /* ALTERNATE Function layer (MOMENTARY)
+     * ┌────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │ PWR│F1 │F2 │F3 │F4 │F5 │F6 │   │   │   │   │PRV│NXT│   │VL+│
+     * ├────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │ SLP │F7 │F8 │F9 │F10│F11│F12│   │   │   │   │ PLAY │   │VL-│
+     * ├─────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │ WAKE  │   │   │   │   │   │   │   │   │   │    │ ┌───┐ │   │
+     * ├────┬──┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │   │ └───┘
+     * │RSET│    │    │          │        │    │    │ ┌───┼───┼───┐
+     * └────┴────┴────┴──────────┴────────┴────┴────┘ │   │   │   │
+     *                                                └───┴───┴───┘
+     */
+    [_LN] = LAYOUT_split_space(
+        KC_PWR,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    _______,  _______,  _______,  _______,  KC_MPRV,  KC_MNXT,               KC_VOLU,
+        KC_SLEP,  KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,  _______,  _______,       KC_MPLY,                    KC_VOLD,
+        KC_WAKE,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                    _______,       _______,
+        RESET,    _______,  _______,                 _______,            _______,            _______,       _______,          _______,  _______,   _______
+    )
+};
+
+//function for layer indicator LED
+layer_state_t layer_state_set_user(layer_state_t state) {
+    writePin(D0, layer_state_cmp(state, 0));
+    writePin(D1, layer_state_cmp(state, 1));
+    writePin(D2, layer_state_cmp(state, 2));
+    return state;
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+    if (index == 0) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+}

+ 107 - 0
keyboards/45_ats/keymaps/via/keymap.c

@@ -0,0 +1,107 @@
+ /* 
+ Copyright 2020 Alec Penland
+ Copyright 2020 Garret Gartner
+  
+ 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 names
+enum ats_layers{
+  // - Base layer:
+  _BASE,
+  // - Symbols, numbers, and functions:
+  _FN,
+  // - Alternate Function layer:
+  _LN
+};
+
+#define RS_SLS RSFT_T(KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Default QWERTY layer 
+     * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │Esc│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │Del│BkS│   │PgU│
+     * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │Tab │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ' │Enter │   │PgD│
+     * ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │LShift│ Z │ X │ C │ V │ B │ N │ M │ , │ . │Sft/│ ┌───┐ │CAP│
+     * ├────┬─┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │ ↑ │ └───┘
+     * │LCtl│OS │LAlt│    Fn    │  Space │RAlt│ Ln │ ┌───┼───┼───┐
+     * └────┴───┴────┴──────────┴────────┴────┴────┘ │ ← │ ↓ │ → │
+     *                                               └───┴───┴───┘
+     */
+    [_BASE] = LAYOUT_split_space(
+        KC_ESC,   KC_Q,     KC_W,    KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,     KC_O,    KC_P,      KC_DEL, KC_BSPC,         KC_PGUP,
+        KC_TAB,   KC_A,     KC_S,    KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,     KC_L,    KC_QUOTE,      KC_ENT,              KC_PGDN,
+        KC_LSFT,  KC_Z,     KC_X,    KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM,  KC_DOT,  RS_SLS,                 KC_UP,      KC_CAPS,
+        KC_LCTL,  KC_LGUI,  KC_LALT,          MO(_FN),      KC_SPACE,        KC_RALT,      MO(_LN),       KC_LEFT, KC_DOWN, KC_RIGHT
+    ),
+    /* Main Numbers, Symbols & Function Layer (MOMENTARY)
+     * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │   │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ [ │ ] │ \ │   │   │Hme│
+     * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │    │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │      │   │End│
+     * ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │      │ ( │ ) │ ; │ . │   │ - │ + │ * │ / │ =  │ ┌───┐ │   │
+     * ├────┬─┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │   │ └───┘
+     * │    │   │    │          │        │    │    │ ┌───┼───┼───┐
+     * └────┴───┴────┴──────────┴────────┴────┴────┘ │   │   │   │
+     *                                               └───┴───┴───┘
+     */
+    [_FN] = LAYOUT_split_space(
+        _______,  KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,  KC_PERC,  KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LBRC,  KC_RBRC,  KC_BSLS,   _______,             KC_HOME,
+        _______,  KC_1,     KC_2,     KC_3,     KC_4,    KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,          KC_ENTER,                  KC_END,
+        _______,  KC_LPRN,  KC_RPRN,  KC_SCLN,  KC_DOT,  _______,  KC_MINS,  KC_PLUS,  KC_ASTR,  KC_SLSH,  KC_EQL,                     _______,      _______,
+        _______,  _______,  _______,                _______,            _______,            _______,       _______,          _______,  _______,   _______
+    ),
+
+    /* ALTERNATE Function layer (MOMENTARY)
+     * ┌────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
+     * │ PWR│F1 │F2 │F3 │F4 │F5 │F6 │   │   │   │   │PRV│NXT│   │VL+│
+     * ├────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤   ├───┤
+     * │ SLP │F7 │F8 │F9 │F10│F11│F12│   │   │   │   │ PLAY │   │VL-│
+     * ├─────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──┬───┘   ├───┤
+     * │ WAKE  │   │   │   │   │   │   │   │   │   │    │ ┌───┐ │   │
+     * ├────┬──┴─┬─┴──┬┴───┴───┴─┬─┴───┴──┬┴───┼───┴┬───┘ │   │ └───┘
+     * │RSET│    │    │          │        │    │    │ ┌───┼───┼───┐
+     * └────┴────┴────┴──────────┴────────┴────┴────┘ │   │   │   │
+     *                                                └───┴───┴───┘
+     */
+    [_LN] = LAYOUT_split_space(
+        KC_PWR,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    _______,  _______,  _______,  _______,  KC_MPRV,  KC_MNXT,               KC_VOLU,
+        KC_SLEP,  KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,  _______,  _______,       KC_MPLY,                    KC_VOLD,
+        KC_WAKE,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                    _______,       _______,
+        RESET,    _______,  _______,                 _______,            _______,            _______,       _______,          _______,  _______,   _______
+    )
+};
+
+//function for layer indicator LED
+layer_state_t layer_state_set_user(layer_state_t state) {
+    writePin(D0, layer_state_cmp(state, 0));
+    writePin(D1, layer_state_cmp(state, 1));
+    writePin(D2, layer_state_cmp(state, 2));
+    return state;
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+    if (index == 0) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+}

+ 3 - 0
keyboards/45_ats/keymaps/via/readme.md

@@ -0,0 +1,3 @@
+# 45-ATS VIA Firmware
+
+This keymap is to enable the use of VIA on the 45-ATS Keyboard.

+ 1 - 0
keyboards/45_ats/keymaps/via/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 16 - 0
keyboards/45_ats/readme.md

@@ -0,0 +1,16 @@
+# 45-ATS 
+
+![45ats](https://i.imgur.com/Paqx5zGl.png)
+
+A Premium and Beautiful 45% (And-Then-Some) Keyboard. Concept and Design by [Abec13](https://www.reddit.com/user/abec13).
+
+- Keyboard Designer: [Abec13](https://reddit.com/u/abec13/)
+- Keyboard Maintainer: [The-Royal](https://github.com/the-royal)
+- Hardware Supported: 45-ATS v1.0 PCB
+- Hardware Availability: Through Group Buy - Dec. 2019
+
+Make example for this keyboard (after setting up your build environment):
+
+    make 45_ats:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 22 - 0
keyboards/45_ats/rules.mk

@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = full     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = yes        # Console for debug
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output