Browse Source

Updated Ducky 2 one mini support (#11112)

* Initial Ducky One 2 Mini keyboard and keymap

* Keymap macro issue, together with general polish suggestions

* Separate default keymap into proper default, iso and ansi versions

* info.json updates (Configurator support). DEBOUNCE define adjust.

* Unused keymap defines removed.

* update requested ducky one mini2 board changes

* ducky: don't trigger app key with left shift

* ducky: make default mouse key behavior more linear

* ducky: add GRAVE_ESC_GUI_OVERRIDE to allow for win+esc to work

* ducky: playpause on fn space

* ducky: disable RGB_MATRIX until driver is merged

* ducky: clang-format matrix and one2mini.c

* ducky: update requested changes

Remove WFI_IDLE since it's already in the rules.mk CORTEX_ENABLE_WFI_IDLE=TRUE

* ducky: update requested changes

* ducky: move winkey grave esc to default keymap

* ducky: remove dipswitch from keymap and use DIP_SWITCH_MATRIX_GRID instead

* ducky: info.json lint

* ducky: enable DIP_SWITCH_ENABLE rule

* ducky: update readme

* ducky: fix backslash on default keymap

* ducky: remove unused USB_LED_CAPSLOCK_INDEX 28

* ducky: move mbi5042 led driver to ducky keyboard

* ducky: cosmetics

* ducky: requested changes

* ducky: refactor matrix.c again so we can better compare it to other boards

* ducky: remove bootmagic_lite as the boards bootloader trigger is actually handled in its own bootloader

* ducky: remove custom matrix

* ducky: update for chibios-contrib changes

* ducky: debug new USB driver

* ducky: debug usb issues

* ducky: update chibios version

* ducky: remove halconf.h

* ducky: update rules.mk

* ducky: update chconf.h

* Matching submodules.

* Restructure to explicitly define which board is in use, remove RGB driver pending followup PR.

* Revert "Matching submodules."

This reverts commit 2fbb34e0c63ea67ee09d2e2d525723c01431d1cd.

Co-authored-by: GitWellBack <48095880+GitWellBack@users.noreply.github.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Reza Jelveh 3 years ago
parent
commit
8e8803459f

+ 68 - 0
keyboards/ducky/one2mini/1861st/1861st.h

@@ -0,0 +1,68 @@
+/* Copyright 2019 /u/KeepItUnder
+ *
+ * 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"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_all( \
+    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, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) { \
+    { k00,  k01,   k02,   k03,   k04,   k05,   k06,   k07,   k08,   k09,   k0a,  k0b,  k0c,   k0d,   KC_NO }, \
+    { k10,  k11,   k12,   k13,   k14,   k15,   k16,   k17,   k18,   k19,   k1a,  k1b,  k1c,   k1d,   KC_NO }, \
+    { k20,  k21,   k22,   k23,   k24,   k25,   k26,   k27,   k28,   k29,   k2a,  k2b,  k2c,   k2d,   KC_NO }, \
+    { k30,  k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   k3a,  k3b,  KC_NO, k3d,   KC_NO }, \
+    { k40,  k41,   k42,   KC_NO, KC_NO, k45,   KC_NO, KC_NO, KC_NO, KC_NO, k4a,  k4b,  k4c,   k4d          }  \
+}
+
+#define LAYOUT_ansi( \
+    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, k1c, k1d,     \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d,     \
+    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d,     \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d      \
+) { \
+    { k00,  k01,   k02,   k03,   k04,   k05,   k06,   k07,   k08,   k09,   k0a,  k0b,  k0c,   k0d,   KC_NO }, \
+    { k10,  k11,   k12,   k13,   k14,   k15,   k16,   k17,   k18,   k19,   k1a,  k1b,  k1c,   k1d,   KC_NO }, \
+    { k20,  k21,   k22,   k23,   k24,   k25,   k26,   k27,   k28,   k29,   k2a,  k2b,  k2c,   k2d,   KC_NO }, \
+    { k30,  KC_NO, k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   k3a,  k3b,  KC_NO, k3d,   KC_NO }, \
+    { k40,  k41,   k42,   KC_NO, KC_NO, k45,   KC_NO, KC_NO, KC_NO, KC_NO, k4a,  k4b,  k4c,   k4d          }  \
+}
+
+#define LAYOUT_iso( \
+    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, k1c,          \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d,     \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d,     \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d      \
+) { \
+    { k00,  k01,   k02,   k03,   k04,   k05,   k06,   k07,   k08,   k09,   k0a,  k0b,  k0c,   k0d,   KC_NO, }, \
+    { k10,  k11,   k12,   k13,   k14,   k15,   k16,   k17,   k18,   k19,   k1a,  k1b,  k1c,   KC_NO, KC_NO, }, \
+    { k20,  k21,   k22,   k23,   k24,   k25,   k26,   k27,   k28,   k29,   k2a,  k2b,  k2c,   k2d,   KC_NO, }, \
+    { k30,  k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   k3a,  k3b,  KC_NO, k3d,   KC_NO, }, \
+    { k40,  k41,   k42,   KC_NO, KC_NO, k45,   KC_NO, KC_NO, KC_NO, KC_NO, k4a,  k4b,  k4c,   k4d           }  \
+}

+ 57 - 0
keyboards/ducky/one2mini/1861st/boards/NUC123SD4AN0/board.c

@@ -0,0 +1,57 @@
+/*
+    ChibiOS Driver element - Copyright (C) 2019 /u/KeepItUnder
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief   PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ *          This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#    if NUC123_HAS_GPIOA
+    {VAL_GPIOA_PMD, VAL_GPIOA_OFFD, VAL_GPIOA_DMASK, VAL_GPIOA_DBEN, VAL_GPIOA_IMD, VAL_GPIOA_IEN, VAL_GPIOA_ISRC, VAL_GPIOA_DOUT},
+#    endif
+#    if NUC123_HAS_GPIOB
+    {VAL_GPIOB_PMD, VAL_GPIOB_OFFD, VAL_GPIOB_DMASK, VAL_GPIOB_DBEN, VAL_GPIOB_IMD, VAL_GPIOB_IEN, VAL_GPIOB_ISRC, VAL_GPIOB_DOUT},
+#    endif
+#    if NUC123_HAS_GPIOC
+    {VAL_GPIOC_PMD, VAL_GPIOC_OFFD, VAL_GPIOC_DMASK, VAL_GPIOC_DBEN, VAL_GPIOC_IMD, VAL_GPIOC_IEN, VAL_GPIOC_ISRC, VAL_GPIOC_DOUT},
+#    endif
+#    if NUC123_HAS_GPIOD
+    {VAL_GPIOD_PMD, VAL_GPIOD_OFFD, VAL_GPIOD_DMASK, VAL_GPIOD_DBEN, VAL_GPIOD_IMD, VAL_GPIOD_IEN, VAL_GPIOD_ISRC, VAL_GPIOD_DOUT},
+#    endif
+#    if NUC123_HAS_GPIOF
+    {VAL_GPIOF_PMD, VAL_GPIOF_OFFD, VAL_GPIOF_DMASK, VAL_GPIOF_DBEN, VAL_GPIOF_IMD, VAL_GPIOF_IEN, VAL_GPIOF_ISRC, VAL_GPIOF_DOUT},
+#    endif
+};
+#endif
+
+/**
+ * @brief   Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ *          and before any other initialization.
+ */
+void __early_init(void) {
+    NUC123_clock_init();
+}
+
+/**
+ * @brief   Board-specific initialization code.
+ * @todo    Add your board-specific code, if any.
+ */
+void boardInit(void) {}

+ 961 - 0
keyboards/ducky/one2mini/1861st/boards/NUC123SD4AN0/board.h

@@ -0,0 +1,961 @@
+/*
+    ChibiOS Driver element - Copyright (C) 2019 /u/KeepItUnder
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef BOARD_H
+#define BOARD_H
+
+/*
+ * Setup for Generic NUC123 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_NUC123SD4AN0
+#define BOARD_NAME                  "Nuvoton NUC123SD4AN0 MCU"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ * NOTE: HSE is fitted.
+ */
+#if !defined(NUC123_LSECLK)
+#define NUC123_LSECLK                0U
+#endif
+
+#define NUC123_LSEDRV                (3U << 3U)
+
+#if !defined(NUC123_HSECLK)
+#define NUC123_HSECLK                12000000U
+#endif
+
+//#define NUC123_HSE_BYPASS
+
+/*
+ * MCU type as defined in the NUC123 header.
+ */
+#define NUC123SD4AN0
+
+/*
+ * GPIO Multi Function Pin USB Setup
+ * Requires Some GPIO pins to be disabled/set to USB
+ */
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_PIN0                  0U
+#define GPIOA_PIN1                  1U
+#define GPIOA_PIN2                  2U
+#define GPIOA_PIN3                  3U
+#define GPIOA_PIN4                  4U
+#define GPIOA_PIN5                  5U
+#define GPIOA_PIN6                  6U
+#define GPIOA_PIN7                  7U
+#define GPIOA_PIN8                  8U
+#define GPIOA_PIN9                  9U
+#define GPIOA_SPI1_MISO0            10U
+#define GPIOA_SPI1_CLK              11U
+#define GPIOA_PWM0                  12U
+#define GPIOA_PWM1                  13U
+#define GPIOA_PWM2                  14U
+#define GPIOA_PWM3                  15U
+
+#define GPIOB_UART0_RXD             0U
+#define GPIOB_UART0_TXD             1U
+#define GPIOB_UART0_RTS             2U
+#define GPIOB_UART0_CTS             3U
+#define GPIOB_UART1_RXD             4U
+#define GPIOB_UART1_TXD             5U
+#define GPIOB_UART1_RTS             6U
+#define GPIOB_UART1_CTS             7U
+#define GPIOB_TM0                   8U
+#define GPIOB_TM1                   9U
+#define GPIOB_TM2                   10U
+#define GPIOB_PIN11                 11U
+#define GPIOB_CLK0                  12U
+#define GPIOB_PIN13                 13U
+#define GPIOB_INT0                  14U
+#define GPIOB_INT1                  15U
+
+#define GPIOC_PIN0                  0U
+#define GPIOC_PIN1                  1U
+#define GPIOC_PIN2                  2U
+#define GPIOC_PIN3                  3U
+#define GPIOC_PIN4                  4U
+#define GPIOC_PIN5                  5U
+#define GPIOC_PIN6                  6U
+#define GPIOC_PIN7                  7U
+#define GPIOC_PIN8                  8U
+#define GPIOC_PIN9                  9U
+#define GPIOC_PIN10                 10U
+#define GPIOC_PIN11                 11U
+#define GPIOC_PIN12                 12U
+#define GPIOC_PIN13                 13U
+#define GPIOC_PIN14                 14U
+#define GPIOC_PIN15                 15U
+
+#define GPIOD_ADC0                  0U
+#define GPIOD_ADC1                  1U
+#define GPIOD_ADC2                  2U
+#define GPIOD_ADC3                  3U
+#define GPIOD_ADC4                  4U
+#define GPIOD_ADC5                  5U
+#define GPIOD_PIN6                  6U
+#define GPIOD_PIN7                  7U
+#define GPIOD_PIN8                  8U
+#define GPIOD_PIN9                  9U
+#define GPIOD_PIN10                 10U
+#define GPIOD_PIN11                 11U
+#define GPIOD_PIN12                 12U
+#define GPIOD_PIN13                 13U
+#define GPIOD_PIN14                 14U
+#define GPIOD_PIN15                 15U
+
+#define GPIOE_PIN0                  0U
+#define GPIOE_PIN1                  1U
+#define GPIOE_PIN2                  2U
+#define GPIOE_PIN3                  3U
+#define GPIOE_PIN4                  4U
+#define GPIOE_PIN5                  5U
+#define GPIOE_PIN6                  6U
+#define GPIOE_PIN7                  7U
+#define GPIOE_PIN8                  8U
+#define GPIOE_PIN9                  9U
+#define GPIOE_PIN10                 10U
+#define GPIOE_PIN11                 11U
+#define GPIOE_PIN12                 12U
+#define GPIOE_PIN13                 13U
+#define GPIOE_PIN14                 14U
+#define GPIOE_PIN15                 15U
+
+#define GPIOF_OSC_OUT               0U
+#define GPIOF_OSC_IN                1U
+#define GPIOF_I2C0_SDA              2U
+#define GPIOF_I2C0_SCL              3U
+#define GPIOF_PIN4                  4U
+#define GPIOF_PIN5                  5U
+#define GPIOF_PIN6                  6U
+#define GPIOF_PIN7                  7U
+#define GPIOF_PIN8                  8U
+#define GPIOF_PIN9                  9U
+#define GPIOF_PIN10                 10U
+#define GPIOF_PIN11                 11U
+#define GPIOF_PIN12                 12U
+#define GPIOF_PIN13                 13U
+#define GPIOF_PIN14                 14U
+#define GPIOF_PIN15                 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_USB_DM                 PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP                 PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO                  PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK                  PAL_LINE(GPIOA, 14U)
+
+// #define LINE_SPI2_SCK               PAL_LINE(GPIOB, 13U)
+// #define LINE_SPI2_MISO              PAL_LINE(GPIOB, 14U)
+// #define LINE_SPI2_MOSI              PAL_LINE(GPIOB, 15U)
+
+#define LINE_OSC_IN                 PAL_LINE(GPIOF, 0U)
+#define LINE_OSC_OUT                PAL_LINE(GPIOF, 1U)
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the NUC123 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n)             (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n)            (1U << ((n) * 2U))
+#define PIN_MODE_OPENDRAIN(n)         (2U << ((n) * 2U))
+#define PIN_MODE_QUASI(n)             (3U << ((n) * 2U))
+#define PIN_DIGITAL_EN(n)             (0U << (n))
+#define PIN_DIGITAL_DIS(n)            (1U << (n))
+#define PIN_DMASK_DIS(n)              (0U << (n))
+#define PIN_DMASK_EN(n)               (1U << (n))
+#define PIN_DBNCE_DIS(n)              (0U << (n))
+#define PIN_DBNCE_EN(n)               (1U << (n))
+#define PIN_IMD_EDGE(n)               (0U << (n))
+#define PIN_IMD_LVL(n)                (1U << (n))
+#define PIN_IEN_FELL_DIS(n)           (0U << (n))
+#define PIN_IEN_FELL_EN(n)            (1U << (n))
+#define PIN_IEN_REHL_DIS(n)           ((0U << (n)) << 16)
+#define PIN_IEN_REHL_EN(n)            ((1U << (n)) << 16)
+#define PIN_ISRC_EN(n)                (1U << (n))
+#define PIN_ISRC_DIS(n)               (0U << (n))
+#define PIN_ISRC_CLR(n)               (1U << (n))
+#define PIN_DATA_LOW(n)               (0U << (n))
+#define PIN_DATA_HIGH(n)              (1U << (n))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0  - PIN0                      (input pullup).
+ * PA1  - PIN1                      (input pullup).
+ * PA2  - PIN2                      (input pullup).
+ * PA3  - PIN3                      (input pullup).
+ * PA4  - PIN4                      (input pullup).
+ * PA5  - PIN5                      (input pullup).
+ * PA6  - PIN6                      (input pullup).
+ * PA7  - PIN7                      (input pullup).
+ * PA8  - PIN8                      (input pullup).
+ * PA9  - PIN9                      (input pullup).
+ * PA10 - SPI1_MISO0                (input pullup).
+ * PA11 - SPI1_CLK                  (input floating).
+ * PA12 - PWM0                      (input floating).
+ * PA13 - PWM1                      (input pullup).
+ * PA14 - PWM2                      (input pullup).
+ * PA15 - PWM3                      (input pullup).
+ */
+
+#define VAL_GPIOA_PMD               (PIN_MODE_INPUT(GPIOA_PIN0) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOA_SPI1_MISO0) |          \
+                                     PIN_MODE_INPUT(GPIOA_SPI1_CLK) |         \
+                                     PIN_MODE_INPUT(GPIOA_PWM0) |         \
+                                     PIN_MODE_INPUT(GPIOA_PWM1) |      \
+                                     PIN_MODE_INPUT(GPIOA_PWM2) |      \
+                                     PIN_MODE_INPUT(GPIOA_PWM3))
+#define VAL_GPIOA_OFFD              (PIN_DIGITAL_EN(GPIOA_PIN0) |     \
+                                     PIN_DIGITAL_EN(GPIOA_PIN1) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN2) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN3) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN4) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN5) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN6) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN7) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN8) |       \
+                                     PIN_DIGITAL_EN(GPIOA_PIN9) |       \
+                                     PIN_DIGITAL_EN(GPIOA_SPI1_MISO0) |      \
+                                     PIN_DIGITAL_EN(GPIOA_SPI1_CLK) |     \
+                                     PIN_DIGITAL_EN(GPIOA_PWM0) |     \
+                                     PIN_DIGITAL_EN(GPIOA_PWM1) |      \
+                                     PIN_DIGITAL_EN(GPIOA_PWM2) |      \
+                                     PIN_DIGITAL_EN(GPIOA_PWM3))
+#define VAL_GPIOA_DMASK             (PIN_DMASK_EN(GPIOA_PIN0) |     \
+                                     PIN_DMASK_EN(GPIOA_PIN1) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN2) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN3) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN4) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN5) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN6) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN7) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN8) |       \
+                                     PIN_DMASK_EN(GPIOA_PIN9) |       \
+                                     PIN_DMASK_EN(GPIOA_SPI1_MISO0) |      \
+                                     PIN_DMASK_EN(GPIOA_SPI1_CLK) |     \
+                                     PIN_DMASK_EN(GPIOA_PWM0) |     \
+                                     PIN_DMASK_EN(GPIOA_PWM1) |         \
+                                     PIN_DMASK_EN(GPIOA_PWM2) |         \
+                                     PIN_DMASK_EN(GPIOA_PWM3))
+#define VAL_GPIOA_DBEN              (PIN_DBNCE_EN(GPIOA_PIN0) |     \
+                                     PIN_DBNCE_EN(GPIOA_PIN1) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN2) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN3) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN4) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN5) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN6) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN7) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN8) |         \
+                                     PIN_DBNCE_EN(GPIOA_PIN9) |         \
+                                     PIN_DBNCE_EN(GPIOA_SPI1_MISO0) |        \
+                                     PIN_DBNCE_EN(GPIOA_SPI1_CLK) |     \
+                                     PIN_DBNCE_EN(GPIOA_PWM0) |     \
+                                     PIN_DBNCE_EN(GPIOA_PWM1) |        \
+                                     PIN_DBNCE_EN(GPIOA_PWM2) |      \
+                                     PIN_DBNCE_EN(GPIOA_PWM3))
+#define VAL_GPIOA_IMD               (PIN_IMD_EDGE(GPIOA_PIN0) |           \
+                                     PIN_IMD_EDGE(GPIOA_PIN1) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN2) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN3) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN4) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN5) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN6) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN7) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN8) |             \
+                                     PIN_IMD_EDGE(GPIOA_PIN9) |             \
+                                     PIN_IMD_EDGE(GPIOA_SPI1_MISO0) |            \
+                                     PIN_IMD_EDGE(GPIOA_SPI1_CLK) |           \
+                                     PIN_IMD_EDGE(GPIOA_PWM0) |           \
+                                     PIN_IMD_EDGE(GPIOA_PWM1) |            \
+                                     PIN_IMD_EDGE(GPIOA_PWM2) |            \
+                                     PIN_IMD_EDGE(GPIOA_PWM3))
+#define VAL_GPIOA_IEN               (PIN_IEN_FELL_DIS(GPIOA_PIN0) |        \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN1) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN2) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN3) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN4) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN5) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN6) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN7) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN8) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_PIN9) |          \
+                                     PIN_IEN_FELL_DIS(GPIOA_SPI1_MISO0) |         \
+                                     PIN_IEN_FELL_DIS(GPIOA_SPI1_CLK) |        \
+                                     PIN_IEN_FELL_DIS(GPIOA_PWM0) |        \
+                                     PIN_IEN_FELL_DIS(GPIOA_PWM1) |         \
+                                     PIN_IEN_FELL_DIS(GPIOA_PWM2) |         \
+                                     PIN_IEN_FELL_DIS(GPIOA_PWM3))
+#define VAL_GPIOA_ISRC              (PIN_ISRC_DIS(GPIOA_PIN0) |        \
+                                     PIN_ISRC_DIS(GPIOA_PIN1) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN2) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN3) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN4) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN5) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN6) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN7) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN8) |          \
+                                     PIN_ISRC_DIS(GPIOA_PIN9) |          \
+                                     PIN_ISRC_DIS(GPIOA_SPI1_MISO0) |         \
+                                     PIN_ISRC_DIS(GPIOA_SPI1_CLK) |        \
+                                     PIN_ISRC_DIS(GPIOA_PWM0) |        \
+                                     PIN_ISRC_DIS(GPIOA_PWM1) |         \
+                                     PIN_ISRC_DIS(GPIOA_PWM2) |         \
+                                     PIN_ISRC_DIS(GPIOA_PWM3))
+#define VAL_GPIOA_DOUT              (PIN_DATA_LOW(GPIOA_PIN0) |        \
+                                     PIN_DATA_LOW(GPIOA_PIN1) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN2) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN3) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN4) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN5) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN6) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN7) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN8) |          \
+                                     PIN_DATA_LOW(GPIOA_PIN9) |          \
+                                     PIN_DATA_LOW(GPIOA_SPI1_MISO0) |         \
+                                     PIN_DATA_LOW(GPIOA_SPI1_CLK) |        \
+                                     PIN_DATA_LOW(GPIOA_PWM0) |        \
+                                     PIN_DATA_LOW(GPIOA_PWM1) |         \
+                                     PIN_DATA_LOW(GPIOA_PWM2) |         \
+                                     PIN_DATA_LOW(GPIOA_PWM3))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0  - UART0_RXD                 (input pullup).
+ * PB1  - UART0_TXD                 (output).
+ * PB2  - UART0_RTS                 (output).
+ * PB3  - UART0_CTS                 (output).
+ * PB4  - UART1_RXD                 (output).
+ * PB5  - UART1_TXD                 (output).
+ * PB6  - UART1_RTS                 (output).
+ * PB7  - UART1_CTS                 (output).
+ * PB8  - TM0                       (input pullup).
+ * PB9  - TM1                       (input pullup).
+ * PB10 - TM2                       (input pullup).
+ * PB11 - PIN11                     (input pullup).
+ * PB12 - CLK0                      (output).
+ * PB13 - PIN13                     (output).
+ * PB14 - INT0                      (debug output).
+ * PB15 - INT1                      (input pullup).
+ */
+#define VAL_GPIOB_PMD               (PIN_MODE_INPUT(GPIOB_UART0_RXD) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART0_TXD) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART0_RTS) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART0_CTS) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART1_RXD) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART1_TXD) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART1_RTS) |           \
+                                     PIN_MODE_OUTPUT(GPIOB_UART1_CTS) |           \
+                                     PIN_MODE_INPUT(GPIOB_TM0) |           \
+                                     PIN_MODE_INPUT(GPIOB_TM1) |           \
+                                     PIN_MODE_INPUT(GPIOB_TM2) |          \
+                                     PIN_MODE_INPUT(GPIOB_PIN11) |          \
+                                     PIN_MODE_OUTPUT(GPIOB_CLK0) |          \
+                                     PIN_MODE_OUTPUT(GPIOB_PIN13) |   \
+                                     PIN_MODE_OUTPUT(GPIOB_INT0) |  \
+                                     PIN_MODE_INPUT(GPIOB_INT1))
+#define VAL_GPIOB_OFFD              (PIN_DIGITAL_EN(GPIOB_UART0_RXD) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART0_TXD) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART0_RTS) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART0_CTS) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART1_RXD) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART1_TXD) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART1_RTS) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_UART1_CTS) |       \
+                                     PIN_DIGITAL_DIS(GPIOB_TM0) |       \
+                                     PIN_DIGITAL_EN(GPIOB_TM1) |       \
+                                     PIN_DIGITAL_EN(GPIOB_TM2) |      \
+                                     PIN_DIGITAL_EN(GPIOB_PIN11) |      \
+                                     PIN_DIGITAL_DIS(GPIOB_CLK0) |      \
+                                     PIN_DIGITAL_DIS(GPIOB_PIN13) |   \
+                                     PIN_DIGITAL_DIS(GPIOB_INT0) |  \
+                                     PIN_DIGITAL_EN(GPIOB_INT1))
+#define VAL_GPIOB_DMASK             (PIN_DMASK_EN(GPIOB_UART0_RXD) |       \
+                                     PIN_DMASK_DIS(GPIOB_UART0_TXD) |       \
+                                     PIN_DMASK_DIS(GPIOB_UART0_RTS) |          \
+                                     PIN_DMASK_DIS(GPIOB_UART0_CTS) |          \
+                                     PIN_DMASK_DIS(GPIOB_UART1_RXD) |          \
+                                     PIN_DMASK_DIS(GPIOB_UART1_TXD) |       \
+                                     PIN_DMASK_DIS(GPIOB_UART1_RTS) |       \
+                                     PIN_DMASK_DIS(GPIOB_UART1_CTS) |       \
+                                     PIN_DMASK_EN(GPIOB_TM0) |       \
+                                     PIN_DMASK_EN(GPIOB_TM1) |       \
+                                     PIN_DMASK_EN(GPIOB_TM2) |      \
+                                     PIN_DMASK_EN(GPIOB_PIN11) |      \
+                                     PIN_DMASK_DIS(GPIOB_CLK0) |      \
+                                     PIN_DMASK_DIS(GPIOB_PIN13) |   \
+                                     PIN_DMASK_DIS(GPIOB_INT0) |  \
+                                     PIN_DMASK_EN(GPIOB_INT1))
+#define VAL_GPIOB_DBEN              (PIN_DBNCE_EN(GPIOB_UART0_RXD) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART0_TXD) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART0_RTS) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART0_CTS) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART1_RXD) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART1_TXD) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART1_RTS) |         \
+                                     PIN_DBNCE_DIS(GPIOB_UART1_CTS) |         \
+                                     PIN_DBNCE_EN(GPIOB_TM0) |         \
+                                     PIN_DBNCE_EN(GPIOB_TM1) |         \
+                                     PIN_DBNCE_EN(GPIOB_TM2) |        \
+                                     PIN_DBNCE_EN(GPIOB_PIN11) |        \
+                                     PIN_DBNCE_DIS(GPIOB_CLK0) |        \
+                                     PIN_DBNCE_DIS(GPIOB_PIN13) |   \
+                                     PIN_DBNCE_DIS(GPIOB_INT0) |  \
+                                     PIN_DBNCE_EN(GPIOB_INT1))
+#define VAL_GPIOB_IMD               (PIN_IMD_EDGE(GPIOB_UART0_RXD) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART0_TXD) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART0_RTS) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART0_CTS) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART1_RXD) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART1_TXD) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART1_RTS) |             \
+                                     PIN_IMD_EDGE(GPIOB_UART1_CTS) |             \
+                                     PIN_IMD_EDGE(GPIOB_TM0) |             \
+                                     PIN_IMD_EDGE(GPIOB_TM1) |             \
+                                     PIN_IMD_EDGE(GPIOB_TM2) |            \
+                                     PIN_IMD_EDGE(GPIOB_PIN11) |            \
+                                     PIN_IMD_EDGE(GPIOB_CLK0) |            \
+                                     PIN_IMD_EDGE(GPIOB_PIN13) |         \
+                                     PIN_IMD_EDGE(GPIOB_INT0) |        \
+                                     PIN_IMD_EDGE(GPIOB_INT1))
+#define VAL_GPIOB_IEN               (PIN_IEN_FELL_DIS(GPIOB_UART0_RXD) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART0_TXD) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART0_RTS) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART0_CTS) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART1_RXD) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART1_TXD) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART1_RTS) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_UART1_CTS) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_TM0) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_TM1) |          \
+                                     PIN_IEN_FELL_DIS(GPIOB_TM2) |         \
+                                     PIN_IEN_FELL_DIS(GPIOB_PIN11) |         \
+                                     PIN_IEN_FELL_DIS(GPIOB_CLK0) |         \
+                                     PIN_IEN_FELL_DIS(GPIOB_PIN13) |      \
+                                     PIN_IEN_FELL_DIS(GPIOB_INT0) |     \
+                                     PIN_IEN_FELL_DIS(GPIOB_INT1))
+#define VAL_GPIOB_ISRC              (PIN_ISRC_DIS(GPIOB_UART0_RXD) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART0_TXD) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART0_RTS) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART0_CTS) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART1_RXD) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART1_TXD) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART1_RTS) |          \
+                                     PIN_ISRC_DIS(GPIOB_UART1_CTS) |          \
+                                     PIN_ISRC_DIS(GPIOB_TM0) |          \
+                                     PIN_ISRC_DIS(GPIOB_TM1) |          \
+                                     PIN_ISRC_DIS(GPIOB_TM2) |         \
+                                     PIN_ISRC_DIS(GPIOB_PIN11) |         \
+                                     PIN_ISRC_DIS(GPIOB_CLK0) |         \
+                                     PIN_ISRC_DIS(GPIOB_PIN13) |      \
+                                     PIN_ISRC_DIS(GPIOB_INT0) |     \
+                                     PIN_ISRC_DIS(GPIOB_INT1))
+#define VAL_GPIOB_DOUT              (PIN_DATA_LOW(GPIOB_UART0_RXD) |          \
+                                     PIN_DATA_LOW(GPIOB_UART0_TXD) |          \
+                                     PIN_DATA_LOW(GPIOB_UART0_RTS) |          \
+                                     PIN_DATA_LOW(GPIOB_UART0_CTS) |          \
+                                     PIN_DATA_LOW(GPIOB_UART1_RXD) |          \
+                                     PIN_DATA_LOW(GPIOB_UART1_TXD) |          \
+                                     PIN_DATA_LOW(GPIOB_UART1_RTS) |          \
+                                     PIN_DATA_LOW(GPIOB_UART1_CTS) |          \
+                                     PIN_DATA_LOW(GPIOB_TM0) |          \
+                                     PIN_DATA_LOW(GPIOB_TM1) |          \
+                                     PIN_DATA_LOW(GPIOB_TM2) |         \
+                                     PIN_DATA_LOW(GPIOB_PIN11) |         \
+                                     PIN_DATA_LOW(GPIOB_CLK0) |         \
+                                     PIN_DATA_LOW(GPIOB_PIN13) |      \
+                                     PIN_DATA_LOW(GPIOB_INT0) |     \
+                                     PIN_DATA_LOW(GPIOB_INT1))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0  - PIN0                      (input pullup).
+ * PC1  - PIN1                      (input pullup).
+ * PC2  - PIN2                      (input pullup).
+ * PC3  - PIN3                      (input pullup).
+ * PC4  - PIN4                      (output).
+ * PC5  - PIN5                      (output).
+ * PC6  - PIN6                      (input pullup).
+ * PC7  - PIN7                      (input pullup).
+ * PC8  - PIN8                      (input pullup).
+ * PC9  - PIN9                      (input pullup).
+ * PC10 - PIN10                     (input pullup).
+ * PC11 - PIN11                     (input pullup).
+ * PC12 - PIN12                     (input pullup).
+ * PC13 - PIN13                     (input pullup).
+ * PC14 - PIN14                     (input pullup).
+ * PC15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOC_PMD               (PIN_MODE_INPUT(GPIOC_PIN0) |       \
+                                     PIN_MODE_INPUT(GPIOC_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN3) |           \
+                                     PIN_MODE_OUTPUT(GPIOC_PIN4) |           \
+                                     PIN_MODE_OUTPUT(GPIOC_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN6) |       \
+                                     PIN_MODE_INPUT(GPIOC_PIN7) |      \
+                                     PIN_MODE_INPUT(GPIOC_PIN8) |    \
+                                     PIN_MODE_INPUT(GPIOC_PIN9) |     \
+                                     PIN_MODE_INPUT(GPIOC_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN14) |       \
+                                     PIN_MODE_INPUT(GPIOC_PIN15))
+#define VAL_GPIOC_OFFD              (PIN_DIGITAL_EN(GPIOC_PIN0) |    \
+                                     PIN_DIGITAL_EN(GPIOC_PIN1) |       \
+                                     PIN_DIGITAL_EN(GPIOC_PIN2) |       \
+                                     PIN_DIGITAL_EN(GPIOC_PIN3) |       \
+                                     PIN_DIGITAL_DIS(GPIOC_PIN4) |       \
+                                     PIN_DIGITAL_DIS(GPIOC_PIN5) |       \
+                                     PIN_DIGITAL_EN(GPIOC_PIN6) |    \
+                                     PIN_DIGITAL_EN(GPIOC_PIN7) |   \
+                                     PIN_DIGITAL_EN(GPIOC_PIN8) | \
+                                     PIN_DIGITAL_EN(GPIOC_PIN9) |  \
+                                     PIN_DIGITAL_EN(GPIOC_PIN10) |      \
+                                     PIN_DIGITAL_EN(GPIOC_PIN11) |      \
+                                     PIN_DIGITAL_EN(GPIOC_PIN12) |      \
+                                     PIN_DIGITAL_EN(GPIOC_PIN13) |      \
+                                     PIN_DIGITAL_EN(GPIOC_PIN14) |   \
+                                     PIN_DIGITAL_EN(GPIOC_PIN15))
+#define VAL_GPIOC_DMASK             (PIN_DMASK_EN(GPIOC_PIN0) |       \
+                                     PIN_DMASK_EN(GPIOC_PIN1) |       \
+                                     PIN_DMASK_EN(GPIOC_PIN2) |       \
+                                     PIN_DMASK_EN(GPIOC_PIN3) |       \
+                                     PIN_DMASK_DIS(GPIOC_PIN4) |       \
+                                     PIN_DMASK_DIS(GPIOC_PIN5) |       \
+                                     PIN_DMASK_EN(GPIOC_PIN6) |       \
+                                     PIN_DMASK_EN(GPIOC_PIN7) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN8) |    \
+                                     PIN_DMASK_EN(GPIOC_PIN9) |     \
+                                     PIN_DMASK_EN(GPIOC_PIN10) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN11) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN12) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN13) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN14) |      \
+                                     PIN_DMASK_EN(GPIOC_PIN15))
+#define VAL_GPIOC_DBEN              (PIN_DBNCE_EN(GPIOC_PIN0) |    \
+                                     PIN_DBNCE_EN(GPIOC_PIN1) |         \
+                                     PIN_DBNCE_EN(GPIOC_PIN2) |         \
+                                     PIN_DBNCE_EN(GPIOC_PIN3) |         \
+                                     PIN_DBNCE_DIS(GPIOC_PIN4) |         \
+                                     PIN_DBNCE_DIS(GPIOC_PIN5) |         \
+                                     PIN_DBNCE_EN(GPIOC_PIN6) |    \
+                                     PIN_DBNCE_EN(GPIOC_PIN7) |   \
+                                     PIN_DBNCE_EN(GPIOC_PIN8) | \
+                                     PIN_DBNCE_EN(GPIOC_PIN9) |  \
+                                     PIN_DBNCE_EN(GPIOC_PIN10) |        \
+                                     PIN_DBNCE_EN(GPIOC_PIN11) |        \
+                                     PIN_DBNCE_EN(GPIOC_PIN12) |        \
+                                     PIN_DBNCE_EN(GPIOC_PIN13) |        \
+                                     PIN_DBNCE_EN(GPIOC_PIN14) |   \
+                                     PIN_DBNCE_EN(GPIOC_PIN15))
+#define VAL_GPIOC_IMD               (PIN_IMD_EDGE(GPIOC_PIN0) |          \
+                                     PIN_IMD_EDGE(GPIOC_PIN1) |             \
+                                     PIN_IMD_EDGE(GPIOC_PIN2) |             \
+                                     PIN_IMD_EDGE(GPIOC_PIN3) |             \
+                                     PIN_IMD_EDGE(GPIOC_PIN4) |             \
+                                     PIN_IMD_EDGE(GPIOC_PIN5) |             \
+                                     PIN_IMD_EDGE(GPIOC_PIN6) |           \
+                                     PIN_IMD_EDGE(GPIOC_PIN7) |          \
+                                     PIN_IMD_EDGE(GPIOC_PIN8) |        \
+                                     PIN_IMD_EDGE(GPIOC_PIN9) |         \
+                                     PIN_IMD_EDGE(GPIOC_PIN10) |            \
+                                     PIN_IMD_EDGE(GPIOC_PIN11) |            \
+                                     PIN_IMD_EDGE(GPIOC_PIN12) |            \
+                                     PIN_IMD_EDGE(GPIOC_PIN13) |            \
+                                     PIN_IMD_EDGE(GPIOC_PIN14) |         \
+                                     PIN_IMD_EDGE(GPIOC_PIN15))
+#define VAL_GPIOC_IEN               (PIN_IEN_FELL_DIS(GPIOC_PIN0) |       \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN1) |          \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN2) |          \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN3) |          \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN4) |          \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN5) |          \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN6) |       \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN7) |       \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN8) |    \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN9) |     \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN10) |         \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN11) |         \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN12) |         \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN13) |         \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN14) |      \
+                                     PIN_IEN_FELL_DIS(GPIOC_PIN15))
+#define VAL_GPIOC_ISRC              (PIN_ISRC_DIS(GPIOC_PIN0) |       \
+                                     PIN_ISRC_DIS(GPIOC_PIN1) |          \
+                                     PIN_ISRC_DIS(GPIOC_PIN2) |          \
+                                     PIN_ISRC_DIS(GPIOC_PIN3) |          \
+                                     PIN_ISRC_DIS(GPIOC_PIN4) |          \
+                                     PIN_ISRC_DIS(GPIOC_PIN5) |          \
+                                     PIN_ISRC_DIS(GPIOC_PIN6) |       \
+                                     PIN_ISRC_DIS(GPIOC_PIN7) |       \
+                                     PIN_ISRC_DIS(GPIOC_PIN8) |    \
+                                     PIN_ISRC_DIS(GPIOC_PIN9) |     \
+                                     PIN_ISRC_DIS(GPIOC_PIN10) |         \
+                                     PIN_ISRC_DIS(GPIOC_PIN11) |         \
+                                     PIN_ISRC_DIS(GPIOC_PIN12) |         \
+                                     PIN_ISRC_DIS(GPIOC_PIN13) |         \
+                                     PIN_ISRC_DIS(GPIOC_PIN14) |      \
+                                     PIN_ISRC_DIS(GPIOC_PIN15))
+#define VAL_GPIOC_DOUT              (PIN_DATA_LOW(GPIOC_PIN0) |       \
+                                     PIN_DATA_LOW(GPIOC_PIN1) |          \
+                                     PIN_DATA_LOW(GPIOC_PIN2) |          \
+                                     PIN_DATA_LOW(GPIOC_PIN3) |          \
+                                     PIN_DATA_LOW(GPIOC_PIN4) |          \
+                                     PIN_DATA_LOW(GPIOC_PIN5) |          \
+                                     PIN_DATA_LOW(GPIOC_PIN6) |       \
+                                     PIN_DATA_LOW(GPIOC_PIN7) |       \
+                                     PIN_DATA_LOW(GPIOC_PIN8) |    \
+                                     PIN_DATA_LOW(GPIOC_PIN9) |     \
+                                     PIN_DATA_LOW(GPIOC_PIN10) |         \
+                                     PIN_DATA_LOW(GPIOC_PIN11) |         \
+                                     PIN_DATA_LOW(GPIOC_PIN12) |         \
+                                     PIN_DATA_LOW(GPIOC_PIN13) |         \
+                                     PIN_DATA_LOW(GPIOC_PIN14) |      \
+                                     PIN_DATA_LOW(GPIOC_PIN15))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0  - ADC0                      (input pullup).
+ * PD1  - ADC1                      (input pullup).
+ * PD2  - ADC2                      (input pullup).
+ * PD3  - ADC3                      (output).
+ * PD4  - ADC4                      (output).
+ * PD5  - ADC5                      (output).
+ * PD6  - PIN6                      (input pullup).
+ * PD7  - PIN7                      (input pullup).
+ * PD8  - PIN8                      (input pullup).
+ * PD9  - PIN9                      (output).
+ * PD10 - PIN10                     (debug output).
+ * PD11 - PIN11                     (output).
+ * PD12 - PIN12                     (input pullup).
+ * PD13 - PIN13                     (input pullup).
+ * PD14 - PIN14                     (input pullup).
+ * PD15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOD_PMD               (PIN_MODE_INPUT(GPIOD_ADC0) |           \
+                                     PIN_MODE_INPUT(GPIOD_ADC1) |           \
+                                     PIN_MODE_INPUT(GPIOD_ADC2) |           \
+                                     PIN_MODE_OUTPUT(GPIOD_ADC3) |           \
+                                     PIN_MODE_OUTPUT(GPIOD_ADC4) |           \
+                                     PIN_MODE_OUTPUT(GPIOD_ADC5) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN8) |           \
+                                     PIN_MODE_OUTPUT(GPIOD_PIN9) |           \
+                                     PIN_MODE_OUTPUT(GPIOD_PIN10) |          \
+                                     PIN_MODE_OUTPUT(GPIOD_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OFFD              (PIN_DIGITAL_EN(GPIOD_ADC0) |       \
+                                     PIN_DIGITAL_EN(GPIOD_ADC1) |       \
+                                     PIN_DIGITAL_EN(GPIOD_ADC2) |       \
+                                     PIN_DIGITAL_DIS(GPIOD_ADC3) |       \
+                                     PIN_DIGITAL_DIS(GPIOD_ADC4) |       \
+                                     PIN_DIGITAL_DIS(GPIOD_ADC5) |       \
+                                     PIN_DIGITAL_EN(GPIOD_PIN6) |       \
+                                     PIN_DIGITAL_EN(GPIOD_PIN7) |       \
+                                     PIN_DIGITAL_EN(GPIOD_PIN8) |       \
+                                     PIN_DIGITAL_DIS(GPIOD_PIN9) |       \
+                                     PIN_DIGITAL_DIS(GPIOD_PIN10) |      \
+                                     PIN_DIGITAL_DIS(GPIOD_PIN11) |      \
+                                     PIN_DIGITAL_EN(GPIOD_PIN12) |      \
+                                     PIN_DIGITAL_EN(GPIOD_PIN13) |      \
+                                     PIN_DIGITAL_EN(GPIOD_PIN14) |      \
+                                     PIN_DIGITAL_EN(GPIOD_PIN15))
+#define VAL_GPIOD_DMASK             (PIN_DMASK_EN(GPIOD_ADC0) |       \
+                                     PIN_DMASK_EN(GPIOD_ADC1) |       \
+                                     PIN_DMASK_EN(GPIOD_ADC2) |       \
+                                     PIN_DMASK_DIS(GPIOD_ADC3) |       \
+                                     PIN_DMASK_DIS(GPIOD_ADC4) |       \
+                                     PIN_DMASK_DIS(GPIOD_ADC5) |       \
+                                     PIN_DMASK_EN(GPIOD_PIN6) |       \
+                                     PIN_DMASK_EN(GPIOD_PIN7) |       \
+                                     PIN_DMASK_EN(GPIOD_PIN8) |       \
+                                     PIN_DMASK_DIS(GPIOD_PIN9) |       \
+                                     PIN_DMASK_DIS(GPIOD_PIN10) |      \
+                                     PIN_DMASK_DIS(GPIOD_PIN11) |      \
+                                     PIN_DMASK_EN(GPIOD_PIN12) |      \
+                                     PIN_DMASK_EN(GPIOD_PIN13) |      \
+                                     PIN_DMASK_EN(GPIOD_PIN14) |      \
+                                     PIN_DMASK_EN(GPIOD_PIN15))
+#define VAL_GPIOD_DBEN              (PIN_DBNCE_EN(GPIOD_ADC0) |         \
+                                     PIN_DBNCE_EN(GPIOD_ADC1) |         \
+                                     PIN_DBNCE_EN(GPIOD_ADC2) |         \
+                                     PIN_DBNCE_DIS(GPIOD_ADC3) |         \
+                                     PIN_DBNCE_DIS(GPIOD_ADC4) |         \
+                                     PIN_DBNCE_DIS(GPIOD_ADC5) |         \
+                                     PIN_DBNCE_EN(GPIOD_PIN6) |         \
+                                     PIN_DBNCE_EN(GPIOD_PIN7) |         \
+                                     PIN_DBNCE_EN(GPIOD_PIN8) |         \
+                                     PIN_DBNCE_DIS(GPIOD_PIN9) |         \
+                                     PIN_DBNCE_DIS(GPIOD_PIN10) |        \
+                                     PIN_DBNCE_DIS(GPIOD_PIN11) |        \
+                                     PIN_DBNCE_EN(GPIOD_PIN12) |        \
+                                     PIN_DBNCE_EN(GPIOD_PIN13) |        \
+                                     PIN_DBNCE_EN(GPIOD_PIN14) |        \
+                                     PIN_DBNCE_EN(GPIOD_PIN15))
+#define VAL_GPIOD_IMD               (PIN_IMD_EDGE(GPIOD_ADC0) |             \
+                                     PIN_IMD_EDGE(GPIOD_ADC1) |             \
+                                     PIN_IMD_EDGE(GPIOD_ADC2) |             \
+                                     PIN_IMD_EDGE(GPIOD_ADC3) |             \
+                                     PIN_IMD_EDGE(GPIOD_ADC4) |             \
+                                     PIN_IMD_EDGE(GPIOD_ADC5) |             \
+                                     PIN_IMD_EDGE(GPIOD_PIN6) |             \
+                                     PIN_IMD_EDGE(GPIOD_PIN7) |             \
+                                     PIN_IMD_EDGE(GPIOD_PIN8) |             \
+                                     PIN_IMD_EDGE(GPIOD_PIN9) |             \
+                                     PIN_IMD_EDGE(GPIOD_PIN10) |            \
+                                     PIN_IMD_EDGE(GPIOD_PIN11) |            \
+                                     PIN_IMD_EDGE(GPIOD_PIN12) |            \
+                                     PIN_IMD_EDGE(GPIOD_PIN13) |            \
+                                     PIN_IMD_EDGE(GPIOD_PIN14) |            \
+                                     PIN_IMD_EDGE(GPIOD_PIN15))
+#define VAL_GPIOD_IEN               (PIN_IEN_FELL_DIS(GPIOD_ADC0) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_ADC1) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_ADC2) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_ADC3) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_ADC4) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_ADC5) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN6) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN7) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN8) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN9) |          \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN10) |         \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN11) |         \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN12) |         \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN13) |         \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN14) |         \
+                                     PIN_IEN_FELL_DIS(GPIOD_PIN15))
+#define VAL_GPIOD_ISRC              (PIN_ISRC_DIS(GPIOD_ADC0) |          \
+                                     PIN_ISRC_DIS(GPIOD_ADC1) |          \
+                                     PIN_ISRC_DIS(GPIOD_ADC2) |          \
+                                     PIN_ISRC_DIS(GPIOD_ADC3) |          \
+                                     PIN_ISRC_DIS(GPIOD_ADC4) |          \
+                                     PIN_ISRC_DIS(GPIOD_ADC5) |          \
+                                     PIN_ISRC_DIS(GPIOD_PIN6) |          \
+                                     PIN_ISRC_DIS(GPIOD_PIN7) |          \
+                                     PIN_ISRC_DIS(GPIOD_PIN8) |          \
+                                     PIN_ISRC_DIS(GPIOD_PIN9) |          \
+                                     PIN_ISRC_DIS(GPIOD_PIN10) |         \
+                                     PIN_ISRC_DIS(GPIOD_PIN11) |         \
+                                     PIN_ISRC_DIS(GPIOD_PIN12) |         \
+                                     PIN_ISRC_DIS(GPIOD_PIN13) |         \
+                                     PIN_ISRC_DIS(GPIOD_PIN14) |         \
+                                     PIN_ISRC_DIS(GPIOD_PIN15))
+#define VAL_GPIOD_DOUT              (PIN_DATA_LOW(GPIOD_ADC0) |          \
+                                     PIN_DATA_LOW(GPIOD_ADC1) |          \
+                                     PIN_DATA_LOW(GPIOD_ADC2) |          \
+                                     PIN_DATA_LOW(GPIOD_ADC3) |          \
+                                     PIN_DATA_LOW(GPIOD_ADC4) |          \
+                                     PIN_DATA_LOW(GPIOD_ADC5) |          \
+                                     PIN_DATA_LOW(GPIOD_PIN6) |          \
+                                     PIN_DATA_LOW(GPIOD_PIN7) |          \
+                                     PIN_DATA_LOW(GPIOD_PIN8) |          \
+                                     PIN_DATA_LOW(GPIOD_PIN9) |          \
+                                     PIN_DATA_LOW(GPIOD_PIN10) |         \
+                                     PIN_DATA_LOW(GPIOD_PIN11) |         \
+                                     PIN_DATA_LOW(GPIOD_PIN12) |         \
+                                     PIN_DATA_LOW(GPIOD_PIN13) |         \
+                                     PIN_DATA_LOW(GPIOD_PIN14) |         \
+                                     PIN_DATA_LOW(GPIOD_PIN15))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0  - OSC_IN                    (input floating).
+ * PF1  - OSC_OUT                   (input floating).
+ * PF2  - I2C0_SDA                  (input pullup).
+ * PF3  - I2C0_SCL                  (input pullup).
+ * PF4  - PIN4                      (input pullup).
+ * PF5  - PIN5                      (input pullup).
+ * PF6  - PIN6                      (input pullup).
+ * PF7  - PIN7                      (input pullup).
+ * PF8  - PIN8                      (input pullup).
+ * PF9  - PIN9                      (input pullup).
+ * PF10 - PIN10                     (input pullup).
+ * PF11 - PIN11                     (input pullup).
+ * PF12 - PIN12                     (input pullup).
+ * PF13 - PIN13                     (input pullup).
+ * PF14 - PIN14                     (input pullup).
+ * PF15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOF_PMD               (PIN_MODE_QUASI(GPIOF_OSC_IN) |        \
+                                     PIN_MODE_QUASI(GPIOF_OSC_OUT) |         \
+                                     PIN_MODE_INPUT(GPIOF_I2C0_SDA) |           \
+                                     PIN_MODE_INPUT(GPIOF_I2C0_SCL) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OFFD              (PIN_DIGITAL_DIS(GPIOF_OSC_IN) |    \
+                                     PIN_DIGITAL_DIS(GPIOF_OSC_OUT) |     \
+                                     PIN_DIGITAL_EN(GPIOF_I2C0_SDA) |       \
+                                     PIN_DIGITAL_EN(GPIOF_I2C0_SCL) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN4) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN5) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN6) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN7) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN8) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN9) |       \
+                                     PIN_DIGITAL_EN(GPIOF_PIN10) |      \
+                                     PIN_DIGITAL_EN(GPIOF_PIN11) |      \
+                                     PIN_DIGITAL_EN(GPIOF_PIN12) |      \
+                                     PIN_DIGITAL_EN(GPIOF_PIN13) |      \
+                                     PIN_DIGITAL_EN(GPIOF_PIN14) |      \
+                                     PIN_DIGITAL_EN(GPIOF_PIN15))
+#define VAL_GPIOF_DMASK             (PIN_DMASK_DIS(GPIOF_OSC_IN) |    \
+                                     PIN_DMASK_DIS(GPIOF_OSC_OUT) |     \
+                                     PIN_DMASK_EN(GPIOF_I2C0_SDA) |       \
+                                     PIN_DMASK_EN(GPIOF_I2C0_SCL) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN4) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN5) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN6) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN7) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN8) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN9) |       \
+                                     PIN_DMASK_EN(GPIOF_PIN10) |      \
+                                     PIN_DMASK_EN(GPIOF_PIN11) |      \
+                                     PIN_DMASK_EN(GPIOF_PIN12) |      \
+                                     PIN_DMASK_EN(GPIOF_PIN13) |      \
+                                     PIN_DMASK_EN(GPIOF_PIN14) |      \
+                                     PIN_DMASK_EN(GPIOF_PIN15))
+#define VAL_GPIOF_DBEN              (PIN_DBNCE_DIS(GPIOF_OSC_IN) |    \
+                                     PIN_DBNCE_DIS(GPIOF_OSC_OUT) |     \
+                                     PIN_DBNCE_EN(GPIOF_I2C0_SDA) |         \
+                                     PIN_DBNCE_EN(GPIOF_I2C0_SCL) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN4) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN5) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN6) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN7) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN8) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN9) |         \
+                                     PIN_DBNCE_EN(GPIOF_PIN10) |        \
+                                     PIN_DBNCE_EN(GPIOF_PIN11) |        \
+                                     PIN_DBNCE_EN(GPIOF_PIN12) |        \
+                                     PIN_DBNCE_EN(GPIOF_PIN13) |        \
+                                     PIN_DBNCE_EN(GPIOF_PIN14) |        \
+                                     PIN_DBNCE_EN(GPIOF_PIN15))
+#define VAL_GPIOF_IMD               (PIN_IMD_LVL(GPIOF_OSC_IN) |          \
+                                     PIN_IMD_LVL(GPIOF_OSC_OUT) |           \
+                                     PIN_IMD_EDGE(GPIOF_I2C0_SDA) |             \
+                                     PIN_IMD_EDGE(GPIOF_I2C0_SCL) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN4) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN5) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN6) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN7) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN8) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN9) |             \
+                                     PIN_IMD_EDGE(GPIOF_PIN10) |            \
+                                     PIN_IMD_EDGE(GPIOF_PIN11) |            \
+                                     PIN_IMD_EDGE(GPIOF_PIN12) |            \
+                                     PIN_IMD_EDGE(GPIOF_PIN13) |            \
+                                     PIN_IMD_EDGE(GPIOF_PIN14) |            \
+                                     PIN_IMD_EDGE(GPIOF_PIN15))
+#define VAL_GPIOF_IEN               (PIN_IEN_FELL_DIS(GPIOF_OSC_IN) |       \
+                                     PIN_IEN_FELL_DIS(GPIOF_OSC_OUT) |        \
+                                     PIN_IEN_FELL_DIS(GPIOF_I2C0_SDA) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_I2C0_SCL) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN4) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN5) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN6) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN7) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN8) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN9) |          \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN10) |         \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN11) |         \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN12) |         \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN13) |         \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN14) |         \
+                                     PIN_IEN_FELL_DIS(GPIOF_PIN15))
+#define VAL_GPIOF_ISRC              (PIN_ISRC_DIS(GPIOF_OSC_IN) |       \
+                                     PIN_ISRC_DIS(GPIOF_OSC_OUT) |        \
+                                     PIN_ISRC_DIS(GPIOF_I2C0_SDA) |          \
+                                     PIN_ISRC_DIS(GPIOF_I2C0_SCL) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN4) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN5) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN6) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN7) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN8) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN9) |          \
+                                     PIN_ISRC_DIS(GPIOF_PIN10) |         \
+                                     PIN_ISRC_DIS(GPIOF_PIN11) |         \
+                                     PIN_ISRC_DIS(GPIOF_PIN12) |         \
+                                     PIN_ISRC_DIS(GPIOF_PIN13) |         \
+                                     PIN_ISRC_DIS(GPIOF_PIN14) |         \
+                                     PIN_ISRC_DIS(GPIOF_PIN15))
+#define VAL_GPIOF_DOUT              (PIN_DATA_LOW(GPIOF_OSC_IN) |       \
+                                     PIN_DATA_LOW(GPIOF_OSC_OUT) |        \
+                                     PIN_DATA_LOW(GPIOF_I2C0_SDA) |          \
+                                     PIN_DATA_LOW(GPIOF_I2C0_SCL) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN4) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN5) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN6) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN7) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN8) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN9) |          \
+                                     PIN_DATA_LOW(GPIOF_PIN10) |         \
+                                     PIN_DATA_LOW(GPIOF_PIN11) |         \
+                                     PIN_DATA_LOW(GPIOF_PIN12) |         \
+                                     PIN_DATA_LOW(GPIOF_PIN13) |         \
+                                     PIN_DATA_LOW(GPIOF_PIN14) |         \
+                                     PIN_DATA_LOW(GPIOF_PIN15))
+
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+  void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* BOARD_H */

