From e25205e35d84d8c7b2b8e88bab2a0a0f70df1a32 Mon Sep 17 00:00:00 2001
From: Ilya Zhuravlev <whatever@xyz.is>
Date: Sun, 11 Jul 2021 19:23:11 -0400
Subject: [PATCH] vial_example: add STM32F401 vial example

---
 .../vial_example/vial_stm32f401/config.h      | 27 +++++++++++++++++++
 .../vial_stm32f401/keymaps/default/keymap.c   | 15 +++++++++++
 .../vial_stm32f401/keymaps/vial/config.h      |  7 +++++
 .../vial_stm32f401/keymaps/vial/keymap.c      | 25 +++++++++++++++++
 .../vial_stm32f401/keymaps/vial/rules.mk      |  2 ++
 .../vial_stm32f401/keymaps/vial/vial.json     | 18 +++++++++++++
 .../vial_example/vial_stm32f401/rules.mk      | 25 +++++++++++++++++
 .../vial_stm32f401/vial_stm32f401.c           |  3 +++
 .../vial_stm32f401/vial_stm32f401.h           | 13 +++++++++
 9 files changed, 135 insertions(+)
 create mode 100644 keyboards/vial_example/vial_stm32f401/config.h
 create mode 100644 keyboards/vial_example/vial_stm32f401/keymaps/default/keymap.c
 create mode 100644 keyboards/vial_example/vial_stm32f401/keymaps/vial/config.h
 create mode 100644 keyboards/vial_example/vial_stm32f401/keymaps/vial/keymap.c
 create mode 100644 keyboards/vial_example/vial_stm32f401/keymaps/vial/rules.mk
 create mode 100644 keyboards/vial_example/vial_stm32f401/keymaps/vial/vial.json
 create mode 100644 keyboards/vial_example/vial_stm32f401/rules.mk
 create mode 100644 keyboards/vial_example/vial_stm32f401/vial_stm32f401.c
 create mode 100644 keyboards/vial_example/vial_stm32f401/vial_stm32f401.h

diff --git a/keyboards/vial_example/vial_stm32f401/config.h b/keyboards/vial_example/vial_stm32f401/config.h
new file mode 100644
index 0000000000..3699ca9f94
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/config.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Vial
+#define PRODUCT         STM32F401 example
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 2
+
+#define MATRIX_ROW_PINS { B10, B11 }
+#define MATRIX_COL_PINS { B1, B0 }
+
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/* Use 1000hz polling */
+#define USB_POLLING_INTERVAL_MS 1
diff --git a/keyboards/vial_example/vial_stm32f401/keymaps/default/keymap.c b/keyboards/vial_example/vial_stm32f401/keymaps/default/keymap.c
new file mode 100644
index 0000000000..6c76cbf73d
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/keymaps/default/keymap.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT(
+        KC_1, KC_2,
+        KC_3, KC_4
+    ),
+
+    [1] = LAYOUT(
+        KC_A, KC_B,
+        KC_C, KC_D
+    )
+};
diff --git a/keyboards/vial_example/vial_stm32f401/keymaps/vial/config.h b/keyboards/vial_example/vial_stm32f401/keymaps/vial/config.h
new file mode 100644
index 0000000000..7a27fda00c
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/keymaps/vial/config.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0xD8, 0x0B, 0x9A, 0xC5, 0x1E, 0xD3, 0xD2, 0xBE}
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 1 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 1 }
diff --git a/keyboards/vial_example/vial_stm32f401/keymaps/vial/keymap.c b/keyboards/vial_example/vial_stm32f401/keymaps/vial/keymap.c
new file mode 100644
index 0000000000..c8fb892589
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/keymaps/vial/keymap.c
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT(
+        KC_1, KC_2,
+        KC_3, KC_4
+    ),
+
+    [1] = LAYOUT(
+        KC_A, KC_B,
+        KC_C, KC_D
+    ),
+
+    [2] = LAYOUT(
+        KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS
+    ),
+
+    [3] = LAYOUT(
+        KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS
+    )
+};
diff --git a/keyboards/vial_example/vial_stm32f401/keymaps/vial/rules.mk b/keyboards/vial_example/vial_stm32f401/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..4f7618e9b2
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/keymaps/vial/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
diff --git a/keyboards/vial_example/vial_stm32f401/keymaps/vial/vial.json b/keyboards/vial_example/vial_stm32f401/keymaps/vial/vial.json
new file mode 100644
index 0000000000..7525baeac5
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/keymaps/vial/vial.json
@@ -0,0 +1,18 @@
+{
+  "matrix": {
+    "rows": 2,
+    "cols": 2
+  },
+  "layouts": {
+    "keymap": [
+      [
+        "0,0",
+        "0,1"
+      ],
+      [
+        "1,0",
+        "1,1"
+      ]
+    ]
+  }
+}
diff --git a/keyboards/vial_example/vial_stm32f401/rules.mk b/keyboards/vial_example/vial_stm32f401/rules.mk
new file mode 100644
index 0000000000..18899be9d3
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F401
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite       # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no        # Console for debug
+COMMAND_ENABLE = no        # 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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no       # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/vial_example/vial_stm32f401/vial_stm32f401.c b/keyboards/vial_example/vial_stm32f401/vial_stm32f401.c
new file mode 100644
index 0000000000..8e14bd3387
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/vial_stm32f401.c
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "vial_stm32f401.h"
diff --git a/keyboards/vial_example/vial_stm32f401/vial_stm32f401.h b/keyboards/vial_example/vial_stm32f401/vial_stm32f401.h
new file mode 100644
index 0000000000..12c2bedb5f
--- /dev/null
+++ b/keyboards/vial_example/vial_stm32f401/vial_stm32f401.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+	K00, K01, \
+	K10, K11  \
+) { \
+	{ K00,   K01 }, \
+	{ K10,   K11 }  \
+}