+ 5 - 0
keyboards/ducky/one2mini/1861st/boards/NUC123SD4AN0/board.mk

@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/NUC123SD4AN0/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/NUC123SD4AN0

+ 23 - 0
keyboards/ducky/one2mini/1861st/chconf.h

@@ -0,0 +1,23 @@
+/* Copyright 2020 QMK
+ *
+ * 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 CH_CFG_ST_FREQUENCY 10000
+#define CH_CFG_ST_TIMEDELTA 0
+#define CH_CFG_USE_WAITEXIT TRUE
+
+#include_next <chconf.h>

+ 56 - 0
keyboards/ducky/one2mini/1861st/config.h

@@ -0,0 +1,56 @@
+/*
+Copyright 2019 /u/KeepItUnder
+
+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       0x0416
+#define PRODUCT_ID      0x0123
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Ducky
+#define PRODUCT         One2mini
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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 { D11, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { B10, B9, C13, C12, C11, C10, C9, C8, A15, A14, A13, D0, D1, D2, B8 }
+#define DIP_SWITCH_MATRIX_GRID { {0,14}, {1,14}, {2,14}, {3,14} }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define FORCE_NKRO
+
+#define GPIO_INPUT_PIN_DELAY (NUC123_HCLK / 6 / 1000000L)

+ 208 - 0
keyboards/ducky/one2mini/1861st/info.json

@@ -0,0 +1,208 @@
+{
+    "keyboard_name": "Ducky One 2 Mini",
+    "width": 14,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                { "x": 0, "y": 0, "w": 1, "label": "ESC" },
+                { "x": 1, "y": 0, "w": 1, "label": "1" },
+                { "x": 2, "y": 0, "w": 1, "label": "2" },
+                { "x": 3, "y": 0, "w": 1, "label": "3" },
+                { "x": 4, "y": 0, "w": 1, "label": "4" },
+                { "x": 5, "y": 0, "w": 1, "label": "5" },
+                { "x": 6, "y": 0, "w": 1, "label": "6" },
+                { "x": 7, "y": 0, "w": 1, "label": "7" },
+                { "x": 8, "y": 0, "w": 1, "label": "8" },
+                { "x": 9, "y": 0, "w": 1, "label": "9" },
+                { "x": 10, "y": 0, "w": 1, "label": "0" },
+                { "x": 11, "y": 0, "w": 1, "label": "DASH" },
+                { "x": 12, "y": 0, "w": 1, "label": "EQUALSIGN" },
+                { "x": 13, "y": 0, "w": 2, "label": "BACKSPACE" },
+                { "x": 0, "y": 1, "w": 1.5, "label": "TAB" },
+                { "x": 1.5, "y": 1, "w": 1, "label": "Q" },
+                { "x": 2.5, "y": 1, "w": 1, "label": "W" },
+                { "x": 3.5, "y": 1, "w": 1, "label": "E" },
+                { "x": 4.5, "y": 1, "w": 1, "label": "R" },
+                { "x": 5.5, "y": 1, "w": 1, "label": "T" },
+                { "x": 6.5, "y": 1, "w": 1, "label": "Y" },
+                { "x": 7.5, "y": 1, "w": 1, "label": "U" },
+                { "x": 8.5, "y": 1, "w": 1, "label": "I" },
+                { "x": 9.5, "y": 1, "w": 1, "label": "O" },
+                { "x": 10.5, "y": 1, "w": 1, "label": "P" },
+                { "x": 11.5, "y": 1, "w": 1, "label": "LBRACKET" },
+                { "x": 12.5, "y": 1, "w": 1, "label": "RBRACKET" },
+                { "x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH" },
+                { "x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK" },
+                { "x": 1.75, "y": 2, "w": 1, "label": "A" },
+                { "x": 2.75, "y": 2, "w": 1, "label": "S" },
+                { "x": 3.75, "y": 2, "w": 1, "label": "D" },
+                { "x": 4.75, "y": 2, "w": 1, "label": "F" },
+                { "x": 5.75, "y": 2, "w": 1, "label": "G" },
+                { "x": 6.75, "y": 2, "w": 1, "label": "H" },
+                { "x": 7.75, "y": 2, "w": 1, "label": "J" },
+                { "x": 8.75, "y": 2, "w": 1, "label": "K" },
+                { "x": 9.75, "y": 2, "w": 1, "label": "L" },
+                { "x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON" },
+                { "x": 11.75, "y": 2, "w": 1, "label": "QUOTE" },
+                { "x": 12.75, "y": 2, "w": 1, "label": "ISOHASH" },
+                { "x": 13.75, "y": 2, "w": 1.25, "label": "ENTER" },
+                { "x": 0, "y": 3, "w": 1.25, "label": "LSHIFT" },
+                { "x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH" },
+                { "x": 2.25, "y": 3, "w": 1, "label": "Z" },
+                { "x": 3.25, "y": 3, "w": 1, "label": "X" },
+                { "x": 4.25, "y": 3, "w": 1, "label": "C" },
+                { "x": 5.25, "y": 3, "w": 1, "label": "V" },
+                { "x": 6.25, "y": 3, "w": 1, "label": "B" },
+                { "x": 7.25, "y": 3, "w": 1, "label": "N" },
+                { "x": 8.25, "y": 3, "w": 1, "label": "M" },
+                { "x": 9.25, "y": 3, "w": 1, "label": "COMMA" },
+                { "x": 10.25, "y": 3, "w": 1, "label": "PERIOD" },
+                { "x": 11.25, "y": 3, "w": 1, "label": "SLASH" },
+                { "x": 12.25, "y": 3, "w": 2.25, "label": "RSHIFT" },
+                { "x": 0, "y": 4, "w": 1.25, "label": "LCTRL" },
+                { "x": 1.25, "y": 4, "w": 1.25, "label": "LCMD" },
+                { "x": 2.5, "y": 4, "w": 1.25, "label": "LALT" },
+                { "x": 3.75, "y": 4, "w": 6.25, "label": "SPACE" },
+                { "x": 10, "y": 4, "w": 1.25, "label": "RALT" },
+                { "x": 11.25, "y": 4, "w": 1.25, "label": "RCMD" },
+                { "x": 12.5, "y": 4, "w": 1.25, "label": "FN" },
+                { "x": 13.75, "y": 4, "w": 1.25, "label": "RCTRL" }
+            ]
+        },
+
+        "LAYOUT_ansi": {
+            "layout": [
+                { "x": 0, "y": 0, "w": 1, "label": "ESC" },
+                { "x": 1, "y": 0, "w": 1, "label": "1" },
+                { "x": 2, "y": 0, "w": 1, "label": "2" },
+                { "x": 3, "y": 0, "w": 1, "label": "3" },
+                { "x": 4, "y": 0, "w": 1, "label": "4" },
+                { "x": 5, "y": 0, "w": 1, "label": "5" },
+                { "x": 6, "y": 0, "w": 1, "label": "6" },
+                { "x": 7, "y": 0, "w": 1, "label": "7" },
+                { "x": 8, "y": 0, "w": 1, "label": "8" },
+                { "x": 9, "y": 0, "w": 1, "label": "9" },
+                { "x": 10, "y": 0, "w": 1, "label": "0" },
+                { "x": 11, "y": 0, "w": 1, "label": "DASH" },
+                { "x": 12, "y": 0, "w": 1, "label": "EQUALSIGN" },
+                { "x": 13, "y": 0, "w": 2, "label": "BACKSPACE" },
+                { "x": 0, "y": 1, "w": 1.5, "label": "TAB" },
+                { "x": 1.5, "y": 1, "w": 1, "label": "Q" },
+                { "x": 2.5, "y": 1, "w": 1, "label": "W" },
+                { "x": 3.5, "y": 1, "w": 1, "label": "E" },
+                { "x": 4.5, "y": 1, "w": 1, "label": "R" },
+                { "x": 5.5, "y": 1, "w": 1, "label": "T" },
+                { "x": 6.5, "y": 1, "w": 1, "label": "Y" },
+                { "x": 7.5, "y": 1, "w": 1, "label": "U" },
+                { "x": 8.5, "y": 1, "w": 1, "label": "I" },
+                { "x": 9.5, "y": 1, "w": 1, "label": "O" },
+                { "x": 10.5, "y": 1, "w": 1, "label": "P" },
+                { "x": 11.5, "y": 1, "w": 1, "label": "LBRACKET" },
+                { "x": 12.5, "y": 1, "w": 1, "label": "RBRACKET" },
+                { "x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH" },
+                { "x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK" },
+                { "x": 1.75, "y": 2, "w": 1, "label": "A" },
+                { "x": 2.75, "y": 2, "w": 1, "label": "S" },
+                { "x": 3.75, "y": 2, "w": 1, "label": "D" },
+                { "x": 4.75, "y": 2, "w": 1, "label": "F" },
+                { "x": 5.75, "y": 2, "w": 1, "label": "G" },
+                { "x": 6.75, "y": 2, "w": 1, "label": "H" },
+                { "x": 7.75, "y": 2, "w": 1, "label": "J" },
+                { "x": 8.75, "y": 2, "w": 1, "label": "K" },
+                { "x": 9.75, "y": 2, "w": 1, "label": "L" },
+                { "x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON" },
+                { "x": 11.75, "y": 2, "w": 1, "label": "QUOTE" },
+                { "x": 12.75, "y": 2, "w": 1, "label": "ISOHASH" },
+                { "x": 12.75, "y": 2, "w": 2.25, "label": "ENTER" },
+                { "x": 0, "y": 3, "w": 2.25, "label": "LSHIFT" },
+                { "x": 2.25, "y": 3, "w": 1, "label": "Z" },
+                { "x": 3.25, "y": 3, "w": 1, "label": "X" },
+                { "x": 4.25, "y": 3, "w": 1, "label": "C" },
+                { "x": 5.25, "y": 3, "w": 1, "label": "V" },
+                { "x": 6.25, "y": 3, "w": 1, "label": "B" },
+                { "x": 7.25, "y": 3, "w": 1, "label": "N" },
+                { "x": 8.25, "y": 3, "w": 1, "label": "M" },
+                { "x": 9.25, "y": 3, "w": 1, "label": "COMMA" },
+                { "x": 10.25, "y": 3, "w": 1, "label": "PERIOD" },
+                { "x": 11.25, "y": 3, "w": 1, "label": "SLASH" },
+                { "x": 12.25, "y": 3, "w": 2.75, "label": "RSHIFT" },
+                { "x": 0, "y": 4, "w": 1.25, "label": "LCTRL" },
+                { "x": 1.25, "y": 4, "w": 1.25, "label": "LCMD" },
+                { "x": 2.5, "y": 4, "w": 1.25, "label": "LALT" },
+                { "x": 3.75, "y": 4, "w": 6.25, "label": "SPACE" },
+                { "x": 10, "y": 4, "w": 1.25, "label": "RALT" },
+                { "x": 11.25, "y": 4, "w": 1.25, "label": "RCMD" },
+                { "x": 12.5, "y": 4, "w": 1.25, "label": "FN" },
+                { "x": 13.75, "y": 4, "w": 1.25, "label": "RCTRL" }
+            ]
+        },
+
+        "LAYOUT_iso": {
+            "layout": [
+                { "x": 0, "y": 0, "w": 1, "label": "ESC" },
+                { "x": 1, "y": 0, "w": 1, "label": "1" },
+                { "x": 2, "y": 0, "w": 1, "label": "2" },
+                { "x": 3, "y": 0, "w": 1, "label": "3" },
+                { "x": 4, "y": 0, "w": 1, "label": "4" },
+                { "x": 5, "y": 0, "w": 1, "label": "5" },
+                { "x": 6, "y": 0, "w": 1, "label": "6" },
+                { "x": 7, "y": 0, "w": 1, "label": "7" },
+                { "x": 8, "y": 0, "w": 1, "label": "8" },
+                { "x": 9, "y": 0, "w": 1, "label": "9" },
+                { "x": 10, "y": 0, "w": 1, "label": "0" },
+                { "x": 11, "y": 0, "w": 1, "label": "DASH" },
+                { "x": 12, "y": 0, "w": 1, "label": "EQUALSIGN" },
+                { "x": 13, "y": 0, "w": 2, "label": "BACKSPACE" },
+                { "x": 0, "y": 1, "w": 1.5, "label": "TAB" },
+                { "x": 1.5, "y": 1, "w": 1, "label": "Q" },
+                { "x": 2.5, "y": 1, "w": 1, "label": "W" },
+                { "x": 3.5, "y": 1, "w": 1, "label": "E" },
+                { "x": 4.5, "y": 1, "w": 1, "label": "R" },
+                { "x": 5.5, "y": 1, "w": 1, "label": "T" },
+                { "x": 6.5, "y": 1, "w": 1, "label": "Y" },
+                { "x": 7.5, "y": 1, "w": 1, "label": "U" },
+                { "x": 8.5, "y": 1, "w": 1, "label": "I" },
+                { "x": 9.5, "y": 1, "w": 1, "label": "O" },
+                { "x": 10.5, "y": 1, "w": 1, "label": "P" },
+                { "x": 11.5, "y": 1, "w": 1, "label": "LBRACKET" },
+                { "x": 12.5, "y": 1, "w": 1, "label": "RBRACKET" },
+                { "x": 13.75, "y": 1, "w": 1.25, "h": 2, "label": "ENTER" },
+                { "x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK" },
+                { "x": 1.75, "y": 2, "w": 1, "label": "A" },
+                { "x": 2.75, "y": 2, "w": 1, "label": "S" },
+                { "x": 3.75, "y": 2, "w": 1, "label": "D" },
+                { "x": 4.75, "y": 2, "w": 1, "label": "F" },
+                { "x": 5.75, "y": 2, "w": 1, "label": "G" },
+                { "x": 6.75, "y": 2, "w": 1, "label": "H" },
+                { "x": 7.75, "y": 2, "w": 1, "label": "J" },
+                { "x": 8.75, "y": 2, "w": 1, "label": "K" },
+                { "x": 9.75, "y": 2, "w": 1, "label": "L" },
+                { "x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON" },
+                { "x": 11.75, "y": 2, "w": 1, "label": "QUOTE" },
+                { "x": 12.75, "y": 2, "w": 1, "label": "ISOHASH" },
+                { "x": 0, "y": 3, "w": 1.25, "label": "LSHIFT" },
+                { "x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH" },
+                { "x": 2.25, "y": 3, "w": 1, "label": "Z" },
+                { "x": 3.25, "y": 3, "w": 1, "label": "X" },
+                { "x": 4.25, "y": 3, "w": 1, "label": "C" },
+                { "x": 5.25, "y": 3, "w": 1, "label": "V" },
+                { "x": 6.25, "y": 3, "w": 1, "label": "B" },
+                { "x": 7.25, "y": 3, "w": 1, "label": "N" },
+                { "x": 8.25, "y": 3, "w": 1, "label": "M" },
+                { "x": 9.25, "y": 3, "w": 1, "label": "COMMA" },
+                { "x": 10.25, "y": 3, "w": 1, "label": "PERIOD" },
+                { "x": 11.25, "y": 3, "w": 1, "label": "SLASH" },
+                { "x": 12.25, "y": 3, "w": 2.75, "label": "RSHIFT" },
+                { "x": 0, "y": 4, "w": 1.25, "label": "LCTRL" },
+                { "x": 1.25, "y": 4, "w": 1.25, "label": "LCMD" },
+                { "x": 2.5, "y": 4, "w": 1.25, "label": "LALT" },
+                { "x": 3.75, "y": 4, "w": 6.25, "label": "SPACE" },
+                { "x": 10, "y": 4, "w": 1.25, "label": "RALT" },
+                { "x": 11.25, "y": 4, "w": 1.25, "label": "RCMD" },
+                { "x": 12.5, "y": 4, "w": 1.25, "label": "FN" },
+                { "x": 13.75, "y": 4, "w": 1.25, "label": "RCTRL" }
+            ]
+        }
+    }
+}

+ 51 - 0
keyboards/ducky/one2mini/1861st/mcuconf.h

@@ -0,0 +1,51 @@
+/*
+  ChibiOS - Copyright (C) 2020 Alex Lewontin
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * Board setting
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0       Lowest...Highest.
+ *
+ * DMA priorities:
+ * 5...0        Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define NUC123_HSE_ENABLED TRUE
+#define NUC123_PLL_ENABLED TRUE
+#define NUC123_PLLSRC NUC123_PLLSRC_HSE
+#define NUC123_HCLKSRC NUC123_HCLKSRC_PLL
+#define NUC123_HCLKDIV 2
+#define NUC123_PLL_NF 144
+#define NUC123_USB_USE_USB0 TRUE
+#define NUC123_USB_USE_USB1 TRUE
+
+#define NUC123_SERIAL_USE_UART0 TRUE
+#define NUC123_SERIAL_CLKSRC NUC123_SERIAL_CLKSRC_HSI
+
+#define NUC123_MCUCONF
+
+#endif /* _MCUCONF_H_ */

+ 29 - 0
keyboards/ducky/one2mini/1861st/readme.md

@@ -0,0 +1,29 @@
+# one2mini
+
+![one2mini](http://www.duckychannel.com.tw/page-en/One_2_Mini_RGB/images/One2_Mini_01_02.jpg)
+
+A 60% keyboard featuring per-key RGB LEDs.
+
+* Keyboard Maintainer: [Reza Jelveh](https://github.com/fishman)
+* Hardware Supported: Ducky One 2 Mini RGB / NUC123SD4AN0 / MBI5042GP
+* Hardware Availability: [Ducky Channel](http://www.duckychannel.com.tw/page-en/One_2_Mini_RGB/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ducky/one2mini: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).
+
+RGB LEDs are currently disabled until the driver is merged.
+
+This firmware was tested on the duckyon2mini 1861ST version. To enter the 1861ST bootloader to flash you can boot the keyboard while holding D+L.
+
+There are then two ways to flash the keyboard:
+
+    pip install --user nuvoton-isp
+    nuvoisp -f ducky_one2mini_default.bin
+
+Alternatively you can use elfmimi's [nu-isp-cli](https://lib.rs/crates/nu-isp-cli) which is more complete than nuvoisp and allows flashing .hex files as well.
+
+    cargo install nu-isp-cli
+    nu-isp-cli flash ducky_one2mini_default.bin

+ 35 - 0
keyboards/ducky/one2mini/1861st/rules.mk

@@ -0,0 +1,35 @@
+MCU_FAMILY = NUMICRO
+MCU_SERIES = NUC123
+
+# linker script to use
+MCU_LDSCRIPT = NUC123xD4xx0
+
+# startup code to use
+MCU_STARTUP = NUC123
+BOARD = NUC123SD4AN0
+
+# NUC123 series is Cortex M0
+MCU  = cortex-m0
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+
+# 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
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+DIP_SWITCH_ENABLE = yes
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

+ 56 - 0
keyboards/ducky/one2mini/keymaps/ansi/keymap.c

@@ -0,0 +1,56 @@
+/* Copyright 2019 /u/KeepItUnder
+ *
+ * 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
+
+// LAYERS
+enum Layer {
+    _QWERTY = 0,        // Standard QWERTY layer
+    _FUNCTION,          // Function key layer
+    _COLOUR             // RGB key layer
+};
+#define _QW _QWERTY
+#define _FN _FUNCTION
+#define _CLR _COLOUR
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_ansi(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_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_NUBS,
+    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_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, KC_RGUI, MO(_FN), KC_RCTL
+  ),
+
+  [_FUNCTION] = LAYOUT_ansi(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, KC_INS,  _______, KC_UP,   KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, _______,
+    _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, KC_SLCK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END,  _______, KC_ENT,
+    _______,          _______, KC_APP,  _______, _______, _______, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+    _______, KC_APP,  MO(_CLR),                  _______,                            _______, KC_APP,  _______, _______
+  ),
+
+  [_COLOUR] = LAYOUT_ansi(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______,          RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______,                   RGB_TOG,                            _______, _______, _______, _______
+  ),
+};

+ 1 - 0
keyboards/ducky/one2mini/keymaps/ansi/readme.md

@@ -0,0 +1 @@
+# The default ANSI keymap for one2mini

+ 25 - 0
keyboards/ducky/one2mini/keymaps/default/config.h

@@ -0,0 +1,25 @@
+/* Copyright 2019 /u/KeepItUnder
+ *
+ * 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
+
+// place overrides here
+#define GRAVE_ESC_GUI_OVERRIDE
+#define MK_3_SPEED
+#define MK_C_OFFSET_UNMOD   400    /* Cursor offset per movement (unmodified) */
+#define MK_C_INTERVAL_UNMOD  5     /* Time between cursor movements (unmodified) */
+#define MK_W_OFFSET_UNMOD   100    /* Scroll steps per scroll action (unmodified) */
+#define MK_W_INTERVAL_UNMOD 10     /* Time between scroll steps (unmodified) */

+ 56 - 0
keyboards/ducky/one2mini/keymaps/default/keymap.c

@@ -0,0 +1,56 @@
+/* Copyright 2019 /u/KeepItUnder
+ *
+ * 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
+
+// LAYERS
+enum Layer {
+    _QWERTY = 0,        // Standard QWERTY layer
+    _FUNCTION,          // Function key layer
+    _COLOUR             // RGB key layer
+};
+#define _QW _QWERTY
+#define _FN _FUNCTION
+#define _CLR _COLOUR
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_all(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_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_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_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, KC_RGUI, MO(_FN), KC_RCTL
+  ),
+
+  [_FUNCTION] = LAYOUT_all(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, KC_INS,  _______, KC_UP,   KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, _______,
+    _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, KC_SLCK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END,  _______, KC_ENT,
+    _______, _______, _______, KC_APP,  _______, _______, _______, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+    _______, _______, MO(_CLR),                  KC_MPLY,                            _______, KC_APP,  _______, _______
+  ),
+
+  [_COLOUR] = LAYOUT_all(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______,                   RGB_TOG,                            _______, _______, _______, _______
+  ),
+};

+ 1 - 0
keyboards/ducky/one2mini/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for one2mini (ISO & ANSI combined)

+ 56 - 0
keyboards/ducky/one2mini/keymaps/iso/keymap.c

@@ -0,0 +1,56 @@
+/* Copyright 2019 /u/KeepItUnder
+ *
+ * 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
+
+// LAYERS
+enum Layer {
+    _QWERTY = 0,        // Standard QWERTY layer
+    _FUNCTION,          // Function key layer
+    _COLOUR             // RGB key layer
+};
+#define _QW _QWERTY
+#define _FN _FUNCTION
+#define _CLR _COLOUR
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_iso(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_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_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_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, KC_RGUI, MO(_FN), KC_RCTL
+  ),
+
+  [_FUNCTION] = LAYOUT_iso(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    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_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, KC_INS,  _______, KC_UP,   KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR,
+    _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, KC_SLCK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END,  _______, KC_ENT,
+    _______, _______, _______, KC_APP,  _______, _______, _______, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+    _______, KC_APP,  MO(_CLR),                  _______,                            _______, KC_APP,  _______, _______
+  ),
+
+  [_COLOUR] = LAYOUT_iso(
+    //       2        3        4        5        6        7        8        9        10       11       12       13       14
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______,                   RGB_TOG,                            _______, _______, _______, _______
+  ),
+};

+ 1 - 0
keyboards/ducky/one2mini/keymaps/iso/readme.md

@@ -0,0 +1 @@
+# The default ISO keymap for one2mini

+ 7 - 0
keyboards/ducky/one2mini/readme.md

@@ -0,0 +1,7 @@
+# one2mini
+
+![one2mini](http://www.duckychannel.com.tw/page-en/One_2_Mini_RGB/images/One2_Mini_01_02.jpg)
+
+A 60% keyboard featuring per-key RGB LEDs.
+
+See child directories for compatible boards.

+ 1 - 0
keyboards/ducky/one2mini/rules.mk

@@ -0,0 +1 @@
+DEFAULT_FOLDER = ducky/one2mini/1861st