aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/clueboard/clueboard.c1
-rw-r--r--keyboards/clueboard_17/Makefile3
-rw-r--r--keyboards/clueboard_17/clueboard_17.c (renamed from keyboards/cluepad/cluepad.c)2
-rw-r--r--keyboards/clueboard_17/clueboard_17.h (renamed from keyboards/cluepad/cluepad.h)0
-rw-r--r--keyboards/clueboard_17/config.h (renamed from keyboards/cluepad/config.h)0
-rw-r--r--keyboards/clueboard_17/keymaps/default/keymap.c (renamed from keyboards/cluepad/keymaps/default/keymap.c)2
-rw-r--r--keyboards/clueboard_17/readme.md (renamed from keyboards/cluepad/readme.md)0
-rw-r--r--keyboards/clueboard_17/rules.mk (renamed from keyboards/cluepad/rules.mk)0
-rw-r--r--keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.c124
-rw-r--r--keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/clueboard_60/bootloader_defs.h7
-rw-r--r--keyboards/clueboard_60/chconf.h520
-rw-r--r--keyboards/clueboard_60/clueboard_60.c24
-rw-r--r--keyboards/clueboard_60/clueboard_60.h105
-rw-r--r--keyboards/clueboard_60/config.h133
-rw-r--r--keyboards/clueboard_60/halconf.h388
-rw-r--r--keyboards/clueboard_60/keymaps/default/keymap.c43
-rw-r--r--keyboards/clueboard_60/keymaps/default/readme.md1
-rw-r--r--keyboards/clueboard_60/keymaps/default_aek/keymap.c43
-rw-r--r--keyboards/clueboard_60/keymaps/default_aek/readme.md1
-rw-r--r--keyboards/clueboard_60/led.c58
-rw-r--r--keyboards/clueboard_60/matrix.c177
-rw-r--r--keyboards/clueboard_60/mcuconf.h257
-rw-r--r--keyboards/clueboard_60/readme.md14
-rw-r--r--keyboards/clueboard_60/rules.mk54
-rw-r--r--keyboards/clueboard_66/Makefile5
-rw-r--r--keyboards/clueboard_66/clueboard_66.c1
-rw-r--r--keyboards/clueboard_66/clueboard_66.h (renamed from keyboards/clueboard/clueboard.h)0
-rw-r--r--keyboards/clueboard_66/config.h (renamed from keyboards/clueboard/config.h)0
-rw-r--r--keyboards/clueboard_66/keymaps/bloodlvst/Makefile (renamed from keyboards/clueboard/keymaps/bloodlvst/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/bloodlvst/config.h (renamed from keyboards/clueboard/keymaps/bloodlvst/config.h)0
-rw-r--r--keyboards/clueboard_66/keymaps/bloodlvst/keymap.c (renamed from keyboards/clueboard/keymaps/bloodlvst/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/bloodlvst/readme.md (renamed from keyboards/clueboard/keymaps/bloodlvst/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/bloodlvst/rules.mk2
-rw-r--r--keyboards/clueboard_66/keymaps/caps_fn/keymap.c (renamed from keyboards/clueboard/keymaps/caps_fn/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/caps_fn/readme.md (renamed from keyboards/clueboard/keymaps/caps_fn/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/colemak/keymap.c (renamed from keyboards/clueboard/keymaps/colemak/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/default/keymap.c (renamed from keyboards/clueboard/keymaps/default/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/default/readme.md (renamed from keyboards/clueboard/keymaps/default/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/jokrik/keymap.c (renamed from keyboards/clueboard/keymaps/jokrik/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/jokrik/readme.md (renamed from keyboards/clueboard/keymaps/jokrik/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/mac_optimized/keymap.c (renamed from keyboards/clueboard/keymaps/mac_optimized/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/mac_optimized/readme.md (renamed from keyboards/clueboard/keymaps/mac_optimized/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/magicmonty/Makefile (renamed from keyboards/clueboard/keymaps/magicmonty/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/magicmonty/config.h (renamed from keyboards/clueboard/keymaps/magicmonty/config.h)0
-rw-r--r--keyboards/clueboard_66/keymaps/magicmonty/keymap.c (renamed from keyboards/clueboard/keymaps/magicmonty/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/magicmonty/readme.md (renamed from keyboards/clueboard/keymaps/magicmonty/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/magicmonty/rules.mk9
-rw-r--r--keyboards/clueboard_66/keymaps/maximised/keymap.c (renamed from keyboards/clueboard/keymaps/maximised/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/maximised/readme.md (renamed from keyboards/clueboard/keymaps/maximised/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/mouse_keys/Makefile (renamed from keyboards/clueboard/keymaps/mouse_keys/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/mouse_keys/keymap.c (renamed from keyboards/clueboard/keymaps/mouse_keys/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/mouse_keys/readme.md (renamed from keyboards/clueboard/keymaps/mouse_keys/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/mouse_keys/rules.mk1
-rw-r--r--keyboards/clueboard_66/keymaps/serubin/Makefile (renamed from keyboards/clueboard/keymaps/serubin/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/serubin/keymap.c (renamed from keyboards/clueboard/keymaps/serubin/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/serubin/readme.md (renamed from keyboards/clueboard/keymaps/serubin/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/serubin/rules.mk4
-rw-r--r--keyboards/clueboard_66/keymaps/shift_fn/keymap.c (renamed from keyboards/clueboard/keymaps/shift_fn/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/shift_fn/readme.md (renamed from keyboards/clueboard/keymaps/shift_fn/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/skully/keymap.c (renamed from keyboards/clueboard/keymaps/skully/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/skully/readme.md (renamed from keyboards/clueboard/keymaps/skully/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/smt/keymap.c (renamed from keyboards/clueboard/keymaps/smt/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/smt/readme.md (renamed from keyboards/clueboard/keymaps/smt/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/Makefile (renamed from keyboards/clueboard/keymaps/tetris/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/keymap.c (renamed from keyboards/clueboard/keymaps/tetris/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/readme.md (renamed from keyboards/clueboard/keymaps/tetris/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/rules.mk1
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/tetris_text.c (renamed from keyboards/clueboard/keymaps/tetris/tetris_text.c)0
-rw-r--r--keyboards/clueboard_66/keymaps/tetris/tetris_text.h (renamed from keyboards/clueboard/keymaps/tetris/tetris_text.h)0
-rw-r--r--keyboards/clueboard_66/keymaps/unix_optimized/keymap.c (renamed from keyboards/clueboard/keymaps/unix_optimized/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/unix_optimized/readme.md (renamed from keyboards/clueboard/keymaps/unix_optimized/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/win_optimized/keymap.c (renamed from keyboards/clueboard/keymaps/win_optimized/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/win_optimized/readme.md (renamed from keyboards/clueboard/keymaps/win_optimized/readme.md)0
-rw-r--r--keyboards/clueboard_66/keymaps/xyverz/Makefile (renamed from keyboards/clueboard/keymaps/xyverz/rules.mk)0
-rw-r--r--keyboards/clueboard_66/keymaps/xyverz/keymap.c (renamed from keyboards/clueboard/keymaps/xyverz/keymap.c)2
-rw-r--r--keyboards/clueboard_66/keymaps/xyverz/rules.mk49
-rw-r--r--keyboards/clueboard_66/readme.md (renamed from keyboards/clueboard/readme.md)0
-rw-r--r--keyboards/clueboard_66/rev1/Makefile3
-rw-r--r--keyboards/clueboard_66/rev1/config.h (renamed from keyboards/clueboard/rev1/config.h)0
-rw-r--r--keyboards/clueboard_66/rev1/rev1.c (renamed from keyboards/clueboard/rev1/rev1.c)0
-rw-r--r--keyboards/clueboard_66/rev1/rev1.h (renamed from keyboards/clueboard/rev1/rev1.h)2
-rw-r--r--keyboards/clueboard_66/rev1/rules.mk (renamed from keyboards/clueboard/rev1/rules.mk)0
-rw-r--r--keyboards/clueboard_66/rev2/Makefile3
-rw-r--r--keyboards/clueboard_66/rev2/config.h (renamed from keyboards/clueboard/rev2/config.h)0
-rw-r--r--keyboards/clueboard_66/rev2/rev2.c (renamed from keyboards/clueboard/rev2/rev2.c)0
-rw-r--r--keyboards/clueboard_66/rev2/rev2.h (renamed from keyboards/clueboard/rev2/rev2.h)2
-rw-r--r--keyboards/clueboard_66/rev2/rules.mk (renamed from keyboards/clueboard/rev2/rules.mk)0
-rw-r--r--keyboards/clueboard_66/rev3/config.h (renamed from keyboards/clueboard/rev3/config.h)0
-rw-r--r--keyboards/clueboard_66/rev3/rev3.c (renamed from keyboards/clueboard/rev3/rev3.c)0
-rw-r--r--keyboards/clueboard_66/rev3/rev3.h (renamed from keyboards/clueboard/rev3/rev3.h)2
-rw-r--r--keyboards/clueboard_66/rev3/rules.mk (renamed from keyboards/clueboard/rev3/rules.mk)0
-rw-r--r--keyboards/clueboard_66/rules.mk (renamed from keyboards/clueboard/rules.mk)0
-rw-r--r--keyboards/clueboard_66/subproject.mk (renamed from keyboards/clueboard/subproject.mk)0
-rw-r--r--keyboards/gh60/gh60.h24
-rw-r--r--keyboards/satan/satan.h18
-rw-r--r--layouts/community/60_iso/unxmaal/keymap.c48
-rw-r--r--layouts/community/60_iso/unxmaal/rules.mk5
-rw-r--r--layouts/default/60_ansi/default_60_ansi/keymap.c2
-rw-r--r--layouts/default/60_iso/default_60_iso/keymap.c10
-rw-r--r--quantum/audio/audio.c8
-rw-r--r--quantum/audio/audio.h7
-rw-r--r--quantum/audio/audio_arm.c606
-rw-r--r--quantum/audio/luts.c3
-rw-r--r--quantum/audio/luts.h11
-rw-r--r--quantum/audio/voices.h6
-rw-r--r--tmk_core/chibios.mk4
-rw-r--r--tmk_core/common/chibios/bootloader.c18
-rw-r--r--tmk_core/common/chibios/suspend.c5
-rw-r--r--tmk_core/common/wait.h11
-rw-r--r--tmk_core/protocol/chibios/main.c32
-rw-r--r--tmk_core/protocol/chibios/usb_main.c21
-rw-r--r--tmk_core/rules.mk2
114 files changed, 4005 insertions, 103 deletions
diff --git a/keyboards/clueboard/clueboard.c b/keyboards/clueboard/clueboard.c
deleted file mode 100644
index 3435202ba..000000000
--- a/keyboards/clueboard/clueboard.c
+++ /dev/null
@@ -1 +0,0 @@
1#include "clueboard.h"
diff --git a/keyboards/clueboard_17/Makefile b/keyboards/clueboard_17/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/clueboard_17/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/cluepad/cluepad.c b/keyboards/clueboard_17/clueboard_17.c
index 1867b617f..04cc81217 100644
--- a/keyboards/cluepad/cluepad.c
+++ b/keyboards/clueboard_17/clueboard_17.c
@@ -1,4 +1,4 @@
1#include "cluepad.h" 1#include "clueboard_17.h"
2 2
3int pwm_level; 3int pwm_level;
4 4
diff --git a/keyboards/cluepad/cluepad.h b/keyboards/clueboard_17/clueboard_17.h
index 5e4a5999e..5e4a5999e 100644
--- a/keyboards/cluepad/cluepad.h
+++ b/keyboards/clueboard_17/clueboard_17.h
diff --git a/keyboards/cluepad/config.h b/keyboards/clueboard_17/config.h
index bd64dfd27..bd64dfd27 100644
--- a/keyboards/cluepad/config.h
+++ b/keyboards/clueboard_17/config.h
diff --git a/keyboards/cluepad/keymaps/default/keymap.c b/keyboards/clueboard_17/keymaps/default/keymap.c
index 66827fe48..7a0d51851 100644
--- a/keyboards/cluepad/keymaps/default/keymap.c
+++ b/keyboards/clueboard_17/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
1#include "cluepad.h" 1#include "clueboard_17.h"
2 2
3#include "backlight.h" 3#include "backlight.h"
4 4
diff --git a/keyboards/cluepad/readme.md b/keyboards/clueboard_17/readme.md
index f79d6b559..f79d6b559 100644
--- a/keyboards/cluepad/readme.md
+++ b/keyboards/clueboard_17/readme.md
diff --git a/keyboards/cluepad/rules.mk b/keyboards/clueboard_17/rules.mk
index 264aba044..264aba044 100644
--- a/keyboards/cluepad/rules.mk
+++ b/keyboards/clueboard_17/rules.mk
diff --git a/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.c b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.c
new file mode 100644
index 000000000..897f20a88
--- /dev/null
+++ b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.c
@@ -0,0 +1,124 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#include "hal.h"
18
19#if HAL_USE_PAL || defined(__DOXYGEN__)
20/**
21 * @brief PAL setup.
22 * @details Digital I/O ports static configuration as defined in @p board.h.
23 * This variable is used by the HAL when initializing the PAL driver.
24 */
25const PALConfig pal_default_config = {
26#if STM32_HAS_GPIOA
27 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
28 VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
29#endif
30#if STM32_HAS_GPIOB
31 {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
32 VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
33#endif
34#if STM32_HAS_GPIOC
35 {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
36 VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
37#endif
38#if STM32_HAS_GPIOD
39 {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
40 VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
41#endif
42#if STM32_HAS_GPIOE
43 {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
44 VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
45#endif
46#if STM32_HAS_GPIOF
47 {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
48 VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
49#endif
50#if STM32_HAS_GPIOG
51 {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
52 VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
53#endif
54#if STM32_HAS_GPIOH
55 {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
56 VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
57#endif
58#if STM32_HAS_GPIOI
59 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
60 VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
61#endif
62};
63#endif
64
65/**
66 * @brief Early initialization code.
67 * @details This initialization must be performed just after stack setup
68 * and before any other initialization.
69 */
70void __early_init(void) {
71
72 stm32_clock_init();
73}
74
75#if HAL_USE_SDC || defined(__DOXYGEN__)
76/**
77 * @brief SDC card detection.
78 */
79bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
80
81 (void)sdcp;
82 /* TODO: Fill the implementation.*/
83 return true;
84}
85
86/**
87 * @brief SDC card write protection detection.
88 */
89bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
90
91 (void)sdcp;
92 /* TODO: Fill the implementation.*/
93 return false;
94}
95#endif /* HAL_USE_SDC */
96
97#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
98/**
99 * @brief MMC_SPI card detection.
100 */
101bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
102
103 (void)mmcp;
104 /* TODO: Fill the implementation.*/
105 return true;
106}
107
108/**
109 * @brief MMC_SPI card write protection detection.
110 */
111bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
112
113 (void)mmcp;
114 /* TODO: Fill the implementation.*/
115 return false;
116}
117#endif
118
119/**
120 * @brief Board-specific initialization code.
121 * @todo Add your board-specific code, if any.
122 */
123void boardInit(void) {
124}
diff --git a/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.h b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.h
new file mode 100644
index 000000000..145d569f0
--- /dev/null
+++ b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.h
@@ -0,0 +1,1187 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef _BOARD_H_
18#define _BOARD_H_
19
20/*
21 * Setup for Clueboard 60% Keyboard
22 */
23
24/*
25 * Board identifier.
26 */
27#define BOARD_GENERIC_STM32_F303XC
28#define BOARD_NAME "Clueboard 60 PCB"
29
30/*
31 * Board oscillators-related settings.
32 * NOTE: LSE not fitted.
33 */
34#if !defined(STM32_LSECLK)
35#define STM32_LSECLK 0U
36#endif
37
38#define STM32_LSEDRV (3U << 3U)
39
40#if !defined(STM32_HSECLK)
41#define STM32_HSECLK 8000000U
42#endif
43
44// #define STM32_HSE_BYPASS
45
46/*
47 * MCU type as defined in the ST header.
48 */
49#define STM32F303xC
50
51/*
52 * IO pins assignments.
53 */
54#define GPIOA_PIN0 0U
55#define GPIOA_PIN1 1U
56#define GPIOA_PIN2 2U
57#define GPIOA_PIN3 3U
58#define GPIOA_PIN4 4U
59#define GPIOA_PIN5 5U
60#define GPIOA_PIN6 6U
61#define GPIOA_PIN7 7U
62#define GPIOA_PIN8 8U
63#define GPIOA_PIN9 9U
64#define GPIOA_PIN10 10U
65#define GPIOA_USB_DM 11U
66#define GPIOA_USB_DP 12U
67#define GPIOA_SWDIO 13U
68#define GPIOA_SWCLK 14U
69#define GPIOA_PIN15 15U
70
71#define GPIOB_PIN0 0U
72#define GPIOB_PIN1 1U
73#define GPIOB_PIN2 2U
74#define GPIOB_PIN3 3U
75#define GPIOB_PIN4 4U
76#define GPIOB_PIN5 5U
77#define GPIOB_PIN6 6U
78#define GPIOB_PIN7 7U
79#define GPIOB_PIN8 8U
80#define GPIOB_PIN9 9U
81#define GPIOB_PIN10 10U
82#define GPIOB_PIN11 11U
83#define GPIOB_PIN12 12U
84#define GPIOB_PIN13 13U
85#define GPIOB_PIN14 14U
86#define GPIOB_PIN15 15U
87
88#define GPIOC_PIN0 0U
89#define GPIOC_PIN1 1U
90#define GPIOC_PIN2 2U
91#define GPIOC_PIN3 3U
92#define GPIOC_PIN4 4U
93#define GPIOC_PIN5 5U
94#define GPIOC_PIN6 6U
95#define GPIOC_PIN7 7U
96#define GPIOC_PIN8 8U
97#define GPIOC_PIN9 9U
98#define GPIOC_PIN10 10U
99#define GPIOC_PIN11 11U
100#define GPIOC_PIN12 12U
101#define GPIOC_PIN13 13U
102#define GPIOC_PIN14 14U
103#define GPIOC_PIN15 15U
104
105#define GPIOD_PIN0 0U
106#define GPIOD_PIN1 1U
107#define GPIOD_PIN2 2U
108#define GPIOD_PIN3 3U
109#define GPIOD_PIN4 4U
110#define GPIOD_PIN5 5U
111#define GPIOD_PIN6 6U
112#define GPIOD_PIN7 7U
113#define GPIOD_PIN8 8U
114#define GPIOD_PIN9 9U
115#define GPIOD_PIN10 10U
116#define GPIOD_PIN11 11U
117#define GPIOD_PIN12 12U
118#define GPIOD_PIN13 13U
119#define GPIOD_PIN14 14U
120#define GPIOD_PIN15 15U
121
122#define GPIOE_PIN0 0U
123#define GPIOE_PIN1 1U
124#define GPIOE_PIN2 2U
125#define GPIOE_PIN3 3U
126#define GPIOE_PIN4 4U
127#define GPIOE_PIN5 5U
128#define GPIOE_PIN6 6U
129#define GPIOE_PIN7 7U
130#define GPIOE_PIN8 8U
131#define GPIOE_PIN9 9U
132#define GPIOE_PIN10 10U
133#define GPIOE_PIN11 11U
134#define GPIOE_PIN12 12U
135#define GPIOE_PIN13 13U
136#define GPIOE_PIN14 14U
137#define GPIOE_PIN15 15U
138
139#define GPIOF_I2C2_SDA 0U
140#define GPIOF_I2C2_SCL 1U
141#define GPIOF_PIN2 2U
142#define GPIOF_PIN3 3U
143#define GPIOF_PIN4 4U
144#define GPIOF_PIN5 5U
145#define GPIOF_PIN6 6U
146#define GPIOF_PIN7 7U
147#define GPIOF_PIN8 8U
148#define GPIOF_PIN9 9U
149#define GPIOF_PIN10 10U
150#define GPIOF_PIN11 11U
151#define GPIOF_PIN12 12U
152#define GPIOF_PIN13 13U
153#define GPIOF_PIN14 14U
154#define GPIOF_PIN15 15U
155
156#define GPIOG_PIN0 0U
157#define GPIOG_PIN1 1U
158#define GPIOG_PIN2 2U
159#define GPIOG_PIN3 3U
160#define GPIOG_PIN4 4U
161#define GPIOG_PIN5 5U
162#define GPIOG_PIN6 6U
163#define GPIOG_PIN7 7U
164#define GPIOG_PIN8 8U
165#define GPIOG_PIN9 9U
166#define GPIOG_PIN10 10U
167#define GPIOG_PIN11 11U
168#define GPIOG_PIN12 12U
169#define GPIOG_PIN13 13U
170#define GPIOG_PIN14 14U
171#define GPIOG_PIN15 15U
172
173#define GPIOH_PIN0 0U
174#define GPIOH_PIN1 1U
175#define GPIOH_PIN2 2U
176#define GPIOH_PIN3 3U
177#define GPIOH_PIN4 4U
178#define GPIOH_PIN5 5U
179#define GPIOH_PIN6 6U
180#define GPIOH_PIN7 7U
181#define GPIOH_PIN8 8U
182#define GPIOH_PIN9 9U
183#define GPIOH_PIN10 10U
184#define GPIOH_PIN11 11U
185#define GPIOH_PIN12 12U
186#define GPIOH_PIN13 13U
187#define GPIOH_PIN14 14U
188#define GPIOH_PIN15 15U
189
190/*
191 * IO lines assignments.
192 */
193#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
194#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
195#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
196#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
197#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
198
199#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
200#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
201
202#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
203
204
205/*
206 * I/O ports initial setup, this configuration is established soon after reset
207 * in the initialization code.
208 * Please refer to the STM32 Reference Manual for details.
209 */
210#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
211#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
212#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
213#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
214#define PIN_ODR_LOW(n) (0U << (n))
215#define PIN_ODR_HIGH(n) (1U << (n))
216#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
217#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
218#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
219#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
220#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
221#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
222#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
223#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
224#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
225#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
226
227/*
228 * GPIOA setup:
229 *
230 * PA0 - NC
231 * PA1 - NC
232 * PA2 - COL1
233 * PA3 - COL2
234 * PA4 - SPEAKER1
235 * PA5 - SPEAKER2
236 * PA6 - COL3
237 * PA7 - COL8
238 * PA8 - COL6
239 * PA9 - COL7
240 * PA10 - ROW5
241 * PA11 - USB_DM (alternate 14).
242 * PA12 - USB_DP (alternate 14).
243 * PA13 - SWDIO (alternate 0).
244 * PA14 - SWCLK (alternate 0).
245 * PA15 - ROW4
246 */
247#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
248 PIN_MODE_INPUT(GPIOA_PIN1) | \
249 PIN_MODE_INPUT(GPIOA_PIN2) | \
250 PIN_MODE_INPUT(GPIOA_PIN3) | \
251 PIN_MODE_INPUT(GPIOA_PIN4) | \
252 PIN_MODE_INPUT(GPIOA_PIN5) | \
253 PIN_MODE_INPUT(GPIOA_PIN6) | \
254 PIN_MODE_INPUT(GPIOA_PIN7) | \
255 PIN_MODE_INPUT(GPIOA_PIN8) | \
256 PIN_MODE_INPUT(GPIOA_PIN9) | \
257 PIN_MODE_INPUT(GPIOA_PIN10) | \
258 PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
259 PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
260 PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
261 PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
262 PIN_MODE_INPUT(GPIOA_PIN15))
263#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
264 PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
265 PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
266 PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
267 PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
268 PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
269 PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
270 PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
271 PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
272 PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
273 PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
274 PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
275 PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
276 PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
277 PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
278 PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
279#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
280 PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
281 PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
282 PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
283 PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
284 PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
285 PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
286 PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
287 PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
288 PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
289 PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
290 PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
291 PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
292 PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
293 PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
294 PIN_OSPEED_VERYLOW(GPIOA_PIN15))
295#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
296 PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
297 PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
298 PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
299 PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
300 PIN_PUPDR_FLOATING(GPIOA_PIN5) | \
301 PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
302 PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
303 PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
304 PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
305 PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
306 PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
307 PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
308 PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
309 PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
310 PIN_PUPDR_PULLUP(GPIOA_PIN15))
311#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
312 PIN_ODR_HIGH(GPIOA_PIN1) | \
313 PIN_ODR_HIGH(GPIOA_PIN2) | \
314 PIN_ODR_HIGH(GPIOA_PIN3) | \
315 PIN_ODR_HIGH(GPIOA_PIN4) | \
316 PIN_ODR_HIGH(GPIOA_PIN5) | \
317 PIN_ODR_HIGH(GPIOA_PIN6) | \
318 PIN_ODR_HIGH(GPIOA_PIN7) | \
319 PIN_ODR_HIGH(GPIOA_PIN8) | \
320 PIN_ODR_HIGH(GPIOA_PIN9) | \
321 PIN_ODR_HIGH(GPIOA_PIN10) | \
322 PIN_ODR_HIGH(GPIOA_USB_DM) | \
323 PIN_ODR_HIGH(GPIOA_USB_DP) | \
324 PIN_ODR_HIGH(GPIOA_SWDIO) | \
325 PIN_ODR_HIGH(GPIOA_SWCLK) | \
326 PIN_ODR_HIGH(GPIOA_PIN15))
327#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
328 PIN_AFIO_AF(GPIOA_PIN1, 0) | \
329 PIN_AFIO_AF(GPIOA_PIN2, 0) | \
330 PIN_AFIO_AF(GPIOA_PIN3, 0) | \
331 PIN_AFIO_AF(GPIOA_PIN4, 0) | \
332 PIN_AFIO_AF(GPIOA_PIN5, 5) | \
333 PIN_AFIO_AF(GPIOA_PIN6, 5) | \
334 PIN_AFIO_AF(GPIOA_PIN7, 5))
335#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
336 PIN_AFIO_AF(GPIOA_PIN9, 0) | \
337 PIN_AFIO_AF(GPIOA_PIN10, 0) | \
338 PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
339 PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
340 PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
341 PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
342 PIN_AFIO_AF(GPIOA_PIN15, 0))
343
344/*
345 * GPIOB setup:
346 *
347 * PB0 - PIN0 (input pullup).
348 * PB1 - PIN1 (input pullup).
349 * PB2 - PIN2 (input pullup).
350 * PB3 - PIN3 (alternate 0).
351 * PB4 - PIN4 (input pullup).
352 * PB5 - PIN5 (input pullup).
353 * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
354 * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
355 * PB8 - PIN8 (input pullup).
356 * PB9 - PIN9 (input pullup).
357 * PB10 - PIN10 (input pullup).
358 * PB11 - PIN11 (input pullup).
359 * PB12 - PIN12 (input pullup).
360 * PB13 - PIN13 (input pullup).
361 * PB14 - PIN14 (input pullup).
362 * PB15 - PIN15 (input pullup).
363 */
364#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
365 PIN_MODE_INPUT(GPIOB_PIN1) | \
366 PIN_MODE_INPUT(GPIOB_PIN2) | \
367 PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
368 PIN_MODE_INPUT(GPIOB_PIN4) | \
369 PIN_MODE_INPUT(GPIOB_PIN5) | \
370 PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
371 PIN_MODE_OUTPUT(GPIOB_PIN7) | \
372 PIN_MODE_INPUT(GPIOB_PIN8) | \
373 PIN_MODE_INPUT(GPIOB_PIN9) | \
374 PIN_MODE_INPUT(GPIOB_PIN10) | \
375 PIN_MODE_INPUT(GPIOB_PIN11) | \
376 PIN_MODE_INPUT(GPIOB_PIN12) | \
377 PIN_MODE_INPUT(GPIOB_PIN13) | \
378 PIN_MODE_INPUT(GPIOB_PIN14) | \
379 PIN_MODE_INPUT(GPIOB_PIN15))
380#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
381 PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
382 PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
383 PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
384 PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
385 PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
386 PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
387 PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
388 PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
389 PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
390 PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
391 PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
392 PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
393 PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
394 PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
395 PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
396#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
397 PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
398 PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
399 PIN_OSPEED_HIGH(GPIOB_PIN3) | \
400 PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
401 PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
402 PIN_OSPEED_HIGH(GPIOB_PIN6) | \
403 PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
404 PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
405 PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
406 PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
407 PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
408 PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
409 PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
410 PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
411 PIN_OSPEED_VERYLOW(GPIOB_PIN15))
412#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
413 PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
414 PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
415 PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
416 PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
417 PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
418 PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
419 PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
420 PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
421 PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
422 PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
423 PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
424 PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
425 PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
426 PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
427 PIN_PUPDR_PULLUP(GPIOB_PIN15))
428#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
429 PIN_ODR_HIGH(GPIOB_PIN1) | \
430 PIN_ODR_HIGH(GPIOB_PIN2) | \
431 PIN_ODR_HIGH(GPIOB_PIN3) | \
432 PIN_ODR_HIGH(GPIOB_PIN4) | \
433 PIN_ODR_HIGH(GPIOB_PIN5) | \
434 PIN_ODR_HIGH(GPIOB_PIN6) | \
435 PIN_ODR_HIGH(GPIOB_PIN7) | \
436 PIN_ODR_HIGH(GPIOB_PIN8) | \
437 PIN_ODR_HIGH(GPIOB_PIN9) | \
438 PIN_ODR_HIGH(GPIOB_PIN10) | \
439 PIN_ODR_HIGH(GPIOB_PIN11) | \
440 PIN_ODR_HIGH(GPIOB_PIN12) | \
441 PIN_ODR_HIGH(GPIOB_PIN13) | \
442 PIN_ODR_HIGH(GPIOB_PIN14) | \
443 PIN_ODR_HIGH(GPIOB_PIN15))
444#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
445 PIN_AFIO_AF(GPIOB_PIN1, 0) | \
446 PIN_AFIO_AF(GPIOB_PIN2, 0) | \
447 PIN_AFIO_AF(GPIOB_PIN3, 0) | \
448 PIN_AFIO_AF(GPIOB_PIN4, 0) | \
449 PIN_AFIO_AF(GPIOB_PIN5, 0) | \
450 PIN_AFIO_AF(GPIOB_PIN6, 4) | \
451 PIN_AFIO_AF(GPIOB_PIN7, 0))
452#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
453 PIN_AFIO_AF(GPIOB_PIN9, 0) | \
454 PIN_AFIO_AF(GPIOB_PIN10, 0) | \
455 PIN_AFIO_AF(GPIOB_PIN11, 0) | \
456 PIN_AFIO_AF(GPIOB_PIN12, 0) | \
457 PIN_AFIO_AF(GPIOB_PIN13, 0) | \
458 PIN_AFIO_AF(GPIOB_PIN14, 0) | \
459 PIN_AFIO_AF(GPIOB_PIN15, 0))
460
461/*
462 * GPIOC setup:
463 *
464 * PC0 - PIN0 (input pullup).
465 * PC1 - PIN1 (input pullup).
466 * PC2 - PIN2 (input pullup).
467 * PC3 - PIN3 (input pullup).
468 * PC4 - PIN4 (input pullup).
469 * PC5 - PIN5 (input pullup).
470 * PC6 - PIN6 (input pullup).
471 * PC7 - PIN7 (input pullup).
472 * PC8 - PIN8 (input pullup).
473 * PC9 - PIN9 (input pullup).
474 * PC10 - PIN10 (input pullup).
475 * PC11 - PIN11 (input pullup).
476 * PC12 - PIN12 (input pullup).
477 * PC13 - PIN13 (input pullup).
478 * PC14 - PIN14 (input floating).
479 * PC15 - PIN15 (input floating).
480 */
481#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
482 PIN_MODE_INPUT(GPIOC_PIN1) | \
483 PIN_MODE_INPUT(GPIOC_PIN2) | \
484 PIN_MODE_INPUT(GPIOC_PIN3) | \
485 PIN_MODE_INPUT(GPIOC_PIN4) | \
486 PIN_MODE_INPUT(GPIOC_PIN5) | \
487 PIN_MODE_INPUT(GPIOC_PIN6) | \
488 PIN_MODE_INPUT(GPIOC_PIN7) | \
489 PIN_MODE_INPUT(GPIOC_PIN8) | \
490 PIN_MODE_INPUT(GPIOC_PIN9) | \
491 PIN_MODE_INPUT(GPIOC_PIN10) | \
492 PIN_MODE_INPUT(GPIOC_PIN11) | \
493 PIN_MODE_INPUT(GPIOC_PIN12) | \
494 PIN_MODE_INPUT(GPIOC_PIN13) | \
495 PIN_MODE_INPUT(GPIOC_PIN14) | \
496 PIN_MODE_INPUT(GPIOC_PIN15))
497#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
498 PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
499 PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
500 PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
501 PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
502 PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
503 PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
504 PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
505 PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
506 PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
507 PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
508 PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
509 PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
510 PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
511 PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
512 PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
513#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
514 PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
515 PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
516 PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
517 PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
518 PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
519 PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
520 PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
521 PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
522 PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
523 PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
524 PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
525 PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
526 PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
527 PIN_OSPEED_HIGH(GPIOC_PIN14) | \
528 PIN_OSPEED_HIGH(GPIOC_PIN15))
529#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
530 PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
531 PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
532 PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
533 PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
534 PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
535 PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
536 PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
537 PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
538 PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
539 PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
540 PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
541 PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
542 PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
543 PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
544 PIN_PUPDR_FLOATING(GPIOC_PIN15))
545#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
546 PIN_ODR_HIGH(GPIOC_PIN1) | \
547 PIN_ODR_HIGH(GPIOC_PIN2) | \
548 PIN_ODR_HIGH(GPIOC_PIN3) | \
549 PIN_ODR_HIGH(GPIOC_PIN4) | \
550 PIN_ODR_HIGH(GPIOC_PIN5) | \
551 PIN_ODR_HIGH(GPIOC_PIN6) | \
552 PIN_ODR_HIGH(GPIOC_PIN7) | \
553 PIN_ODR_HIGH(GPIOC_PIN8) | \
554 PIN_ODR_HIGH(GPIOC_PIN9) | \
555 PIN_ODR_HIGH(GPIOC_PIN10) | \
556 PIN_ODR_HIGH(GPIOC_PIN11) | \
557 PIN_ODR_HIGH(GPIOC_PIN12) | \
558 PIN_ODR_HIGH(GPIOC_PIN13) | \
559 PIN_ODR_HIGH(GPIOC_PIN14) | \
560 PIN_ODR_HIGH(GPIOC_PIN15))
561#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
562 PIN_AFIO_AF(GPIOC_PIN1, 0) | \
563 PIN_AFIO_AF(GPIOC_PIN2, 0) | \
564 PIN_AFIO_AF(GPIOC_PIN3, 0) | \
565 PIN_AFIO_AF(GPIOC_PIN4, 0) | \
566 PIN_AFIO_AF(GPIOC_PIN5, 0) | \
567 PIN_AFIO_AF(GPIOC_PIN6, 0) | \
568 PIN_AFIO_AF(GPIOC_PIN7, 0))
569#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
570 PIN_AFIO_AF(GPIOC_PIN9, 0) | \
571 PIN_AFIO_AF(GPIOC_PIN10, 0) | \
572 PIN_AFIO_AF(GPIOC_PIN11, 0) | \
573 PIN_AFIO_AF(GPIOC_PIN12, 0) | \
574 PIN_AFIO_AF(GPIOC_PIN13, 0) | \
575 PIN_AFIO_AF(GPIOC_PIN14, 0) | \
576 PIN_AFIO_AF(GPIOC_PIN15, 0))
577
578/*
579 * GPIOD setup:
580 *
581 * PD0 - PIN0 (input pullup).
582 * PD1 - PIN1 (input pullup).
583 * PD2 - PIN2 (input pullup).
584 * PD3 - PIN3 (input pullup).
585 * PD4 - PIN4 (input pullup).
586 * PD5 - PIN5 (input pullup).
587 * PD6 - PIN6 (input pullup).
588 * PD7 - PIN7 (input pullup).
589 * PD8 - PIN8 (input pullup).
590 * PD9 - PIN9 (input pullup).
591 * PD11 - PIN10 (input pullup).
592 * PD11 - PIN11 (input pullup).
593 * PD12 - PIN12 (input pullup).
594 * PD13 - PIN13 (input pullup).
595 * PD14 - PIN14 (input pullup).
596 * PD15 - PIN15 (input pullup).
597 */
598#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
599 PIN_MODE_INPUT(GPIOD_PIN1) | \
600 PIN_MODE_INPUT(GPIOD_PIN2) | \
601 PIN_MODE_INPUT(GPIOD_PIN3) | \
602 PIN_MODE_INPUT(GPIOD_PIN4) | \
603 PIN_MODE_INPUT(GPIOD_PIN5) | \
604 PIN_MODE_INPUT(GPIOD_PIN6) | \
605 PIN_MODE_INPUT(GPIOD_PIN7) | \
606 PIN_MODE_INPUT(GPIOD_PIN8) | \
607 PIN_MODE_INPUT(GPIOD_PIN9) | \
608 PIN_MODE_INPUT(GPIOD_PIN10) | \
609 PIN_MODE_INPUT(GPIOD_PIN11) | \
610 PIN_MODE_INPUT(GPIOD_PIN12) | \
611 PIN_MODE_INPUT(GPIOD_PIN13) | \
612 PIN_MODE_INPUT(GPIOD_PIN14) | \
613 PIN_MODE_INPUT(GPIOD_PIN15))
614#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
615 PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
616 PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
617 PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
618 PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
619 PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
620 PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
621 PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
622 PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
623 PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
624 PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
625 PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
626 PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
627 PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
628 PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
629 PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
630#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
631 PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
632 PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
633 PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
634 PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
635 PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
636 PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
637 PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
638 PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
639 PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
640 PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
641 PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
642 PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
643 PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
644 PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
645 PIN_OSPEED_VERYLOW(GPIOD_PIN15))
646#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
647 PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
648 PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
649 PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
650 PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
651 PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
652 PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
653 PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
654 PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
655 PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
656 PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
657 PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
658 PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
659 PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
660 PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
661 PIN_PUPDR_PULLUP(GPIOD_PIN15))
662#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
663 PIN_ODR_HIGH(GPIOD_PIN1) | \
664 PIN_ODR_HIGH(GPIOD_PIN2) | \
665 PIN_ODR_HIGH(GPIOD_PIN3) | \
666 PIN_ODR_HIGH(GPIOD_PIN4) | \
667 PIN_ODR_HIGH(GPIOD_PIN5) | \
668 PIN_ODR_HIGH(GPIOD_PIN6) | \
669 PIN_ODR_HIGH(GPIOD_PIN7) | \
670 PIN_ODR_HIGH(GPIOD_PIN8) | \
671 PIN_ODR_HIGH(GPIOD_PIN9) | \
672 PIN_ODR_HIGH(GPIOD_PIN10) | \
673 PIN_ODR_HIGH(GPIOD_PIN11) | \
674 PIN_ODR_HIGH(GPIOD_PIN12) | \
675 PIN_ODR_HIGH(GPIOD_PIN13) | \
676 PIN_ODR_HIGH(GPIOD_PIN14) | \
677 PIN_ODR_HIGH(GPIOD_PIN15))
678#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
679 PIN_AFIO_AF(GPIOD_PIN1, 0) | \
680 PIN_AFIO_AF(GPIOD_PIN2, 0) | \
681 PIN_AFIO_AF(GPIOD_PIN3, 0) | \
682 PIN_AFIO_AF(GPIOD_PIN4, 0) | \
683 PIN_AFIO_AF(GPIOD_PIN5, 0) | \
684 PIN_AFIO_AF(GPIOD_PIN6, 0) | \
685 PIN_AFIO_AF(GPIOD_PIN7, 0))
686#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
687 PIN_AFIO_AF(GPIOD_PIN9, 0) | \
688 PIN_AFIO_AF(GPIOD_PIN10, 0) | \
689 PIN_AFIO_AF(GPIOD_PIN11, 0) | \
690 PIN_AFIO_AF(GPIOD_PIN12, 0) | \
691 PIN_AFIO_AF(GPIOD_PIN13, 0) | \
692 PIN_AFIO_AF(GPIOD_PIN14, 0) | \
693 PIN_AFIO_AF(GPIOD_PIN15, 0))
694
695/*
696 * GPIOE setup:
697 *
698 * PE0 - PIN0 (input pullup).
699 * PE1 - PIN1 (input pullup).
700 * PE2 - PIN2 (input pullup).
701 * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
702 * PE4 - PIN4 (input pullup).
703 * PE5 - PIN5 (input pullup).
704 * PE6 - PIN6 (input pullup).
705 * PE7 - PIN7 (input pullup).
706 * PE8 - PIN8 (output pushpull maximum).
707 * PE9 - PIN9 (output pushpull maximum).
708 * PE10 - PIN10 (output pushpull maximum).
709 * PE11 - PIN11 (output pushpull maximum).
710 * PE12 - PIN12 (output pushpull maximum).
711 * PE13 - PIN13 (output pushpull maximum).
712 * PE14 - PIN14 (output pushpull maximum).
713 * PE15 - PIN15 (output pushpull maximum).
714 */
715#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
716 PIN_MODE_INPUT(GPIOE_PIN1) | \
717 PIN_MODE_INPUT(GPIOE_PIN2) |\
718 PIN_MODE_OUTPUT(GPIOE_PIN3) | \
719 PIN_MODE_INPUT(GPIOE_PIN4) |\
720 PIN_MODE_INPUT(GPIOE_PIN5) |\
721 PIN_MODE_INPUT(GPIOE_PIN6) | \
722 PIN_MODE_INPUT(GPIOE_PIN7) | \
723 PIN_MODE_OUTPUT(GPIOE_PIN8) | \
724 PIN_MODE_OUTPUT(GPIOE_PIN9) | \
725 PIN_MODE_OUTPUT(GPIOE_PIN10) | \
726 PIN_MODE_OUTPUT(GPIOE_PIN11) | \
727 PIN_MODE_OUTPUT(GPIOE_PIN12) | \
728 PIN_MODE_OUTPUT(GPIOE_PIN13) | \
729 PIN_MODE_OUTPUT(GPIOE_PIN14) | \
730 PIN_MODE_OUTPUT(GPIOE_PIN15))
731#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
732 PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
733 PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
734 PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
735 PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
736 PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
737 PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
738 PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
739 PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
740 PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
741 PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
742 PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
743 PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
744 PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
745 PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
746 PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
747#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
748 PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
749 PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
750 PIN_OSPEED_HIGH(GPIOE_PIN3) | \
751 PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
752 PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
753 PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
754 PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
755 PIN_OSPEED_HIGH(GPIOE_PIN8) | \
756 PIN_OSPEED_HIGH(GPIOE_PIN9) | \
757 PIN_OSPEED_HIGH(GPIOE_PIN10) | \
758 PIN_OSPEED_HIGH(GPIOE_PIN11) | \
759 PIN_OSPEED_HIGH(GPIOE_PIN12) | \
760 PIN_OSPEED_HIGH(GPIOE_PIN13) | \
761 PIN_OSPEED_HIGH(GPIOE_PIN14) | \
762 PIN_OSPEED_HIGH(GPIOE_PIN15))
763#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
764 PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
765 PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
766 PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
767 PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
768 PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
769 PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
770 PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
771 PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
772 PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
773 PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
774 PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
775 PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
776 PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
777 PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
778 PIN_PUPDR_FLOATING(GPIOE_PIN15))
779#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
780 PIN_ODR_HIGH(GPIOE_PIN1) | \
781 PIN_ODR_HIGH(GPIOE_PIN2) | \
782 PIN_ODR_HIGH(GPIOE_PIN3) | \
783 PIN_ODR_HIGH(GPIOE_PIN4) | \
784 PIN_ODR_HIGH(GPIOE_PIN5) | \
785 PIN_ODR_HIGH(GPIOE_PIN6) | \
786 PIN_ODR_HIGH(GPIOE_PIN7) | \
787 PIN_ODR_LOW(GPIOE_PIN8) | \
788 PIN_ODR_LOW(GPIOE_PIN9) | \
789 PIN_ODR_LOW(GPIOE_PIN10) | \
790 PIN_ODR_LOW(GPIOE_PIN11) | \
791 PIN_ODR_LOW(GPIOE_PIN12) | \
792 PIN_ODR_LOW(GPIOE_PIN13) | \
793 PIN_ODR_LOW(GPIOE_PIN14) | \
794 PIN_ODR_LOW(GPIOE_PIN15))
795#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
796 PIN_AFIO_AF(GPIOE_PIN1, 0) | \
797 PIN_AFIO_AF(GPIOE_PIN2, 0) |\
798 PIN_AFIO_AF(GPIOE_PIN3, 0) | \
799 PIN_AFIO_AF(GPIOE_PIN4, 0) |\
800 PIN_AFIO_AF(GPIOE_PIN5, 0) |\
801 PIN_AFIO_AF(GPIOE_PIN6, 0) | \
802 PIN_AFIO_AF(GPIOE_PIN7, 0))
803#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
804 PIN_AFIO_AF(GPIOE_PIN9, 0) | \
805 PIN_AFIO_AF(GPIOE_PIN10, 0) | \
806 PIN_AFIO_AF(GPIOE_PIN11, 0) | \
807 PIN_AFIO_AF(GPIOE_PIN12, 0) | \
808 PIN_AFIO_AF(GPIOE_PIN13, 0) | \
809 PIN_AFIO_AF(GPIOE_PIN14, 0) | \
810 PIN_AFIO_AF(GPIOE_PIN15, 0))
811
812/*
813 * GPIOF setup:
814 *
815 * PF0 - I2C2_SDA (input floating).
816 * PF1 - I2C2_SCL (input floating).
817 * PF2 - PIN2 (input pullup).
818 * PF3 - PIN3 (input pullup).
819 * PF4 - PIN4 (input pullup).
820 * PF5 - PIN5 (input pullup).
821 * PF6 - PIN6 (input pullup).
822 * PF7 - PIN7 (input pullup).
823 * PF8 - PIN8 (input pullup).
824 * PF9 - PIN9 (input pullup).
825 * PF10 - PIN10 (input pullup).
826 * PF11 - PIN11 (input pullup).
827 * PF12 - PIN12 (input pullup).
828 * PF13 - PIN13 (input pullup).
829 * PF14 - PIN14 (input pullup).
830 * PF15 - PIN15 (input pullup).
831 */
832#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
833 PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
834 PIN_MODE_INPUT(GPIOF_PIN2) | \
835 PIN_MODE_INPUT(GPIOF_PIN3) | \
836 PIN_MODE_INPUT(GPIOF_PIN4) | \
837 PIN_MODE_INPUT(GPIOF_PIN5) | \
838 PIN_MODE_INPUT(GPIOF_PIN6) | \
839 PIN_MODE_INPUT(GPIOF_PIN7) | \
840 PIN_MODE_INPUT(GPIOF_PIN8) | \
841 PIN_MODE_INPUT(GPIOF_PIN9) | \
842 PIN_MODE_INPUT(GPIOF_PIN10) | \
843 PIN_MODE_INPUT(GPIOF_PIN11) | \
844 PIN_MODE_INPUT(GPIOF_PIN12) | \
845 PIN_MODE_INPUT(GPIOF_PIN13) | \
846 PIN_MODE_INPUT(GPIOF_PIN14) | \
847 PIN_MODE_INPUT(GPIOF_PIN15))
848#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
849 PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
850 PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
851 PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
852 PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
853 PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
854 PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
855 PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
856 PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
857 PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
858 PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
859 PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
860 PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
861 PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
862 PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
863 PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
864#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
865 PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
866 PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
867 PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
868 PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
869 PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
870 PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
871 PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
872 PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
873 PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
874 PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
875 PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
876 PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
877 PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
878 PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
879 PIN_OSPEED_VERYLOW(GPIOF_PIN15))
880#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
881 PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
882 PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
883 PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
884 PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
885 PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
886 PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
887 PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
888 PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
889 PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
890 PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
891 PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
892 PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
893 PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
894 PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
895 PIN_PUPDR_PULLUP(GPIOF_PIN15))
896#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
897 PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
898 PIN_ODR_HIGH(GPIOF_PIN2) | \
899 PIN_ODR_HIGH(GPIOF_PIN3) | \
900 PIN_ODR_HIGH(GPIOF_PIN4) | \
901 PIN_ODR_HIGH(GPIOF_PIN5) | \
902 PIN_ODR_HIGH(GPIOF_PIN6) | \
903 PIN_ODR_HIGH(GPIOF_PIN7) | \
904 PIN_ODR_HIGH(GPIOF_PIN8) | \
905 PIN_ODR_HIGH(GPIOF_PIN9) | \
906 PIN_ODR_HIGH(GPIOF_PIN10) | \
907 PIN_ODR_HIGH(GPIOF_PIN11) | \
908 PIN_ODR_HIGH(GPIOF_PIN12) | \
909 PIN_ODR_HIGH(GPIOF_PIN13) | \
910 PIN_ODR_HIGH(GPIOF_PIN14) | \
911 PIN_ODR_HIGH(GPIOF_PIN15))
912#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
913 PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
914 PIN_AFIO_AF(GPIOF_PIN2, 0) | \
915 PIN_AFIO_AF(GPIOF_PIN3, 0) | \
916 PIN_AFIO_AF(GPIOF_PIN4, 0) | \
917 PIN_AFIO_AF(GPIOF_PIN5, 0) | \
918 PIN_AFIO_AF(GPIOF_PIN6, 0) | \
919 PIN_AFIO_AF(GPIOF_PIN7, 0))
920#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
921 PIN_AFIO_AF(GPIOF_PIN9, 0) | \
922 PIN_AFIO_AF(GPIOF_PIN10, 0) | \
923 PIN_AFIO_AF(GPIOF_PIN11, 0) | \
924 PIN_AFIO_AF(GPIOF_PIN12, 0) | \
925 PIN_AFIO_AF(GPIOF_PIN13, 0) | \
926 PIN_AFIO_AF(GPIOF_PIN14, 0) | \
927 PIN_AFIO_AF(GPIOF_PIN15, 0))
928
929/*
930 * GPIOG setup:
931 *
932 * PG0 - PIN0 (input pullup).
933 * PG1 - PIN1 (input pullup).
934 * PG2 - PIN2 (input pullup).
935 * PG3 - PIN3 (input pullup).
936 * PG4 - PIN4 (input pullup).
937 * PG5 - PIN5 (input pullup).
938 * PG6 - PIN6 (input pullup).
939 * PG7 - PIN7 (input pullup).
940 * PG8 - PIN8 (input pullup).
941 * PG9 - PIN9 (input pullup).
942 * PG10 - PIN10 (input pullup).
943 * PG11 - PIN11 (input pullup).
944 * PG12 - PIN12 (input pullup).
945 * PG13 - PIN13 (input pullup).
946 * PG14 - PIN14 (input pullup).
947 * PG15 - PIN15 (input pullup).
948 */
949#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
950 PIN_MODE_INPUT(GPIOG_PIN1) | \
951 PIN_MODE_INPUT(GPIOG_PIN2) | \
952 PIN_MODE_INPUT(GPIOG_PIN3) | \
953 PIN_MODE_INPUT(GPIOG_PIN4) | \
954 PIN_MODE_INPUT(GPIOG_PIN5) | \
955 PIN_MODE_INPUT(GPIOG_PIN6) | \
956 PIN_MODE_INPUT(GPIOG_PIN7) | \
957 PIN_MODE_INPUT(GPIOG_PIN8) | \
958 PIN_MODE_INPUT(GPIOG_PIN9) | \
959 PIN_MODE_INPUT(GPIOG_PIN10) | \
960 PIN_MODE_INPUT(GPIOG_PIN11) | \
961 PIN_MODE_INPUT(GPIOG_PIN12) | \
962 PIN_MODE_INPUT(GPIOG_PIN13) | \
963 PIN_MODE_INPUT(GPIOG_PIN14) | \
964 PIN_MODE_INPUT(GPIOG_PIN15))
965#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
966 PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
967 PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
968 PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
969 PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
970 PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
971 PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
972 PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
973 PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
974 PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
975 PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
976 PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
977 PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
978 PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
979 PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
980 PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
981#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
982 PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
983 PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
984 PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
985 PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
986 PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
987 PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
988 PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
989 PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
990 PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
991 PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
992 PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
993 PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
994 PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
995 PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
996 PIN_OSPEED_VERYLOW(GPIOG_PIN15))
997#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
998 PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
999 PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
1000 PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
1001 PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
1002 PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
1003 PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
1004 PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
1005 PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
1006 PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
1007 PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
1008 PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
1009 PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
1010 PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
1011 PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
1012 PIN_PUPDR_PULLUP(GPIOG_PIN15))
1013#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
1014 PIN_ODR_HIGH(GPIOG_PIN1) | \
1015 PIN_ODR_HIGH(GPIOG_PIN2) | \
1016 PIN_ODR_HIGH(GPIOG_PIN3) | \
1017 PIN_ODR_HIGH(GPIOG_PIN4) | \
1018 PIN_ODR_HIGH(GPIOG_PIN5) | \
1019 PIN_ODR_HIGH(GPIOG_PIN6) | \
1020 PIN_ODR_HIGH(GPIOG_PIN7) | \
1021 PIN_ODR_HIGH(GPIOG_PIN8) | \
1022 PIN_ODR_HIGH(GPIOG_PIN9) | \
1023 PIN_ODR_HIGH(GPIOG_PIN10) | \
1024 PIN_ODR_HIGH(GPIOG_PIN11) | \
1025 PIN_ODR_HIGH(GPIOG_PIN12) | \
1026 PIN_ODR_HIGH(GPIOG_PIN13) | \
1027 PIN_ODR_HIGH(GPIOG_PIN14) | \
1028 PIN_ODR_HIGH(GPIOG_PIN15))
1029#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
1030 PIN_AFIO_AF(GPIOG_PIN1, 0) | \
1031 PIN_AFIO_AF(GPIOG_PIN2, 0) | \
1032 PIN_AFIO_AF(GPIOG_PIN3, 0) | \
1033 PIN_AFIO_AF(GPIOG_PIN4, 0) | \
1034 PIN_AFIO_AF(GPIOG_PIN5, 0) | \
1035 PIN_AFIO_AF(GPIOG_PIN6, 0) | \
1036 PIN_AFIO_AF(GPIOG_PIN7, 0))
1037#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
1038 PIN_AFIO_AF(GPIOG_PIN9, 0) | \
1039 PIN_AFIO_AF(GPIOG_PIN10, 0) | \
1040 PIN_AFIO_AF(GPIOG_PIN11, 0) | \
1041 PIN_AFIO_AF(GPIOG_PIN12, 0) | \
1042 PIN_AFIO_AF(GPIOG_PIN13, 0) | \
1043 PIN_AFIO_AF(GPIOG_PIN14, 0) | \
1044 PIN_AFIO_AF(GPIOG_PIN15, 0))
1045
1046/*
1047 * GPIOH setup:
1048 *
1049 * PH0 - PIN0 (input pullup).
1050 * PH1 - PIN1 (input pullup).
1051 * PH2 - PIN2 (input pullup).
1052 * PH3 - PIN3 (input pullup).
1053 * PH4 - PIN4 (input pullup).
1054 * PH5 - PIN5 (input pullup).
1055 * PH6 - PIN6 (input pullup).
1056 * PH7 - PIN7 (input pullup).
1057 * PH8 - PIN8 (input pullup).
1058 * PH9 - PIN9 (input pullup).
1059 * PH10 - PIN10 (input pullup).
1060 * PH11 - PIN11 (input pullup).
1061 * PH12 - PIN12 (input pullup).
1062 * PH13 - PIN13 (input pullup).
1063 * PH14 - PIN14 (input pullup).
1064 * PH15 - PIN15 (input pullup).
1065 */
1066#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
1067 PIN_MODE_INPUT(GPIOH_PIN1) | \
1068 PIN_MODE_INPUT(GPIOH_PIN2) | \
1069 PIN_MODE_INPUT(GPIOH_PIN3) | \
1070 PIN_MODE_INPUT(GPIOH_PIN4) | \
1071 PIN_MODE_INPUT(GPIOH_PIN5) | \
1072 PIN_MODE_INPUT(GPIOH_PIN6) | \
1073 PIN_MODE_INPUT(GPIOH_PIN7) | \
1074 PIN_MODE_INPUT(GPIOH_PIN8) | \
1075 PIN_MODE_INPUT(GPIOH_PIN9) | \
1076 PIN_MODE_INPUT(GPIOH_PIN10) | \
1077 PIN_MODE_INPUT(GPIOH_PIN11) | \
1078 PIN_MODE_INPUT(GPIOH_PIN12) | \
1079 PIN_MODE_INPUT(GPIOH_PIN13) | \
1080 PIN_MODE_INPUT(GPIOH_PIN14) | \
1081 PIN_MODE_INPUT(GPIOH_PIN15))
1082#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
1083 PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
1084 PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
1085 PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
1086 PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
1087 PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
1088 PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
1089 PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
1090 PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
1091 PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
1092 PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
1093 PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
1094 PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
1095 PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
1096 PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
1097 PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
1098#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
1099 PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
1100 PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
1101 PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
1102 PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
1103 PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
1104 PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
1105 PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
1106 PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
1107 PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
1108 PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
1109 PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
1110 PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
1111 PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
1112 PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
1113 PIN_OSPEED_VERYLOW(GPIOH_PIN15))
1114#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
1115 PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
1116 PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
1117 PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
1118 PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
1119 PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
1120 PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
1121 PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
1122 PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
1123 PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
1124 PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
1125 PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
1126 PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
1127 PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
1128 PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
1129 PIN_PUPDR_PULLUP(GPIOH_PIN15))
1130#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
1131 PIN_ODR_HIGH(GPIOH_PIN1) | \
1132 PIN_ODR_HIGH(GPIOH_PIN2) | \
1133 PIN_ODR_HIGH(GPIOH_PIN3) | \
1134 PIN_ODR_HIGH(GPIOH_PIN4) | \
1135 PIN_ODR_HIGH(GPIOH_PIN5) | \
1136 PIN_ODR_HIGH(GPIOH_PIN6) | \
1137 PIN_ODR_HIGH(GPIOH_PIN7) | \
1138 PIN_ODR_HIGH(GPIOH_PIN8) | \
1139 PIN_ODR_HIGH(GPIOH_PIN9) | \
1140 PIN_ODR_HIGH(GPIOH_PIN10) | \
1141 PIN_ODR_HIGH(GPIOH_PIN11) | \
1142 PIN_ODR_HIGH(GPIOH_PIN12) | \
1143 PIN_ODR_HIGH(GPIOH_PIN13) | \
1144 PIN_ODR_HIGH(GPIOH_PIN14) | \
1145 PIN_ODR_HIGH(GPIOH_PIN15))
1146#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
1147 PIN_AFIO_AF(GPIOH_PIN1, 0) | \
1148 PIN_AFIO_AF(GPIOH_PIN2, 0) | \
1149 PIN_AFIO_AF(GPIOH_PIN3, 0) | \
1150 PIN_AFIO_AF(GPIOH_PIN4, 0) | \
1151 PIN_AFIO_AF(GPIOH_PIN5, 0) | \
1152 PIN_AFIO_AF(GPIOH_PIN6, 0) | \
1153 PIN_AFIO_AF(GPIOH_PIN7, 0))
1154#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
1155 PIN_AFIO_AF(GPIOH_PIN9, 0) | \
1156 PIN_AFIO_AF(GPIOH_PIN10, 0) | \
1157 PIN_AFIO_AF(GPIOH_PIN11, 0) | \
1158 PIN_AFIO_AF(GPIOH_PIN12, 0) | \
1159 PIN_AFIO_AF(GPIOH_PIN13, 0) | \
1160 PIN_AFIO_AF(GPIOH_PIN14, 0) | \
1161 PIN_AFIO_AF(GPIOH_PIN15, 0))
1162
1163
1164/*
1165 * USB bus activation macro, required by the USB driver.
1166 */
1167// #define usb_lld_connect_bus(usbp)
1168#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
1169// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
1170/*
1171 * USB bus de-activation macro, required by the USB driver.
1172 */
1173// #define usb_lld_disconnect_bus(usbp)
1174#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL))
1175// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
1176
1177#if !defined(_FROM_ASM_)
1178#ifdef __cplusplus
1179extern "C" {
1180#endif
1181 void boardInit(void);
1182#ifdef __cplusplus
1183}
1184#endif
1185#endif /* _FROM_ASM_ */
1186
1187#endif /* _BOARD_H_ */
diff --git a/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.mk
new file mode 100644
index 000000000..9674228c3
--- /dev/null
+++ b/keyboards/clueboard_60/boards/GENERIC_STM32_F303XC/board.mk
@@ -0,0 +1,5 @@
1# List of all the board related files.
2BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
3
4# Required include directories
5BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/clueboard_60/bootloader_defs.h b/keyboards/clueboard_60/bootloader_defs.h
new file mode 100644
index 000000000..3b0e9d20a
--- /dev/null
+++ b/keyboards/clueboard_60/bootloader_defs.h
@@ -0,0 +1,7 @@
1/* Address for jumping to bootloader on STM32 chips. */
2/* It is chip dependent, the correct number can be looked up here:
3 * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
4 * This also requires a patch to chibios:
5 * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
6 */
7#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/clueboard_60/chconf.h b/keyboards/clueboard_60/chconf.h
new file mode 100644
index 000000000..5a9b83310
--- /dev/null
+++ b/keyboards/clueboard_60/chconf.h
@@ -0,0 +1,520 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/**
18 * @file templates/chconf.h
19 * @brief Configuration file template.
20 * @details A copy of this file must be placed in each project directory, it
21 * contains the application specific kernel settings.
22 *
23 * @addtogroup config
24 * @details Kernel related settings and hooks.
25 * @{
26 */
27
28#ifndef CHCONF_H
29#define CHCONF_H
30
31#define _CHIBIOS_RT_CONF_
32
33/*===========================================================================*/
34/**
35 * @name System timers settings
36 * @{
37 */
38/*===========================================================================*/
39
40/**
41 * @brief System time counter resolution.
42 * @note Allowed values are 16 or 32 bits.
43 */
44#define CH_CFG_ST_RESOLUTION 32
45
46/**
47 * @brief System tick frequency.
48 * @details Frequency of the system timer that drives the system ticks. This
49 * setting also defines the system tick time unit.
50 */
51#define CH_CFG_ST_FREQUENCY 10000
52
53/**
54 * @brief Time delta constant for the tick-less mode.
55 * @note If this value is zero then the system uses the classic
56 * periodic tick. This value represents the minimum number
57 * of ticks that is safe to specify in a timeout directive.
58 * The value one is not valid, timeouts are rounded up to
59 * this value.
60 */
61#define CH_CFG_ST_TIMEDELTA 2
62
63/** @} */
64
65/*===========================================================================*/
66/**
67 * @name Kernel parameters and options
68 * @{
69 */
70/*===========================================================================*/
71
72/**
73 * @brief Round robin interval.
74 * @details This constant is the number of system ticks allowed for the
75 * threads before preemption occurs. Setting this value to zero
76 * disables the preemption for threads with equal priority and the
77 * round robin becomes cooperative. Note that higher priority
78 * threads can still preempt, the kernel is always preemptive.
79 * @note Disabling the round robin preemption makes the kernel more compact
80 * and generally faster.
81 * @note The round robin preemption is not supported in tickless mode and
82 * must be set to zero in that case.
83 */
84#define CH_CFG_TIME_QUANTUM 0
85
86/**
87 * @brief Managed RAM size.
88 * @details Size of the RAM area to be managed by the OS. If set to zero
89 * then the whole available RAM is used. The core memory is made
90 * available to the heap allocator and/or can be used directly through
91 * the simplified core memory allocator.
92 *
93 * @note In order to let the OS manage the whole RAM the linker script must
94 * provide the @p __heap_base__ and @p __heap_end__ symbols.
95 * @note Requires @p CH_CFG_USE_MEMCORE.
96 */
97#define CH_CFG_MEMCORE_SIZE 0
98
99/**
100 * @brief Idle thread automatic spawn suppression.
101 * @details When this option is activated the function @p chSysInit()
102 * does not spawn the idle thread. The application @p main()
103 * function becomes the idle thread and must implement an
104 * infinite loop.
105 */
106#define CH_CFG_NO_IDLE_THREAD FALSE
107
108/** @} */
109
110/*===========================================================================*/
111/**
112 * @name Performance options
113 * @{
114 */
115/*===========================================================================*/
116
117/**
118 * @brief OS optimization.
119 * @details If enabled then time efficient rather than space efficient code
120 * is used when two possible implementations exist.
121 *
122 * @note This is not related to the compiler optimization options.
123 * @note The default is @p TRUE.
124 */
125#define CH_CFG_OPTIMIZE_SPEED TRUE
126
127/** @} */
128
129/*===========================================================================*/
130/**
131 * @name Subsystem options
132 * @{
133 */
134/*===========================================================================*/
135
136/**
137 * @brief Time Measurement APIs.
138 * @details If enabled then the time measurement APIs are included in
139 * the kernel.
140 *
141 * @note The default is @p TRUE.
142 */
143#define CH_CFG_USE_TM TRUE
144
145/**
146 * @brief Threads registry APIs.
147 * @details If enabled then the registry APIs are included in the kernel.
148 *
149 * @note The default is @p TRUE.
150 */
151#define CH_CFG_USE_REGISTRY TRUE
152
153/**
154 * @brief Threads synchronization APIs.
155 * @details If enabled then the @p chThdWait() function is included in
156 * the kernel.
157 *
158 * @note The default is @p TRUE.
159 */
160#define CH_CFG_USE_WAITEXIT TRUE
161
162/**
163 * @brief Semaphores APIs.
164 * @details If enabled then the Semaphores APIs are included in the kernel.
165 *
166 * @note The default is @p TRUE.
167 */
168#define CH_CFG_USE_SEMAPHORES TRUE
169
170/**
171 * @brief Semaphores queuing mode.
172 * @details If enabled then the threads are enqueued on semaphores by
173 * priority rather than in FIFO order.
174 *
175 * @note The default is @p FALSE. Enable this if you have special
176 * requirements.
177 * @note Requires @p CH_CFG_USE_SEMAPHORES.
178 */
179#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
180
181/**
182 * @brief Mutexes APIs.
183 * @details If enabled then the mutexes APIs are included in the kernel.
184 *
185 * @note The default is @p TRUE.
186 */
187#define CH_CFG_USE_MUTEXES TRUE
188
189/**
190 * @brief Enables recursive behavior on mutexes.
191 * @note Recursive mutexes are heavier and have an increased
192 * memory footprint.
193 *
194 * @note The default is @p FALSE.
195 * @note Requires @p CH_CFG_USE_MUTEXES.
196 */
197#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
198
199/**
200 * @brief Conditional Variables APIs.
201 * @details If enabled then the conditional variables APIs are included
202 * in the kernel.
203 *
204 * @note The default is @p TRUE.
205 * @note Requires @p CH_CFG_USE_MUTEXES.
206 */
207#define CH_CFG_USE_CONDVARS TRUE
208
209/**
210 * @brief Conditional Variables APIs with timeout.
211 * @details If enabled then the conditional variables APIs with timeout
212 * specification are included in the kernel.
213 *
214 * @note The default is @p TRUE.
215 * @note Requires @p CH_CFG_USE_CONDVARS.
216 */
217#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
218
219/**
220 * @brief Events Flags APIs.
221 * @details If enabled then the event flags APIs are included in the kernel.
222 *
223 * @note The default is @p TRUE.
224 */
225#define CH_CFG_USE_EVENTS TRUE
226
227/**
228 * @brief Events Flags APIs with timeout.
229 * @details If enabled then the events APIs with timeout specification
230 * are included in the kernel.
231 *
232 * @note The default is @p TRUE.
233 * @note Requires @p CH_CFG_USE_EVENTS.
234 */
235#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
236
237/**
238 * @brief Synchronous Messages APIs.
239 * @details If enabled then the synchronous messages APIs are included
240 * in the kernel.
241 *
242 * @note The default is @p TRUE.
243 */
244#define CH_CFG_USE_MESSAGES TRUE
245
246/**
247 * @brief Synchronous Messages queuing mode.
248 * @details If enabled then messages are served by priority rather than in
249 * FIFO order.
250 *
251 * @note The default is @p FALSE. Enable this if you have special
252 * requirements.
253 * @note Requires @p CH_CFG_USE_MESSAGES.
254 */
255#define CH_CFG_USE_MESSAGES_PRIORITY TRUE
256
257/**
258 * @brief Mailboxes APIs.
259 * @details If enabled then the asynchronous messages (mailboxes) APIs are
260 * included in the kernel.
261 *
262 * @note The default is @p TRUE.
263 * @note Requires @p CH_CFG_USE_SEMAPHORES.
264 */
265#define CH_CFG_USE_MAILBOXES TRUE
266
267/**
268 * @brief Core Memory Manager APIs.
269 * @details If enabled then the core memory manager APIs are included
270 * in the kernel.
271 *
272 * @note The default is @p TRUE.
273 */
274#define CH_CFG_USE_MEMCORE TRUE
275
276/**
277 * @brief Heap Allocator APIs.
278 * @details If enabled then the memory heap allocator APIs are included
279 * in the kernel.
280 *
281 * @note The default is @p TRUE.
282 * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
283 * @p CH_CFG_USE_SEMAPHORES.
284 * @note Mutexes are recommended.
285 */
286#define CH_CFG_USE_HEAP TRUE
287
288/**
289 * @brief Memory Pools Allocator APIs.
290 * @details If enabled then the memory pools allocator APIs are included
291 * in the kernel.
292 *
293 * @note The default is @p TRUE.
294 */
295#define CH_CFG_USE_MEMPOOLS TRUE
296
297/**
298 * @brief Dynamic Threads APIs.
299 * @details If enabled then the dynamic threads creation APIs are included
300 * in the kernel.
301 *
302 * @note The default is @p TRUE.
303 * @note Requires @p CH_CFG_USE_WAITEXIT.
304 * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
305 */
306#define CH_CFG_USE_DYNAMIC TRUE
307
308/** @} */
309
310/*===========================================================================*/
311/**
312 * @name Debug options
313 * @{
314 */
315/*===========================================================================*/
316
317/**
318 * @brief Debug option, kernel statistics.
319 *
320 * @note The default is @p FALSE.
321 */
322#define CH_DBG_STATISTICS FALSE
323
324/**
325 * @brief Debug option, system state check.
326 * @details If enabled the correct call protocol for system APIs is checked
327 * at runtime.
328 *
329 * @note The default is @p FALSE.
330 */
331#define CH_DBG_SYSTEM_STATE_CHECK FALSE
332
333/**
334 * @brief Debug option, parameters checks.
335 * @details If enabled then the checks on the API functions input
336 * parameters are activated.
337 *
338 * @note The default is @p FALSE.
339 */
340#define CH_DBG_ENABLE_CHECKS FALSE
341
342/**
343 * @brief Debug option, consistency checks.
344 * @details If enabled then all the assertions in the kernel code are
345 * activated. This includes consistency checks inside the kernel,
346 * runtime anomalies and port-defined checks.
347 *
348 * @note The default is @p FALSE.
349 */
350#define CH_DBG_ENABLE_ASSERTS FALSE
351
352/**
353 * @brief Debug option, trace buffer.
354 * @details If enabled then the trace buffer is activated.
355 *
356 * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
357 */
358#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
359
360/**
361 * @brief Trace buffer entries.
362 * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
363 * different from @p CH_DBG_TRACE_MASK_DISABLED.
364 */
365#define CH_DBG_TRACE_BUFFER_SIZE 128
366
367/**
368 * @brief Debug option, stack checks.
369 * @details If enabled then a runtime stack check is performed.
370 *
371 * @note The default is @p FALSE.
372 * @note The stack check is performed in a architecture/port dependent way.
373 * It may not be implemented or some ports.
374 * @note The default failure mode is to halt the system with the global
375 * @p panic_msg variable set to @p NULL.
376 */
377#define CH_DBG_ENABLE_STACK_CHECK TRUE
378
379/**
380 * @brief Debug option, stacks initialization.
381 * @details If enabled then the threads working area is filled with a byte
382 * value when a thread is created. This can be useful for the
383 * runtime measurement of the used stack.
384 *
385 * @note The default is @p FALSE.
386 */
387#define CH_DBG_FILL_THREADS FALSE
388
389/**
390 * @brief Debug option, threads profiling.
391 * @details If enabled then a field is added to the @p thread_t structure that
392 * counts the system ticks occurred while executing the thread.
393 *
394 * @note The default is @p FALSE.
395 * @note This debug option is not currently compatible with the
396 * tickless mode.
397 */
398#define CH_DBG_THREADS_PROFILING FALSE
399
400/** @} */
401
402/*===========================================================================*/
403/**
404 * @name Kernel hooks
405 * @{
406 */
407/*===========================================================================*/
408
409/**
410 * @brief Threads descriptor structure extension.
411 * @details User fields added to the end of the @p thread_t structure.
412 */
413#define CH_CFG_THREAD_EXTRA_FIELDS \
414 /* Add threads custom fields here.*/
415
416/**
417 * @brief Threads initialization hook.
418 * @details User initialization code added to the @p chThdInit() API.
419 *
420 * @note It is invoked from within @p chThdInit() and implicitly from all
421 * the threads creation APIs.
422 */
423#define CH_CFG_THREAD_INIT_HOOK(tp) { \
424 /* Add threads initialization code here.*/ \
425}
426
427/**
428 * @brief Threads finalization hook.
429 * @details User finalization code added to the @p chThdExit() API.
430 */
431#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
432 /* Add threads finalization code here.*/ \
433}
434
435/**
436 * @brief Context switch hook.
437 * @details This hook is invoked just before switching between threads.
438 */
439#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
440 /* Context switch code here.*/ \
441}
442
443/**
444 * @brief ISR enter hook.
445 */
446#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
447 /* IRQ prologue code here.*/ \
448}
449
450/**
451 * @brief ISR exit hook.
452 */
453#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
454 /* IRQ epilogue code here.*/ \
455}
456
457/**
458 * @brief Idle thread enter hook.
459 * @note This hook is invoked within a critical zone, no OS functions
460 * should be invoked from here.
461 * @note This macro can be used to activate a power saving mode.
462 */
463#define CH_CFG_IDLE_ENTER_HOOK() { \
464 /* Idle-enter code here.*/ \
465}
466
467/**
468 * @brief Idle thread leave hook.
469 * @note This hook is invoked within a critical zone, no OS functions
470 * should be invoked from here.
471 * @note This macro can be used to deactivate a power saving mode.
472 */
473#define CH_CFG_IDLE_LEAVE_HOOK() { \
474 /* Idle-leave code here.*/ \
475}
476
477/**
478 * @brief Idle Loop hook.
479 * @details This hook is continuously invoked by the idle thread loop.
480 */
481#define CH_CFG_IDLE_LOOP_HOOK() { \
482 /* Idle loop code here.*/ \
483}
484
485/**
486 * @brief System tick event hook.
487 * @details This hook is invoked in the system tick handler immediately
488 * after processing the virtual timers queue.
489 */
490#define CH_CFG_SYSTEM_TICK_HOOK() { \
491 /* System tick event code here.*/ \
492}
493
494/**
495 * @brief System halt hook.
496 * @details This hook is invoked in case to a system halting error before
497 * the system is halted.
498 */
499#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
500 /* System halt code here.*/ \
501}
502
503/**
504 * @brief Trace hook.
505 * @details This hook is invoked each time a new record is written in the
506 * trace buffer.
507 */
508#define CH_CFG_TRACE_HOOK(tep) { \
509 /* Trace code here.*/ \
510}
511
512/** @} */
513
514/*===========================================================================*/
515/* Port-specific settings (override port settings defaulted in chcore.h). */
516/*===========================================================================*/
517
518#endif /* CHCONF_H */
519
520/** @} */
diff --git a/keyboards/clueboard_60/clueboard_60.c b/keyboards/clueboard_60/clueboard_60.c
new file mode 100644
index 000000000..a0b74db72
--- /dev/null
+++ b/keyboards/clueboard_60/clueboard_60.c
@@ -0,0 +1,24 @@
1/* Copyright 2017 skully <skullydazed@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "clueboard_60.h"
17
18void matrix_init_kb(void) {
19
20}
21
22void matrix_scan_kb(void) {
23
24}
diff --git a/keyboards/clueboard_60/clueboard_60.h b/keyboards/clueboard_60/clueboard_60.h
new file mode 100644
index 000000000..ffff18f9e
--- /dev/null
+++ b/keyboards/clueboard_60/clueboard_60.h
@@ -0,0 +1,105 @@
1/* Copyright 2017 skully <skullydazed@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#ifndef CLUEBOARD60_H
17#define CLUEBOARD60_H
18
19#include "quantum.h"
20
21/*
22 * These are shortcuts to help you work with the various layout options. If your
23 * keymap works with one of the LAYOUT_...() macros you are encouraged to use that
24 * and to contribute your keymap to the corresponding layout in
25 * `qmk_firmware/layouts/community`.
26 */
27
28/* The fully-featured KEYMAP() that has every single key available in the matrix.
29 */
30#define KEYMAP(\
31 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
32 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
33 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
34 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
35 k40, k41, k42, k47, k4a, k4b, k4c, k4e \
36) { \
37 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, }, \
38 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
39 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e, }, \
40 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, k3e, }, \
41 { k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
42}
43
44/* A layout that matches the Apple Extended Keyboard's main area. No split keys,
45 * 3 mods on either side of the spacebar.
46 */
47#define KEYMAP_AEK(\
48 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
49 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
50 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
51 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
52 k40, k41, k42, k47, k4b, k4c, k4e \
53) { \
54 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
55 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
56 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
57 { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
58 { k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k4b, k4c, KC_NO, k4e, }, \
59}
60
61/* Standard 60% ANSI layout */
62#define LAYOUT_60_ansi(\
63 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
64 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
65 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
66 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
67 k40, k41, k42, k47, k4a, k4b, k4c, k4e \
68) { \
69 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
70 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
71 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
72 { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
73 { k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
74}
75
76/* Standard 60% ISO layout */
77#define LAYOUT_60_iso(\
78 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
79 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
80 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
81 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
82 k40, k41, k42, k47, k4a, k4b, k4c, k4e \
83) { \
84 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e, }, \
85 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, KC_NO, }, \
86 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e, }, \
87 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, KC_NO, }, \
88 { k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
89}
90
91/* Split Backspace and Right Shift ANSI layout. */
92#define LAYOUT_60_ansi_split_bs_rshift(\
93 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
94 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
95 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2e, \
96 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
97 k40, k41, k42, k47, k4a, k4b, k4c, k4e \
98) { \
99 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, }, \
100 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, }, \
101 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, KC_NO, k2e, }, \
102 { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO, k3e, }, \
103 { k40, k41, k42, KC_NO, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, k4b, k4c, KC_NO, k4e, }, \
104}
105#endif
diff --git a/keyboards/clueboard_60/config.h b/keyboards/clueboard_60/config.h
new file mode 100644
index 000000000..333698a08
--- /dev/null
+++ b/keyboards/clueboard_60/config.h
@@ -0,0 +1,133 @@
1/*
2 * Copyright 2017 skully <skullydazed@gmail.com>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xC1ED
23#define PRODUCT_ID 0x2350
24#define DEVICE_VER 0x0001
25#define MANUFACTURER "Clueboard"
26#define USBSTR_MANUFACTURER 'C', '\x00', 'l', '\x00', 'u', '\x00', 'e', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00'
27#define PRODUCT "Clueboard60"
28#define USBSTR_PRODUCT 'C', '\x00', 'l', '\x00', 'u', '\x00', 'e', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', ' ', '\x00', '6', '\x00', '0', '\x00', '%', '\x00'
29#define DESCRIPTION "Clueboard 60%"
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 15
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45/* Note: These are not used for arm boards. They're here purely as documentation.
46 * #define MATRIX_ROW_PINS { PB0, PB1, PB2, PA15, PA10 }
47 * #define MATRIX_COL_PINS { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC14, PC15, PC13, PB5, PB6 }
48 * #define UNUSED_PINS
49 */
50
51/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
52#define DEBOUNCE 6
53
54/* Prevent modifiers from being stuck on after layer changes. */
55#define PREVENT_STUCK_MODIFIERS
56
57/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
58//#define LOCKING_SUPPORT_ENABLE
59/* Locking resynchronize hack */
60//#define LOCKING_RESYNC_ENABLE
61
62/*
63 * Force NKRO
64 *
65 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
66 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
67 * makefile for this to work.)
68 *
69 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
70 * until the next keyboard reset.
71 *
72 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
73 * fully operational during normal computer usage.
74 *
75 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
76 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
77 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
78 * power-up.
79 *
80 */
81//#define FORCE_NKRO
82
83/* key combination for magic key command */
84#define IS_COMMAND() ( \
85 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
86)
87
88/*
89 * Feature disable options
90 * These options are also useful to firmware size reduction.
91 */
92
93/* disable debug print */
94//#define NO_DEBUG
95
96/* disable print */
97//#define NO_PRINT
98
99/* disable action features */
100//#define NO_ACTION_LAYER
101//#define NO_ACTION_TAPPING
102//#define NO_ACTION_ONESHOT
103//#define NO_ACTION_MACRO
104//#define NO_ACTION_FUNCTION
105
106/*
107 * MIDI options
108 */
109
110/* Prevent use of disabled MIDI features in the keymap */
111//#define MIDI_ENABLE_STRICT 1
112
113/* enable basic MIDI features:
114 - MIDI notes can be sent when in Music mode is on
115*/
116//#define MIDI_BASIC
117
118/* enable advanced MIDI features:
119 - MIDI notes can be added to the keymap
120 - Octave shift and transpose
121 - Virtual sustain, portamento, and modulation wheel
122 - etc.
123*/
124//#define MIDI_ADVANCED
125
126/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
127//#define MIDI_TONE_KEYCODE_OCTAVES 1
128
129#endif
130
131 /* Backlight configuration
132 */
133#define BACKLIGHT_LEVELS 1
diff --git a/keyboards/clueboard_60/halconf.h b/keyboards/clueboard_60/halconf.h
new file mode 100644
index 000000000..254470cbd
--- /dev/null
+++ b/keyboards/clueboard_60/halconf.h
@@ -0,0 +1,388 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/**
18 * @file templates/halconf.h
19 * @brief HAL configuration header.
20 * @details HAL configuration file, this file allows to enable or disable the
21 * various device drivers from your application. You may also use
22 * this file in order to override the device drivers default settings.
23 *
24 * @addtogroup HAL_CONF
25 * @{
26 */
27
28#ifndef HALCONF_H
29#define HALCONF_H
30
31#include "mcuconf.h"
32
33/**
34 * @brief Enables the PAL subsystem.
35 */
36#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
37#define HAL_USE_PAL TRUE
38#endif
39
40/**
41 * @brief Enables the ADC subsystem.
42 */
43#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
44#define HAL_USE_ADC FALSE
45#endif
46
47/**
48 * @brief Enables the CAN subsystem.
49 */
50#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
51#define HAL_USE_CAN FALSE
52#endif
53
54/**
55 * @brief Enables the DAC subsystem.
56 */
57#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
58#define HAL_USE_DAC TRUE
59#endif
60
61/**
62 * @brief Enables the EXT subsystem.
63 */
64#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
65#define HAL_USE_EXT FALSE
66#endif
67
68/**
69 * @brief Enables the GPT subsystem.
70 */
71#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
72#define HAL_USE_GPT TRUE
73#endif
74
75/**
76 * @brief Enables the I2C subsystem.
77 */
78#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
79#define HAL_USE_I2C FALSE
80#endif
81
82/**
83 * @brief Enables the I2S subsystem.
84 */
85#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
86#define HAL_USE_I2S FALSE
87#endif
88
89/**
90 * @brief Enables the ICU subsystem.
91 */
92#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
93#define HAL_USE_ICU FALSE
94#endif
95
96/**
97 * @brief Enables the MAC subsystem.
98 */
99#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
100#define HAL_USE_MAC FALSE
101#endif
102
103/**
104 * @brief Enables the MMC_SPI subsystem.
105 */
106#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
107#define HAL_USE_MMC_SPI FALSE
108#endif
109
110/**
111 * @brief Enables the PWM subsystem.
112 */
113#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
114#define HAL_USE_PWM FALSE
115#endif
116
117/**
118 * @brief Enables the QSPI subsystem.
119 */
120#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
121#define HAL_USE_QSPI FALSE
122#endif
123
124/**
125 * @brief Enables the RTC subsystem.
126 */
127#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
128#define HAL_USE_RTC FALSE
129#endif
130
131/**
132 * @brief Enables the SDC subsystem.
133 */
134#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
135#define HAL_USE_SDC FALSE
136#endif
137
138/**
139 * @brief Enables the SERIAL subsystem.
140 */
141#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
142#define HAL_USE_SERIAL FALSE
143#endif
144
145/**
146 * @brief Enables the SERIAL over USB subsystem.
147 */
148#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
149#define HAL_USE_SERIAL_USB TRUE
150#endif
151
152/**
153 * @brief Enables the SPI subsystem.
154 */
155#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
156#define HAL_USE_SPI FALSE
157#endif
158
159/**
160 * @brief Enables the UART subsystem.
161 */
162#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
163#define HAL_USE_UART FALSE
164#endif
165
166/**
167 * @brief Enables the USB subsystem.
168 */
169#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
170#define HAL_USE_USB TRUE
171#endif
172
173/**
174 * @brief Enables the WDG subsystem.
175 */
176#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
177#define HAL_USE_WDG FALSE
178#endif
179
180/*===========================================================================*/
181/* ADC driver related settings. */
182/*===========================================================================*/
183
184/**
185 * @brief Enables synchronous APIs.
186 * @note Disabling this option saves both code and data space.
187 */
188#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
189#define ADC_USE_WAIT TRUE
190#endif
191
192/**
193 * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
194 * @note Disabling this option saves both code and data space.
195 */
196#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
197#define ADC_USE_MUTUAL_EXCLUSION TRUE
198#endif
199
200/*===========================================================================*/
201/* CAN driver related settings. */
202/*===========================================================================*/
203
204/**
205 * @brief Sleep mode related APIs inclusion switch.
206 */
207#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
208#define CAN_USE_SLEEP_MODE TRUE
209#endif
210
211/*===========================================================================*/
212/* I2C driver related settings. */
213/*===========================================================================*/
214
215/**
216 * @brief Enables the mutual exclusion APIs on the I2C bus.
217 */
218#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
219#define I2C_USE_MUTUAL_EXCLUSION TRUE
220#endif
221
222/*===========================================================================*/
223/* MAC driver related settings. */
224/*===========================================================================*/
225
226/**
227 * @brief Enables an event sources for incoming packets.
228 */
229#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
230#define MAC_USE_ZERO_COPY FALSE
231#endif
232
233/**
234 * @brief Enables an event sources for incoming packets.
235 */
236#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
237#define MAC_USE_EVENTS TRUE
238#endif
239
240/*===========================================================================*/
241/* MMC_SPI driver related settings. */
242/*===========================================================================*/
243
244/**
245 * @brief Delays insertions.
246 * @details If enabled this options inserts delays into the MMC waiting
247 * routines releasing some extra CPU time for the threads with
248 * lower priority, this may slow down the driver a bit however.
249 * This option is recommended also if the SPI driver does not
250 * use a DMA channel and heavily loads the CPU.
251 */
252#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
253#define MMC_NICE_WAITING TRUE
254#endif
255
256/*===========================================================================*/
257/* SDC driver related settings. */
258/*===========================================================================*/
259
260/**
261 * @brief Number of initialization attempts before rejecting the card.
262 * @note Attempts are performed at 10mS intervals.
263 */
264#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
265#define SDC_INIT_RETRY 100
266#endif
267
268/**
269 * @brief Include support for MMC cards.
270 * @note MMC support is not yet implemented so this option must be kept
271 * at @p FALSE.
272 */
273#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
274#define SDC_MMC_SUPPORT FALSE
275#endif
276
277/**
278 * @brief Delays insertions.
279 * @details If enabled this options inserts delays into the MMC waiting
280 * routines releasing some extra CPU time for the threads with
281 * lower priority, this may slow down the driver a bit however.
282 */
283#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
284#define SDC_NICE_WAITING TRUE
285#endif
286
287/*===========================================================================*/
288/* SERIAL driver related settings. */
289/*===========================================================================*/
290
291/**
292 * @brief Default bit rate.
293 * @details Configuration parameter, this is the baud rate selected for the
294 * default configuration.
295 */
296#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
297#define SERIAL_DEFAULT_BITRATE 38400
298#endif
299
300/**
301 * @brief Serial buffers size.
302 * @details Configuration parameter, you can change the depth of the queue
303 * buffers depending on the requirements of your application.
304 * @note The default is 16 bytes for both the transmission and receive
305 * buffers.
306 */
307#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
308#define SERIAL_BUFFERS_SIZE 16
309#endif
310
311/*===========================================================================*/
312/* SERIAL_USB driver related setting. */
313/*===========================================================================*/
314
315/**
316 * @brief Serial over USB buffers size.
317 * @details Configuration parameter, the buffer size must be a multiple of
318 * the USB data endpoint maximum packet size.
319 * @note The default is 256 bytes for both the transmission and receive
320 * buffers.
321 */
322#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
323#define SERIAL_USB_BUFFERS_SIZE 256
324#endif
325
326/**
327 * @brief Serial over USB number of buffers.
328 * @note The default is 2 buffers.
329 */
330#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
331#define SERIAL_USB_BUFFERS_NUMBER 2
332#endif
333
334/*===========================================================================*/
335/* SPI driver related settings. */
336/*===========================================================================*/
337
338/**
339 * @brief Enables synchronous APIs.
340 * @note Disabling this option saves both code and data space.
341 */
342#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
343#define SPI_USE_WAIT TRUE
344#endif
345
346/**
347 * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
348 * @note Disabling this option saves both code and data space.
349 */
350#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
351#define SPI_USE_MUTUAL_EXCLUSION TRUE
352#endif
353
354/*===========================================================================*/
355/* UART driver related settings. */
356/*===========================================================================*/
357
358/**
359 * @brief Enables synchronous APIs.
360 * @note Disabling this option saves both code and data space.
361 */
362#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
363#define UART_USE_WAIT FALSE
364#endif
365
366/**
367 * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
368 * @note Disabling this option saves both code and data space.
369 */
370#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
371#define UART_USE_MUTUAL_EXCLUSION FALSE
372#endif
373
374/*===========================================================================*/
375/* USB driver related settings. */
376/*===========================================================================*/
377
378/**
379 * @brief Enables synchronous APIs.
380 * @note Disabling this option saves both code and data space.
381 */
382#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
383#define USB_USE_WAIT TRUE
384#endif
385
386#endif /* HALCONF_H */
387
388/** @} */
diff --git a/keyboards/clueboard_60/keymaps/default/keymap.c b/keyboards/clueboard_60/keymaps/default/keymap.c
new file mode 100644
index 000000000..e662057f0
--- /dev/null
+++ b/keyboards/clueboard_60/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
1#include "clueboard_60.h"
2
3#define _______ KC_TRNS
4
5enum keyboard_layers {
6 _BL,
7 _FL,
8 _CL
9};
10
11const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Layer 0: Default Layer
13 * ,-----------------------------------------------------------.
14 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
15 * |-----------------------------------------------------------|
16 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
17 * |-----------------------------------------------------------|
18 * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
19 * |-----------------------------------------------------------|
20 * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
21 * |-----------------------------------------------------------'
22 * |Ctrl |Gui|Alt | Space |Alt |Gui|Fn |Ctrl |
23 * `-----------------------------------------------------------'
24 */
25 [_BL] = KEYMAP(
26 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_GRV, KC_BSPC,\
27 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, \
28 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, \
29 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_BSLS, \
30 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
31 [_FL] = KEYMAP(
32 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______,\
33 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
34 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
35 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
36 _______, _______, _______, _______, _______, _______, MO(_FL), _______),
37 [_CL] = KEYMAP(
38 BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
39 _______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
40 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
41 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
42 _______, _______, _______, _______, _______, _______, MO(_FL), _______)
43};
diff --git a/keyboards/clueboard_60/keymaps/default/readme.md b/keyboards/clueboard_60/keymaps/default/readme.md
new file mode 100644
index 000000000..32d4bfba6
--- /dev/null
+++ b/keyboards/clueboard_60/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for clueboard 60%
diff --git a/keyboards/clueboard_60/keymaps/default_aek/keymap.c b/keyboards/clueboard_60/keymaps/default_aek/keymap.c
new file mode 100644
index 000000000..d2d3db772
--- /dev/null
+++ b/keyboards/clueboard_60/keymaps/default_aek/keymap.c
@@ -0,0 +1,43 @@
1#include "clueboard_60.h"
2
3#define _______ KC_TRNS
4
5enum keyboard_layers {
6 _BL,
7 _FL,
8 _CL
9};
10
11const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12 /* Layer 0: Default Layer
13 * ,-----------------------------------------------------------.
14 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BkSp|
15 * |-----------------------------------------------------------|
16 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
17 * |-----------------------------------------------------------|
18 * |Capslk| A| S| D| F| G| H| J| K| L| ;| '| Enter|
19 * |-----------------------------------------------------------|
20 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift|
21 * |-----------------------------------------------------------'
22 * |Ctrl |Gui|Alt | Space |Alt|Fn |Ctrl |
23 * `-----------------------------------------------------------'
24 */
25 [_BL] = KEYMAP_AEK(
26 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, \
27 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,\
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
30 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL),
31 [_FL] = KEYMAP_AEK(
32 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
33 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
34 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
35 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
36 _______, _______, _______, _______, _______, MO(_FL), _______),
37 [_CL] = KEYMAP_AEK(
38 BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
39 _______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,\
40 _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
41 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
42 _______, _______, _______, _______, _______, MO(_FL), _______)
43};
diff --git a/keyboards/clueboard_60/keymaps/default_aek/readme.md b/keyboards/clueboard_60/keymaps/default_aek/readme.md
new file mode 100644
index 000000000..cdec24160
--- /dev/null
+++ b/keyboards/clueboard_60/keymaps/default_aek/readme.md
@@ -0,0 +1 @@
# The default keymap for clueboard 60%, optimized for the AEK layout.
diff --git a/keyboards/clueboard_60/led.c b/keyboards/clueboard_60/led.c
new file mode 100644
index 000000000..fdf244ad5
--- /dev/null
+++ b/keyboards/clueboard_60/led.c
@@ -0,0 +1,58 @@
1/*
2 * Copyright 2017 skully <skullydazed@gmail.com>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include "hal.h"
19#include "backlight.h"
20#include "led.h"
21#include "printf.h"
22
23void backlight_init_ports(void) {
24 printf("backlight_init_ports()\n");
25 #ifdef BACKLIGHT_ENABLE
26 palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
27 palSetPad(GPIOB, 8);
28 #endif
29}
30
31void backlight_set(uint8_t level) {
32 printf("backlight_set(%d)\n", level);
33 #ifdef BACKLIGHT_ENABLE
34 if (level == 0) {
35 // Turn backlight off
36 palSetPad(GPIOB, 8);
37 } else {
38 // Turn backlight on
39 palClearPad(GPIOB, 8);
40 }
41 #endif
42}
43
44void led_init_ports() {
45 printf("led_init_ports()\n");
46 palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL);
47}
48
49void led_set_kb(uint8_t usb_led) {
50 printf("led_init_ports()\n");
51 if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
52 // Turn capslock on
53 palSetPad(GPIOB, 7);
54 } else {
55 // Turn capslock off
56 palClearPad(GPIOB, 7);
57 }
58}
diff --git a/keyboards/clueboard_60/matrix.c b/keyboards/clueboard_60/matrix.c
new file mode 100644
index 000000000..76a15ca7e
--- /dev/null
+++ b/keyboards/clueboard_60/matrix.c
@@ -0,0 +1,177 @@
1#include <stdint.h>
2#include <stdbool.h>
3#include <string.h>
4#include "hal.h"
5#include "timer.h"
6#include "wait.h"
7#include "printf.h"
8#include "backlight.h"
9#include "matrix.h"
10
11
12/* Clueboard 60%
13 *
14 * Column pins are input with internal pull-down.
15 * Row pins are output and strobe with high.
16 * Key is high or 1 when it turns on.
17 *
18 * col: { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC15, PC14, PC13, PB5, PB6 }
19 * row: { PB0, PB1, PB2, PA15, PA10 }
20 */
21/* matrix state(1:on, 0:off) */
22static matrix_row_t matrix[MATRIX_ROWS];
23static matrix_row_t matrix_debouncing[MATRIX_COLS];
24static bool debouncing = false;
25static uint16_t debouncing_time = 0;
26
27__attribute__ ((weak))
28void matrix_init_user(void) {}
29
30__attribute__ ((weak))
31void matrix_scan_user(void) {}
32
33__attribute__ ((weak))
34void matrix_init_kb(void) {
35 matrix_init_user();
36}
37
38__attribute__ ((weak))
39void matrix_scan_kb(void) {
40 matrix_scan_user();
41}
42
43void matrix_init(void) {
44 printf("matrix init\n");
45 //debug_matrix = true;
46
47 /* Column(sense) */
48 palSetPadMode(GPIOA, 2, PAL_MODE_OUTPUT_PUSHPULL);
49 palSetPadMode(GPIOA, 3, PAL_MODE_OUTPUT_PUSHPULL);
50 palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL);
51 palSetPadMode(GPIOB, 14, PAL_MODE_OUTPUT_PUSHPULL);
52 palSetPadMode(GPIOB, 15, PAL_MODE_OUTPUT_PUSHPULL);
53 palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL);
54 palSetPadMode(GPIOA, 9, PAL_MODE_OUTPUT_PUSHPULL);
55 palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL);
56 palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL);
57 palSetPadMode(GPIOB, 4, PAL_MODE_OUTPUT_PUSHPULL);
58 palSetPadMode(GPIOC, 15, PAL_MODE_OUTPUT_PUSHPULL);
59 palSetPadMode(GPIOC, 14, PAL_MODE_OUTPUT_PUSHPULL);
60 palSetPadMode(GPIOC, 13, PAL_MODE_OUTPUT_PUSHPULL);
61 palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL);
62 palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL);
63
64 /* Row(strobe) */
65 palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_PULLDOWN);
66 palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_PULLDOWN);
67 palSetPadMode(GPIOB, 2, PAL_MODE_INPUT_PULLDOWN);
68 palSetPadMode(GPIOA, 15, PAL_MODE_INPUT_PULLDOWN);
69 palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLDOWN);
70
71 memset(matrix, 0, MATRIX_ROWS);
72 memset(matrix_debouncing, 0, MATRIX_COLS);
73
74 /* Setup capslock */
75 // palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL);
76 // palClearPad(GPIOB, 7);
77
78 matrix_init_quantum();
79}
80
81uint8_t matrix_scan(void) {
82 for (int col = 0; col < MATRIX_COLS; col++) {
83 matrix_row_t data = 0;
84
85 // strobe col { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC14, PC15, PC13, PB5, PB6 }
86 switch (col) {
87 case 0: palSetPad(GPIOA, 2); break;
88 case 1: palSetPad(GPIOA, 3); break;
89 case 2: palSetPad(GPIOA, 6); break;
90 case 3: palSetPad(GPIOB, 14); break;
91 case 4: palSetPad(GPIOB, 15); break;
92 case 5: palSetPad(GPIOA, 8); break;
93 case 6: palSetPad(GPIOA, 9); break;
94 case 7: palSetPad(GPIOA, 7); break;
95 case 8: palSetPad(GPIOB, 3); break;
96 case 9: palSetPad(GPIOB, 4); break;
97 case 10: palSetPad(GPIOC, 15); break;
98 case 11: palSetPad(GPIOC, 14); break;
99 case 12: palSetPad(GPIOC, 13); break;
100 case 13: palSetPad(GPIOB, 5); break;
101 case 14: palSetPad(GPIOB, 6); break;
102 }
103
104 // need wait to settle pin state
105 wait_us(20);
106
107 // read row data { PB0, PB1, PB2, PA15, PA10 }
108 data = (
109 (palReadPad(GPIOB, 0) << 0 ) |
110 (palReadPad(GPIOB, 1) << 1 ) |
111 (palReadPad(GPIOB, 2) << 2 ) |
112 (palReadPad(GPIOA, 15) << 3 ) |
113 (palReadPad(GPIOA, 10) << 4 )
114 );
115
116 // unstrobe col { PA2, PA3, PA6, PB14, PB15, PA8, PA9, PA7, PB3, PB4, PC15, PC14, PC13, PB5, PB6 }
117 switch (col) {
118 case 0: palClearPad(GPIOA, 2); break;
119 case 1: palClearPad(GPIOA, 3); break;
120 case 2: palClearPad(GPIOA, 6); break;
121 case 3: palClearPad(GPIOB, 14); break;
122 case 4: palClearPad(GPIOB, 15); break;
123 case 5: palClearPad(GPIOA, 8); break;
124 case 6: palClearPad(GPIOA, 9); break;
125 case 7: palClearPad(GPIOA, 7); break;
126 case 8: palClearPad(GPIOB, 3); break;
127 case 9: palClearPad(GPIOB, 4); break;
128 case 10: palClearPad(GPIOC, 15); break;
129 case 11: palClearPad(GPIOC, 14); break;
130 case 12: palClearPad(GPIOC, 13); break;
131 case 13: palClearPad(GPIOB, 5); break;
132 case 14: palClearPad(GPIOB, 6); break;
133 }
134
135 if (matrix_debouncing[col] != data) {
136 matrix_debouncing[col] = data;
137 debouncing = true;
138 debouncing_time = timer_read();
139 }
140 }
141 if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
142 for (int row = 0; row < MATRIX_ROWS; row++) {
143 matrix[row] = 0;
144 for (int col = 0; col < MATRIX_COLS; col++) {
145 matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col);
146 }
147 }
148 debouncing = false;
149 }
150
151 matrix_scan_quantum();
152
153 return 1;
154}
155
156bool matrix_is_on(uint8_t row, uint8_t col) {
157 return (matrix[row] & (1<<col));
158}
159
160matrix_row_t matrix_get_row(uint8_t row) {
161 return matrix[row];
162}
163
164void matrix_print(void) {
165 printf("\nr/c 01234567\n");
166 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
167 printf("%X0: ", row);
168 matrix_row_t data = matrix_get_row(row);
169 for (int col = 0; col < MATRIX_COLS; col++) {
170 if (data & (1<<col))
171 printf("1");
172 else
173 printf("0");
174 }
175 printf("\n");
176 }
177}
diff --git a/keyboards/clueboard_60/mcuconf.h b/keyboards/clueboard_60/mcuconf.h
new file mode 100644
index 000000000..94cb540ec
--- /dev/null
+++ b/keyboards/clueboard_60/mcuconf.h
@@ -0,0 +1,257 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef MCUCONF_H
18#define MCUCONF_H
19
20/*
21 * STM32F3xx drivers configuration.
22 * The following settings override the default settings present in
23 * the various device driver implementation headers.
24 * Note that the settings for each driver only have effect if the whole
25 * driver is enabled in halconf.h.
26 *
27 * IRQ priorities:
28 * 15...0 Lowest...Highest.
29 *
30 * DMA priorities:
31 * 0...3 Lowest...Highest.
32 */
33
34#define STM32F3xx_MCUCONF
35
36/*
37 * HAL driver system settings.
38 */
39#define STM32_NO_INIT FALSE
40#define STM32_PVD_ENABLE FALSE
41#define STM32_PLS STM32_PLS_LEV0
42#define STM32_HSI_ENABLED TRUE
43#define STM32_LSI_ENABLED TRUE
44#define STM32_HSE_ENABLED TRUE
45#define STM32_LSE_ENABLED FALSE
46#define STM32_SW STM32_SW_PLL
47#define STM32_PLLSRC STM32_PLLSRC_HSE
48#define STM32_PREDIV_VALUE 1
49#define STM32_PLLMUL_VALUE 9
50#define STM32_HPRE STM32_HPRE_DIV1
51#define STM32_PPRE1 STM32_PPRE1_DIV2
52#define STM32_PPRE2 STM32_PPRE2_DIV2
53#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
54#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
55#define STM32_ADC34PRES STM32_ADC34PRES_DIV1
56#define STM32_USART1SW STM32_USART1SW_PCLK
57#define STM32_USART2SW STM32_USART2SW_PCLK
58#define STM32_USART3SW STM32_USART3SW_PCLK
59#define STM32_UART4SW STM32_UART4SW_PCLK
60#define STM32_UART5SW STM32_UART5SW_PCLK
61#define STM32_I2C1SW STM32_I2C1SW_SYSCLK
62#define STM32_I2C2SW STM32_I2C2SW_SYSCLK
63#define STM32_TIM1SW STM32_TIM1SW_PCLK2
64#define STM32_TIM8SW STM32_TIM8SW_PCLK2
65#define STM32_RTCSEL STM32_RTCSEL_LSI
66#define STM32_USB_CLOCK_REQUIRED TRUE
67#define STM32_USBPRE STM32_USBPRE_DIV1P5
68
69#undef STM32_HSE_BYPASS
70// #error "oh no"
71// #endif
72
73/*
74 * ADC driver system settings.
75 */
76#define STM32_ADC_DUAL_MODE FALSE
77#define STM32_ADC_COMPACT_SAMPLES FALSE
78#define STM32_ADC_USE_ADC1 FALSE
79#define STM32_ADC_USE_ADC2 FALSE
80#define STM32_ADC_USE_ADC3 FALSE
81#define STM32_ADC_USE_ADC4 FALSE
82#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
83#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
84#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
85#define STM32_ADC_ADC4_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
86#define STM32_ADC_ADC1_DMA_PRIORITY 2
87#define STM32_ADC_ADC2_DMA_PRIORITY 2
88#define STM32_ADC_ADC3_DMA_PRIORITY 2
89#define STM32_ADC_ADC4_DMA_PRIORITY 2
90#define STM32_ADC_ADC12_IRQ_PRIORITY 5
91#define STM32_ADC_ADC3_IRQ_PRIORITY 5
92#define STM32_ADC_ADC4_IRQ_PRIORITY 5
93#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
94#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 5
95#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 5
96#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY 5
97#define STM32_ADC_ADC12_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
98#define STM32_ADC_ADC34_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
99
100/*
101 * CAN driver system settings.
102 */
103#define STM32_CAN_USE_CAN1 FALSE
104#define STM32_CAN_CAN1_IRQ_PRIORITY 11
105
106/*
107 * DAC driver system settings.
108 */
109#define STM32_DAC_DUAL_MODE FALSE
110#define STM32_DAC_USE_DAC1_CH1 TRUE
111#define STM32_DAC_USE_DAC1_CH2 TRUE
112#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
113#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
114#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
115#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
116
117/*
118 * EXT driver system settings.
119 */
120#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
121#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
122#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
123#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
124#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
125#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
126#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
127#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
128#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
129#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
130#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
131#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
132#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
133#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6
134#define STM32_EXT_EXTI33_IRQ_PRIORITY 6
135
136/*
137 * GPT driver system settings.
138 */
139#define STM32_GPT_USE_TIM1 FALSE
140#define STM32_GPT_USE_TIM2 FALSE
141#define STM32_GPT_USE_TIM3 FALSE
142#define STM32_GPT_USE_TIM4 FALSE
143#define STM32_GPT_USE_TIM6 TRUE
144#define STM32_GPT_USE_TIM7 TRUE
145#define STM32_GPT_USE_TIM8 TRUE
146#define STM32_GPT_TIM1_IRQ_PRIORITY 7
147#define STM32_GPT_TIM2_IRQ_PRIORITY 7
148#define STM32_GPT_TIM3_IRQ_PRIORITY 7
149#define STM32_GPT_TIM4_IRQ_PRIORITY 7
150#define STM32_GPT_TIM6_IRQ_PRIORITY 7
151#define STM32_GPT_TIM7_IRQ_PRIORITY 7
152#define STM32_GPT_TIM8_IRQ_PRIORITY 7
153
154/*
155 * I2C driver system settings.
156 */
157#define STM32_I2C_USE_I2C1 FALSE
158#define STM32_I2C_USE_I2C2 FALSE
159#define STM32_I2C_BUSY_TIMEOUT 50
160#define STM32_I2C_I2C1_IRQ_PRIORITY 10
161#define STM32_I2C_I2C2_IRQ_PRIORITY 10
162#define STM32_I2C_USE_DMA TRUE
163#define STM32_I2C_I2C1_DMA_PRIORITY 1
164#define STM32_I2C_I2C2_DMA_PRIORITY 1
165#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
166
167/*
168 * ICU driver system settings.
169 */
170#define STM32_ICU_USE_TIM1 FALSE
171#define STM32_ICU_USE_TIM2 FALSE
172#define STM32_ICU_USE_TIM3 FALSE
173#define STM32_ICU_USE_TIM4 FALSE
174#define STM32_ICU_USE_TIM8 FALSE
175#define STM32_ICU_TIM1_IRQ_PRIORITY 7
176#define STM32_ICU_TIM2_IRQ_PRIORITY 7
177#define STM32_ICU_TIM3_IRQ_PRIORITY 7
178#define STM32_ICU_TIM4_IRQ_PRIORITY 7
179#define STM32_ICU_TIM8_IRQ_PRIORITY 7
180
181/*
182 * PWM driver system settings.
183 */
184#define STM32_PWM_USE_ADVANCED FALSE
185#define STM32_PWM_USE_TIM1 FALSE
186#define STM32_PWM_USE_TIM2 FALSE
187#define STM32_PWM_USE_TIM3 FALSE
188#define STM32_PWM_USE_TIM4 FALSE
189#define STM32_PWM_USE_TIM8 FALSE
190#define STM32_PWM_TIM1_IRQ_PRIORITY 7
191#define STM32_PWM_TIM2_IRQ_PRIORITY 7
192#define STM32_PWM_TIM3_IRQ_PRIORITY 7
193#define STM32_PWM_TIM4_IRQ_PRIORITY 7
194#define STM32_PWM_TIM8_IRQ_PRIORITY 7
195
196/*
197 * SERIAL driver system settings.
198 */
199#define STM32_SERIAL_USE_USART1 FALSE
200#define STM32_SERIAL_USE_USART2 FALSE
201#define STM32_SERIAL_USE_USART3 FALSE
202#define STM32_SERIAL_USE_UART4 FALSE
203#define STM32_SERIAL_USE_UART5 FALSE
204#define STM32_SERIAL_USART1_PRIORITY 12
205#define STM32_SERIAL_USART2_PRIORITY 12
206#define STM32_SERIAL_USART3_PRIORITY 12
207#define STM32_SERIAL_UART4_PRIORITY 12
208#define STM32_SERIAL_UART5_PRIORITY 12
209
210/*
211 * SPI driver system settings.
212 */
213#define STM32_SPI_USE_SPI1 FALSE
214#define STM32_SPI_USE_SPI2 FALSE
215#define STM32_SPI_USE_SPI3 FALSE
216#define STM32_SPI_SPI1_DMA_PRIORITY 1
217#define STM32_SPI_SPI2_DMA_PRIORITY 1
218#define STM32_SPI_SPI3_DMA_PRIORITY 1
219#define STM32_SPI_SPI1_IRQ_PRIORITY 10
220#define STM32_SPI_SPI2_IRQ_PRIORITY 10
221#define STM32_SPI_SPI3_IRQ_PRIORITY 10
222#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
223
224/*
225 * ST driver system settings.
226 */
227#define STM32_ST_IRQ_PRIORITY 8
228#define STM32_ST_USE_TIMER 2
229
230/*
231 * UART driver system settings.
232 */
233#define STM32_UART_USE_USART1 FALSE
234#define STM32_UART_USE_USART2 FALSE
235#define STM32_UART_USE_USART3 FALSE
236#define STM32_UART_USART1_IRQ_PRIORITY 12
237#define STM32_UART_USART2_IRQ_PRIORITY 12
238#define STM32_UART_USART3_IRQ_PRIORITY 12
239#define STM32_UART_USART1_DMA_PRIORITY 0
240#define STM32_UART_USART2_DMA_PRIORITY 0
241#define STM32_UART_USART3_DMA_PRIORITY 0
242#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
243
244/*
245 * USB driver system settings.
246 */
247#define STM32_USB_USE_USB1 TRUE
248#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
249#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
250#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
251
252/*
253 * WDG driver system settings.
254 */
255#define STM32_WDG_USE_IWDG FALSE
256
257#endif /* MCUCONF_H */
diff --git a/keyboards/clueboard_60/readme.md b/keyboards/clueboard_60/readme.md
new file mode 100644
index 000000000..b13c5336b
--- /dev/null
+++ b/keyboards/clueboard_60/readme.md
@@ -0,0 +1,14 @@
1# Clueboard 60%
2
3A fully customizable 60% keyboard.
4
5* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
6* Hardware Supported: Clueboard 60% PCB
7 * rev1 (1.0)
8* Hardware Availability: [clueboard.co](https://clueboard.co/)
9
10Make example for this keyboard (after setting up your build environment):
11
12 make clueboard_60-default-dfu-util
13
14See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/clueboard_60/rules.mk b/keyboards/clueboard_60/rules.mk
new file mode 100644
index 000000000..01b7dad9b
--- /dev/null
+++ b/keyboards/clueboard_60/rules.mk
@@ -0,0 +1,54 @@
1# project specific files
2SRC = matrix.c \
3 led.c
4LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso
5
6## chip/board settings
7# - the next two should match the directories in
8# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
9MCU_FAMILY = STM32
10MCU_SERIES = STM32F3xx
11
12# Linker script to use
13# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
14# or <this_dir>/ld/
15MCU_LDSCRIPT = STM32F303xC
16
17# Startup code to use
18# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
19MCU_STARTUP = stm32f3xx
20
21# Board: it should exist either in <chibios>/os/hal/boards/
22# or <this_dir>/boards
23BOARD = GENERIC_STM32_F303XC
24
25# Cortex version
26MCU = cortex-m4
27
28# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
29ARMV = 7
30
31# Vector table for application
32# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
33# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
34# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
35OPT_DEFS =
36
37# Options to pass to dfu-util when flashing
38DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000 -R
39
40# Build Options
41# comment out to disable the options.
42#
43BACKLIGHT_ENABLE = no
44BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
45## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
46MOUSEKEY_ENABLE = yes # Mouse keys
47EXTRAKEY_ENABLE = yes # Audio control and System control
48CONSOLE_ENABLE = yes # Console for debug
49COMMAND_ENABLE = yes # Commands for debug and configuration
50#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
51NKRO_ENABLE = yes # USB Nkey Rollover
52CUSTOM_MATRIX = yes # Custom matrix file
53#AUDIO_ENABLE = yes
54# SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/clueboard_66/Makefile b/keyboards/clueboard_66/Makefile
new file mode 100644
index 000000000..b9bada8f8
--- /dev/null
+++ b/keyboards/clueboard_66/Makefile
@@ -0,0 +1,5 @@
1SUBPROJECT_DEFAULT = rev2
2
3ifndef MAKEFILE_INCLUDED
4 include ../../Makefile
5endif \ No newline at end of file
diff --git a/keyboards/clueboard_66/clueboard_66.c b/keyboards/clueboard_66/clueboard_66.c
new file mode 100644
index 000000000..1e000e62d
--- /dev/null
+++ b/keyboards/clueboard_66/clueboard_66.c
@@ -0,0 +1 @@
#include "clueboard_66.h"
diff --git a/keyboards/clueboard/clueboard.h b/keyboards/clueboard_66/clueboard_66.h
index 295a596d5..295a596d5 100644
--- a/keyboards/clueboard/clueboard.h
+++ b/keyboards/clueboard_66/clueboard_66.h
diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard_66/config.h
index 0d4e6a874..0d4e6a874 100644
--- a/keyboards/clueboard/config.h
+++ b/keyboards/clueboard_66/config.h
diff --git a/keyboards/clueboard/keymaps/bloodlvst/rules.mk b/keyboards/clueboard_66/keymaps/bloodlvst/Makefile
index b1c2f32f6..b1c2f32f6 100644
--- a/keyboards/clueboard/keymaps/bloodlvst/rules.mk
+++ b/keyboards/clueboard_66/keymaps/bloodlvst/Makefile
diff --git a/keyboards/clueboard/keymaps/bloodlvst/config.h b/keyboards/clueboard_66/keymaps/bloodlvst/config.h
index 320401dbd..320401dbd 100644
--- a/keyboards/clueboard/keymaps/bloodlvst/config.h
+++ b/keyboards/clueboard_66/keymaps/bloodlvst/config.h
diff --git a/keyboards/clueboard/keymaps/bloodlvst/keymap.c b/keyboards/clueboard_66/keymaps/bloodlvst/keymap.c
index bedb658ea..bc50afa2f 100644
--- a/keyboards/clueboard/keymaps/bloodlvst/keymap.c
+++ b/keyboards/clueboard_66/keymaps/bloodlvst/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/bloodlvst/readme.md b/keyboards/clueboard_66/keymaps/bloodlvst/readme.md
index ee287ca47..ee287ca47 100644
--- a/keyboards/clueboard/keymaps/bloodlvst/readme.md
+++ b/keyboards/clueboard_66/keymaps/bloodlvst/readme.md
diff --git a/keyboards/clueboard_66/keymaps/bloodlvst/rules.mk b/keyboards/clueboard_66/keymaps/bloodlvst/rules.mk
new file mode 100644
index 000000000..b1c2f32f6
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/bloodlvst/rules.mk
@@ -0,0 +1,2 @@
1EXTRAKEY_ENABLE = yes
2COMMAND_ENABLE = no
diff --git a/keyboards/clueboard/keymaps/caps_fn/keymap.c b/keyboards/clueboard_66/keymaps/caps_fn/keymap.c
index 2e54fdba8..78eb43390 100644
--- a/keyboards/clueboard/keymaps/caps_fn/keymap.c
+++ b/keyboards/clueboard_66/keymaps/caps_fn/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/caps_fn/readme.md b/keyboards/clueboard_66/keymaps/caps_fn/readme.md
index 47a530a80..47a530a80 100644
--- a/keyboards/clueboard/keymaps/caps_fn/readme.md
+++ b/keyboards/clueboard_66/keymaps/caps_fn/readme.md
diff --git a/keyboards/clueboard/keymaps/colemak/keymap.c b/keyboards/clueboard_66/keymaps/colemak/keymap.c
index 2ed354186..b2921cca2 100644
--- a/keyboards/clueboard/keymaps/colemak/keymap.c
+++ b/keyboards/clueboard_66/keymaps/colemak/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard_66/keymaps/default/keymap.c
index dbfc04c57..ad623c548 100644
--- a/keyboards/clueboard/keymaps/default/keymap.c
+++ b/keyboards/clueboard_66/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/default/readme.md b/keyboards/clueboard_66/keymaps/default/readme.md
index 019131aeb..019131aeb 100644
--- a/keyboards/clueboard/keymaps/default/readme.md
+++ b/keyboards/clueboard_66/keymaps/default/readme.md
diff --git a/keyboards/clueboard/keymaps/jokrik/keymap.c b/keyboards/clueboard_66/keymaps/jokrik/keymap.c
index dda6a8b90..dd38e904c 100644
--- a/keyboards/clueboard/keymaps/jokrik/keymap.c
+++ b/keyboards/clueboard_66/keymaps/jokrik/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/jokrik/readme.md b/keyboards/clueboard_66/keymaps/jokrik/readme.md
index a845e65f1..a845e65f1 100644
--- a/keyboards/clueboard/keymaps/jokrik/readme.md
+++ b/keyboards/clueboard_66/keymaps/jokrik/readme.md
diff --git a/keyboards/clueboard/keymaps/mac_optimized/keymap.c b/keyboards/clueboard_66/keymaps/mac_optimized/keymap.c
index e39edb4d6..8c3568e59 100644
--- a/keyboards/clueboard/keymaps/mac_optimized/keymap.c
+++ b/keyboards/clueboard_66/keymaps/mac_optimized/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/mac_optimized/readme.md b/keyboards/clueboard_66/keymaps/mac_optimized/readme.md
index 282da369d..282da369d 100644
--- a/keyboards/clueboard/keymaps/mac_optimized/readme.md
+++ b/keyboards/clueboard_66/keymaps/mac_optimized/readme.md
diff --git a/keyboards/clueboard/keymaps/magicmonty/rules.mk b/keyboards/clueboard_66/keymaps/magicmonty/Makefile
index 289018f34..289018f34 100644
--- a/keyboards/clueboard/keymaps/magicmonty/rules.mk
+++ b/keyboards/clueboard_66/keymaps/magicmonty/Makefile
diff --git a/keyboards/clueboard/keymaps/magicmonty/config.h b/keyboards/clueboard_66/keymaps/magicmonty/config.h
index d933fa997..d933fa997 100644
--- a/keyboards/clueboard/keymaps/magicmonty/config.h
+++ b/keyboards/clueboard_66/keymaps/magicmonty/config.h
diff --git a/keyboards/clueboard/keymaps/magicmonty/keymap.c b/keyboards/clueboard_66/keymaps/magicmonty/keymap.c
index feef00e7a..6df7d7869 100644
--- a/keyboards/clueboard/keymaps/magicmonty/keymap.c
+++ b/keyboards/clueboard_66/keymaps/magicmonty/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/magicmonty/readme.md b/keyboards/clueboard_66/keymaps/magicmonty/readme.md
index e24212d04..e24212d04 100644
--- a/keyboards/clueboard/keymaps/magicmonty/readme.md
+++ b/keyboards/clueboard_66/keymaps/magicmonty/readme.md
diff --git a/keyboards/clueboard_66/keymaps/magicmonty/rules.mk b/keyboards/clueboard_66/keymaps/magicmonty/rules.mk
new file mode 100644
index 000000000..289018f34
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/magicmonty/rules.mk
@@ -0,0 +1,9 @@
1
2MOUSEKEY_ENABLE = yes
3EXTRAKEY_ENABLE = yes
4
5MIDI_ENABLE = yes
6
7# if MIDI_ENABLE is set to yes, then CONSOLE_ENABLE has to be disabled, because of the firmware size
8CONSOLE_ENABLE = false
9COMMAND_ENABLE = no
diff --git a/keyboards/clueboard/keymaps/maximised/keymap.c b/keyboards/clueboard_66/keymaps/maximised/keymap.c
index 583c52091..260f97477 100644
--- a/keyboards/clueboard/keymaps/maximised/keymap.c
+++ b/keyboards/clueboard_66/keymaps/maximised/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/maximised/readme.md b/keyboards/clueboard_66/keymaps/maximised/readme.md
index fc82e6879..fc82e6879 100644
--- a/keyboards/clueboard/keymaps/maximised/readme.md
+++ b/keyboards/clueboard_66/keymaps/maximised/readme.md
diff --git a/keyboards/clueboard/keymaps/mouse_keys/rules.mk b/keyboards/clueboard_66/keymaps/mouse_keys/Makefile
index 6c605daec..6c605daec 100644
--- a/keyboards/clueboard/keymaps/mouse_keys/rules.mk
+++ b/keyboards/clueboard_66/keymaps/mouse_keys/Makefile
diff --git a/keyboards/clueboard/keymaps/mouse_keys/keymap.c b/keyboards/clueboard_66/keymaps/mouse_keys/keymap.c
index 259fa29b7..15e068aa1 100644
--- a/keyboards/clueboard/keymaps/mouse_keys/keymap.c
+++ b/keyboards/clueboard_66/keymaps/mouse_keys/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/mouse_keys/readme.md b/keyboards/clueboard_66/keymaps/mouse_keys/readme.md
index 7fb038205..7fb038205 100644
--- a/keyboards/clueboard/keymaps/mouse_keys/readme.md
+++ b/keyboards/clueboard_66/keymaps/mouse_keys/readme.md
diff --git a/keyboards/clueboard_66/keymaps/mouse_keys/rules.mk b/keyboards/clueboard_66/keymaps/mouse_keys/rules.mk
new file mode 100644
index 000000000..6c605daec
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/mouse_keys/rules.mk
@@ -0,0 +1 @@
MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/keymaps/serubin/rules.mk b/keyboards/clueboard_66/keymaps/serubin/Makefile
index ba997f869..ba997f869 100644
--- a/keyboards/clueboard/keymaps/serubin/rules.mk
+++ b/keyboards/clueboard_66/keymaps/serubin/Makefile
diff --git a/keyboards/clueboard/keymaps/serubin/keymap.c b/keyboards/clueboard_66/keymaps/serubin/keymap.c
index 4212e6a52..112670d66 100644
--- a/keyboards/clueboard/keymaps/serubin/keymap.c
+++ b/keyboards/clueboard_66/keymaps/serubin/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/serubin/readme.md b/keyboards/clueboard_66/keymaps/serubin/readme.md
index 78eef5352..78eef5352 100644
--- a/keyboards/clueboard/keymaps/serubin/readme.md
+++ b/keyboards/clueboard_66/keymaps/serubin/readme.md
diff --git a/keyboards/clueboard_66/keymaps/serubin/rules.mk b/keyboards/clueboard_66/keymaps/serubin/rules.mk
new file mode 100644
index 000000000..ba997f869
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/serubin/rules.mk
@@ -0,0 +1,4 @@
1
2MOUSEKEY_ENABLE = yes
3EXTRAKEY_ENABLE = yes
4
diff --git a/keyboards/clueboard/keymaps/shift_fn/keymap.c b/keyboards/clueboard_66/keymaps/shift_fn/keymap.c
index be29a0a17..0d57e38a1 100644
--- a/keyboards/clueboard/keymaps/shift_fn/keymap.c
+++ b/keyboards/clueboard_66/keymaps/shift_fn/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/shift_fn/readme.md b/keyboards/clueboard_66/keymaps/shift_fn/readme.md
index 4bd920ad4..4bd920ad4 100644
--- a/keyboards/clueboard/keymaps/shift_fn/readme.md
+++ b/keyboards/clueboard_66/keymaps/shift_fn/readme.md
diff --git a/keyboards/clueboard/keymaps/skully/keymap.c b/keyboards/clueboard_66/keymaps/skully/keymap.c
index 81e47811f..2e23948b2 100644
--- a/keyboards/clueboard/keymaps/skully/keymap.c
+++ b/keyboards/clueboard_66/keymaps/skully/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard_66/keymaps/skully/readme.md
index b9ad1b09a..b9ad1b09a 100644
--- a/keyboards/clueboard/keymaps/skully/readme.md
+++ b/keyboards/clueboard_66/keymaps/skully/readme.md
diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard_66/keymaps/smt/keymap.c
index 6797faaa3..c61b32f8b 100644
--- a/keyboards/clueboard/keymaps/smt/keymap.c
+++ b/keyboards/clueboard_66/keymaps/smt/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Each layer gets a name for readability, which is then used in the keymap matrix below. 3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name. 4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/clueboard/keymaps/smt/readme.md b/keyboards/clueboard_66/keymaps/smt/readme.md
index 7fc0f0248..7fc0f0248 100644
--- a/keyboards/clueboard/keymaps/smt/readme.md
+++ b/keyboards/clueboard_66/keymaps/smt/readme.md
diff --git a/keyboards/clueboard/keymaps/tetris/rules.mk b/keyboards/clueboard_66/keymaps/tetris/Makefile
index 461353129..461353129 100644
--- a/keyboards/clueboard/keymaps/tetris/rules.mk
+++ b/keyboards/clueboard_66/keymaps/tetris/Makefile
diff --git a/keyboards/clueboard/keymaps/tetris/keymap.c b/keyboards/clueboard_66/keymaps/tetris/keymap.c
index c5a16b158..4bf2465a9 100644
--- a/keyboards/clueboard/keymaps/tetris/keymap.c
+++ b/keyboards/clueboard_66/keymaps/tetris/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2#include "tetris_text.h" 2#include "tetris_text.h"
3 3
4// Helpful defines 4// Helpful defines
diff --git a/keyboards/clueboard/keymaps/tetris/readme.md b/keyboards/clueboard_66/keymaps/tetris/readme.md
index 20e97fb19..20e97fb19 100644
--- a/keyboards/clueboard/keymaps/tetris/readme.md
+++ b/keyboards/clueboard_66/keymaps/tetris/readme.md
diff --git a/keyboards/clueboard_66/keymaps/tetris/rules.mk b/keyboards/clueboard_66/keymaps/tetris/rules.mk
new file mode 100644
index 000000000..461353129
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/tetris/rules.mk
@@ -0,0 +1 @@
SRC = tetris_text.c
diff --git a/keyboards/clueboard/keymaps/tetris/tetris_text.c b/keyboards/clueboard_66/keymaps/tetris/tetris_text.c
index 1376ead00..1376ead00 100644
--- a/keyboards/clueboard/keymaps/tetris/tetris_text.c
+++ b/keyboards/clueboard_66/keymaps/tetris/tetris_text.c
diff --git a/keyboards/clueboard/keymaps/tetris/tetris_text.h b/keyboards/clueboard_66/keymaps/tetris/tetris_text.h
index 25b4177e0..25b4177e0 100644
--- a/keyboards/clueboard/keymaps/tetris/tetris_text.h
+++ b/keyboards/clueboard_66/keymaps/tetris/tetris_text.h
diff --git a/keyboards/clueboard/keymaps/unix_optimized/keymap.c b/keyboards/clueboard_66/keymaps/unix_optimized/keymap.c
index 0de247ca0..dab959bdc 100644
--- a/keyboards/clueboard/keymaps/unix_optimized/keymap.c
+++ b/keyboards/clueboard_66/keymaps/unix_optimized/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/unix_optimized/readme.md b/keyboards/clueboard_66/keymaps/unix_optimized/readme.md
index 9e6d0e902..9e6d0e902 100644
--- a/keyboards/clueboard/keymaps/unix_optimized/readme.md
+++ b/keyboards/clueboard_66/keymaps/unix_optimized/readme.md
diff --git a/keyboards/clueboard/keymaps/win_optimized/keymap.c b/keyboards/clueboard_66/keymaps/win_optimized/keymap.c
index ad02fd59f..fb83aaa24 100644
--- a/keyboards/clueboard/keymaps/win_optimized/keymap.c
+++ b/keyboards/clueboard_66/keymaps/win_optimized/keymap.c
@@ -1,4 +1,4 @@
1#include "clueboard.h" 1#include "clueboard_66.h"
2 2
3// Helpful defines 3// Helpful defines
4#define _______ KC_TRNS 4#define _______ KC_TRNS
diff --git a/keyboards/clueboard/keymaps/win_optimized/readme.md b/keyboards/clueboard_66/keymaps/win_optimized/readme.md
index 703a37be0..703a37be0 100644
--- a/keyboards/clueboard/keymaps/win_optimized/readme.md
+++ b/keyboards/clueboard_66/keymaps/win_optimized/readme.md
diff --git a/keyboards/clueboard/keymaps/xyverz/rules.mk b/keyboards/clueboard_66/keymaps/xyverz/Makefile
index 950dadf84..950dadf84 100644
--- a/keyboards/clueboard/keymaps/xyverz/rules.mk
+++ b/keyboards/clueboard_66/keymaps/xyverz/Makefile
diff --git a/keyboards/clueboard/keymaps/xyverz/keymap.c b/keyboards/clueboard_66/keymaps/xyverz/keymap.c
index 540cd7983..b725b11dd 100644
--- a/keyboards/clueboard/keymaps/xyverz/keymap.c
+++ b/keyboards/clueboard_66/keymaps/xyverz/keymap.c
@@ -1,7 +1,7 @@
1// Xyverz' keymap. 1// Xyverz' keymap.
2// It's based on the default keymap, but Dvorak! 2// It's based on the default keymap, but Dvorak!
3 3
4#include "clueboard.h" 4#include "clueboard_66.h"
5 5
6// Used for SHIFT_ESC 6// Used for SHIFT_ESC
7#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) 7#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
diff --git a/keyboards/clueboard_66/keymaps/xyverz/rules.mk b/keyboards/clueboard_66/keymaps/xyverz/rules.mk
new file mode 100644
index 000000000..950dadf84
--- /dev/null
+++ b/keyboards/clueboard_66/keymaps/xyverz/rules.mk
@@ -0,0 +1,49 @@
1#----------------------------------------------------------------------------
2# On command line:
3#
4# make all = Make software.
5#
6# make clean = Clean out built project files.
7#
8# make coff = Convert ELF to AVR COFF.
9#
10# make extcoff = Convert ELF to AVR Extended COFF.
11#
12# make program = Download the hex file to the device.
13# Please customize your programmer settings(PROGRAM_CMD)
14#
15# make teensy = Download the hex file to the device, using teensy_loader_cli.
16# (must have teensy_loader_cli installed).
17#
18# make dfu = Download the hex file to the device, using dfu-programmer (must
19# have dfu-programmer installed).
20#
21# make flip = Download the hex file to the device, using Atmel FLIP (must
22# have Atmel FLIP installed).
23#
24# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
25# (must have dfu-programmer installed).
26#
27# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
28# (must have Atmel FLIP installed).
29#
30# make debug = Start either simulavr or avarice as specified for debugging,
31# with avr-gdb or avr-insight as the front end for debugging.
32#
33# make filename.s = Just compile filename.c into the assembler code only.
34#
35# make filename.i = Create a preprocessed source file for use in submitting
36# bug reports to the GCC project.
37#
38# To rebuild project do "make clean" then "make all".
39#----------------------------------------------------------------------------
40
41# Build Options
42# change to "no" to disable the options, or define them in the makefile.mk in
43# the appropriate keymap folder that will get included automatically
44#
45RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
46
47ifndef QUANTUM_DIR
48 include ../../../../Makefile
49endif \ No newline at end of file
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard_66/readme.md
index 13859bc24..13859bc24 100644
--- a/keyboards/clueboard/readme.md
+++ b/keyboards/clueboard_66/readme.md
diff --git a/keyboards/clueboard_66/rev1/Makefile b/keyboards/clueboard_66/rev1/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/clueboard_66/rev1/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev1/config.h b/keyboards/clueboard_66/rev1/config.h
index f40876ffb..f40876ffb 100644
--- a/keyboards/clueboard/rev1/config.h
+++ b/keyboards/clueboard_66/rev1/config.h
diff --git a/keyboards/clueboard/rev1/rev1.c b/keyboards/clueboard_66/rev1/rev1.c
index 90fc6956c..90fc6956c 100644
--- a/keyboards/clueboard/rev1/rev1.c
+++ b/keyboards/clueboard_66/rev1/rev1.c
diff --git a/keyboards/clueboard/rev1/rev1.h b/keyboards/clueboard_66/rev1/rev1.h
index abdfd079b..cc94085f9 100644
--- a/keyboards/clueboard/rev1/rev1.h
+++ b/keyboards/clueboard_66/rev1/rev1.h
@@ -1,7 +1,7 @@
1#ifndef REV1_H 1#ifndef REV1_H
2#define REV1_H 2#define REV1_H
3 3
4#include "../clueboard.h" 4#include "../clueboard_66.h"
5 5
6/* Clueboard matrix layout 6/* Clueboard matrix layout
7 * ,-----------------------------------------------------------. ,---. 7 * ,-----------------------------------------------------------. ,---.
diff --git a/keyboards/clueboard/rev1/rules.mk b/keyboards/clueboard_66/rev1/rules.mk
index f84561674..f84561674 100644
--- a/keyboards/clueboard/rev1/rules.mk
+++ b/keyboards/clueboard_66/rev1/rules.mk
diff --git a/keyboards/clueboard_66/rev2/Makefile b/keyboards/clueboard_66/rev2/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/clueboard_66/rev2/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard_66/rev2/config.h
index bc34fc07b..bc34fc07b 100644
--- a/keyboards/clueboard/rev2/config.h
+++ b/keyboards/clueboard_66/rev2/config.h
diff --git a/keyboards/clueboard/rev2/rev2.c b/keyboards/clueboard_66/rev2/rev2.c
index 1a35b87b8..1a35b87b8 100644
--- a/keyboards/clueboard/rev2/rev2.c
+++ b/keyboards/clueboard_66/rev2/rev2.c
diff --git a/keyboards/clueboard/rev2/rev2.h b/keyboards/clueboard_66/rev2/rev2.h
index 2e9cb9dc2..75015ec02 100644
--- a/keyboards/clueboard/rev2/rev2.h
+++ b/keyboards/clueboard_66/rev2/rev2.h
@@ -1,7 +1,7 @@
1#ifndef REV2_H 1#ifndef REV2_H
2#define REV2_H 2#define REV2_H
3 3
4#include "../clueboard.h" 4#include "../clueboard_66.h"
5 5
6/* Clueboard matrix layout 6/* Clueboard matrix layout
7 * ,-----------------------------------------------------------. ,---. 7 * ,-----------------------------------------------------------. ,---.
diff --git a/keyboards/clueboard/rev2/rules.mk b/keyboards/clueboard_66/rev2/rules.mk
index 54a2685bf..54a2685bf 100644
--- a/keyboards/clueboard/rev2/rules.mk
+++ b/keyboards/clueboard_66/rev2/rules.mk
diff --git a/keyboards/clueboard/rev3/config.h b/keyboards/clueboard_66/rev3/config.h
index cd12db22e..cd12db22e 100644
--- a/keyboards/clueboard/rev3/config.h
+++ b/keyboards/clueboard_66/rev3/config.h
diff --git a/keyboards/clueboard/rev3/rev3.c b/keyboards/clueboard_66/rev3/rev3.c
index 8f703d2c9..8f703d2c9 100644
--- a/keyboards/clueboard/rev3/rev3.c
+++ b/keyboards/clueboard_66/rev3/rev3.c
diff --git a/keyboards/clueboard/rev3/rev3.h b/keyboards/clueboard_66/rev3/rev3.h
index eade14c3b..fd6f98344 100644
--- a/keyboards/clueboard/rev3/rev3.h
+++ b/keyboards/clueboard_66/rev3/rev3.h
@@ -1,7 +1,7 @@
1#ifndef REV3_H 1#ifndef REV3_H
2#define REV3_H 2#define REV3_H
3 3
4#include "../clueboard.h" 4#include "../clueboard_66.h"
5 5
6/* Clueboard matrix layout 6/* Clueboard matrix layout
7 * ,-----------------------------------------------------------. ,---. 7 * ,-----------------------------------------------------------. ,---.
diff --git a/keyboards/clueboard/rev3/rules.mk b/keyboards/clueboard_66/rev3/rules.mk
index 54a2685bf..54a2685bf 100644
--- a/keyboards/clueboard/rev3/rules.mk
+++ b/keyboards/clueboard_66/rev3/rules.mk
diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard_66/rules.mk
index afbb531a2..afbb531a2 100644
--- a/keyboards/clueboard/rules.mk
+++ b/keyboards/clueboard_66/rules.mk
diff --git a/keyboards/clueboard/subproject.mk b/keyboards/clueboard_66/subproject.mk
index 7c9b39598..7c9b39598 100644
--- a/keyboards/clueboard/subproject.mk
+++ b/keyboards/clueboard_66/subproject.mk
diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h
index 704b17a78..d2f018ce6 100644
--- a/keyboards/gh60/gh60.h
+++ b/keyboards/gh60/gh60.h
@@ -57,6 +57,22 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
57 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \ 57 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
58} 58}
59 59
60/* ISO variant. Remove useless ANSI keys */
61#define KEYMAP_ISO( \
62 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
63 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
64 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
65 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
66 K40, K41, K42, K45, K4A, K4B, K4C, K4D \
67) { \
68 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
69 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
70 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
71 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
72 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
73}
74
75
60/* HHKB Variant */ 76/* HHKB Variant */
61#define KEYMAP_HHKB( \ 77#define KEYMAP_HHKB( \
62 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ 78 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
@@ -72,8 +88,8 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
72 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \ 88 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
73} 89}
74 90
75#define LAYOUT_60_ansi KEYMAP_ANSI 91#define LAYOUT_60_ansi KEYMAP_ANSI
76#define LAYOUT_60_iso KEYMAP 92#define LAYOUT_60_iso KEYMAP_ISO
77#define LAYOUT_60_ansi_split_bs_rshift KEYMAP_HHKB 93#define LAYOUT_60_ansi_split_bs_rshift KEYMAP_HHKB
78 94
79#endif \ No newline at end of file 95#endif
diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h
index 5128fd073..8a8874ced 100644
--- a/keyboards/satan/satan.h
+++ b/keyboards/satan/satan.h
@@ -62,6 +62,22 @@
62 {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \ 62 {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
63 {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ 63 {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
64} 64}
65/* Satan GH60 ISO layout
66 */
67#define KEYMAP_ISO( \
68 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
69 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
70 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
71 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
72 k40, k41, k42, k45, k4a, k4b, k4c, k4d \
73) \
74{ \
75 {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
76 {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX}, \
77 {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
78 {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
79 {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
80}
65 81
66/* Satan HHKB matrix layout 82/* Satan HHKB matrix layout
67 * ,------------------------------------------------------------. 83 * ,------------------------------------------------------------.
@@ -126,7 +142,7 @@ void matrix_init_user(void);
126void matrix_scan_user(void); 142void matrix_scan_user(void);
127 143
128#define LAYOUT_60_ansi KEYMAP_ANSI 144#define LAYOUT_60_ansi KEYMAP_ANSI
129#define LAYOUT_60_iso KEYMAP 145#define LAYOUT_60_iso KEYMAP_ISO
130#define LAYOUT_60_ansi_split_bs_rshift KEYMAP_HHKB 146#define LAYOUT_60_ansi_split_bs_rshift KEYMAP_HHKB
131 147
132#endif 148#endif
diff --git a/layouts/community/60_iso/unxmaal/keymap.c b/layouts/community/60_iso/unxmaal/keymap.c
index e9b38788e..8f2d55d9b 100644
--- a/layouts/community/60_iso/unxmaal/keymap.c
+++ b/layouts/community/60_iso/unxmaal/keymap.c
@@ -8,25 +8,25 @@
8 8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* 10 /*
11 * ANSI Base, Mac style 11 * ISO Base, Mac style
12 * ,-----------------------------------------------------------------------------. 12 * ,-----------------------------------------------------------------------------.
13 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | Backsp | 13 * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| = | Backsp |
14 * |-----------------------------------------------------------------------------| 14 * |-----------------------------------------------------------------------------|
15 * |Tab | Q | W | E | R | T | Y | U | I| O| P| [| ]| \| 15 * |Tab | Q | W | E | R | T | Y | U | I| O| P| [| ]| |
16 * |----------------------------------------------------------------------- |
17 * |Caps/Fn | A| S| D| F| G| H| J| K| L| ;| '| #|Enter|
16 * |-----------------------------------------------------------------------------| 18 * |-----------------------------------------------------------------------------|
17 * |Caps/Fn | A| S| D| F| G| H| J| K| L| ;| '| Enter | 19 * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| Shift |
18 * |-----------------------------------------------------------------------------|
19 * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
20 * |-----------------------------------------------------------------------------| 20 * |-----------------------------------------------------------------------------|
21 * |Fn|Alt |Gui | Space(tapped), Fn(held) |Gui |Alt |Menu(tapped, Fn2(held)|Ctrl| 21 * |Fn|Alt |Gui | Space(tapped), Fn(held) |Gui |Alt |Menu(tapped, Fn2(held)|Ctrl|
22 * `-----------------------------------------------------------------------------' 22 * `-----------------------------------------------------------------------------'
23 */ 23 */
24 [_BL] = LAYOUT_60_iso( 24 [_BL] = LAYOUT_60_iso(
25 KC_ESC,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, \ 25 KC_ESC,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, \
26 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, \ 26 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, \
27 KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \ 27 KC_LCTL,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, \
28 KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \ 28 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, \
29 MO(1),KC_LALT,KC_LGUI, LT(1,KC_SPACE), KC_NO, KC_RGUI, KC_RALT, LT(2,KC_MENU), KC_RCTL), 29 MO(1),KC_LALT,KC_LGUI, LT(1,KC_SPACE), KC_RGUI, KC_RALT, LT(2,KC_MENU), KC_RCTL),
30 30
31 /* 31 /*
32 * Pok3r style arrow cluster 32 * Pok3r style arrow cluster
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
34 * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL | 34 * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL |
35 * |-----------------------------------------------------------| 35 * |-----------------------------------------------------------|
36 * | | | | | | | | |Up| | | | | | 36 * | | | | | | | | |Up| | | | | |
37 * |-----------------------------------------------------------| 37 * |------------------------------------------------------- |
38 * | | | | | | | |Left|Down|Right| | | | 38 * | | | | | | | |Left|Down|Right| | | |
39 * |-----------------------------------------------------------| 39 * |-----------------------------------------------------------|
40 * | | | | | | | | | | | | | 40 * | | | | | | | | | | | | |
@@ -44,10 +44,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
44 */ 44 */
45 [_AL] = LAYOUT_60_iso( 45 [_AL] = LAYOUT_60_iso(
46 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_DELETE, \ 46 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_DELETE, \
47 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 47 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
48 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 48 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
49 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 49 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
50 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), 50 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
51 51
52 52
53 /* 53 /*
@@ -56,8 +56,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
56 * | | | | | | | | RW|Play|FF| Mute| Vol Down | Vol up |Reset | 56 * | | | | | | | | RW|Play|FF| Mute| Vol Down | Vol up |Reset |
57 * |-------------------------------------------------------------| 57 * |-------------------------------------------------------------|
58 * | | | | | | | | | |PgUp| | | | | 58 * | | | | | | | | | |PgUp| | | | |
59 * |-------------------------------------------------------------| 59 * |-------------------------------------------------------- |
60 * | | | | | | | |Home|PgDown|End| | | | 60 * | | | | | | | |Home|PgDown|End| | | | |
61 * |-------------------------------------------------------------| 61 * |-------------------------------------------------------------|
62 * | | | | | | | | | | | | | 62 * | | | | | | | | | | | | |
63 * |-------------------------------------------------------------| 63 * |-------------------------------------------------------------|
@@ -66,10 +66,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
66 */ 66 */
67 [_FL] = LAYOUT_60_iso( 67 [_FL] = LAYOUT_60_iso(
68 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MPLY,KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,RESET, \ 68 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MPLY,KC_MNXT,KC_MUTE,KC_VOLD,KC_VOLU,RESET, \
69 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PGUP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 69 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PGUP,KC_TRNS,KC_TRNS,KC_TRNS, \
70 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_TRNS,KC_HOME,KC_PGDN,KC_END,KC_TRNS,KC_TRNS,KC_TRNS, \ 70 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_TRNS,KC_HOME,KC_PGDN,KC_END,KC_TRNS,KC_TRNS,KC_TRNS, \
71 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 71 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
72 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), 72 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
73 73
74 /* 74 /*
75 * Locking layer for controlling the underglow. 75 * Locking layer for controlling the underglow.
@@ -79,8 +79,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
79 * | | | | | | | | | | | | | | | 79 * | | | | | | | | | | | | | | |
80 * |-----------------------------------------------------------| 80 * |-----------------------------------------------------------|
81 * | | | | | | | | | | | | | | | 81 * | | | | | | | | | | | | | | |
82 * |-----------------------------------------------------------| 82 * |------------------------------------------------------- |
83 * | |On|Mode| | | | | | | | | | | 83 * | |On|Mode| | | | | | | | | | | |
84 * |-----------------------------------------------------------| 84 * |-----------------------------------------------------------|
85 * | | |Hue+|Hue-|Sat+|Sat-|Val+|Val-| | | | | 85 * | | |Hue+|Hue-|Sat+|Sat-|Val+|Val-| | | | |
86 * |-----------------------------------------------------------| 86 * |-----------------------------------------------------------|
@@ -89,10 +89,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
89 */ 89 */
90 [_UL] = LAYOUT_60_iso( 90 [_UL] = LAYOUT_60_iso(
91 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 91 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
92 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 92 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
93 KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 93 KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
94 KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \ 94 KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
95 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS), 95 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
96}; 96};
97 97
98enum function_id { 98enum function_id {
@@ -163,6 +163,7 @@ void matrix_scan_user(void) {
163 163
164void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { 164void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
165 switch (id) { 165 switch (id) {
166#ifdef RGBLIGHT_ENABLE
166 case RGBLED_TOGGLE: 167 case RGBLED_TOGGLE:
167 //led operations 168 //led operations
168 if (record->event.pressed) { 169 if (record->event.pressed) {
@@ -204,6 +205,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
204 rgblight_step(); 205 rgblight_step();
205 } 206 }
206 break; 207 break;
208#endif
207 static uint8_t shift_esc_shift_mask; 209 static uint8_t shift_esc_shift_mask;
208 // Shift + ESC = ~ 210 // Shift + ESC = ~
209 case SHIFT_ESC: 211 case SHIFT_ESC:
diff --git a/layouts/community/60_iso/unxmaal/rules.mk b/layouts/community/60_iso/unxmaal/rules.mk
index 26fc6dc66..2ce7257d2 100644
--- a/layouts/community/60_iso/unxmaal/rules.mk
+++ b/layouts/community/60_iso/unxmaal/rules.mk
@@ -1 +1,4 @@
1RGBLIGHT_ENABLE = yes # Enable RGB Underglow 1# Only enable RGB on avr boards
2ifndef MCU_FAMILY
3 RGBLIGHT_ENABLE = yes # Enable RGB Underglow
4endif
diff --git a/layouts/default/60_ansi/default_60_ansi/keymap.c b/layouts/default/60_ansi/default_60_ansi/keymap.c
index 130dc19c4..6da2d25e7 100644
--- a/layouts/default/60_ansi/default_60_ansi/keymap.c
+++ b/layouts/default/60_ansi/default_60_ansi/keymap.c
@@ -8,4 +8,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
8 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 8 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
9 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO 9 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
10 ) 10 )
11}; \ No newline at end of file 11};
diff --git a/layouts/default/60_iso/default_60_iso/keymap.c b/layouts/default/60_iso/default_60_iso/keymap.c
index b9d932e77..85e0d3e3d 100644
--- a/layouts/default/60_iso/default_60_iso/keymap.c
+++ b/layouts/default/60_iso/default_60_iso/keymap.c
@@ -3,9 +3,9 @@
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = LAYOUT_60_iso( 4 [0] = LAYOUT_60_iso(
5 KC_ESC, 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, 5 KC_ESC, 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,
6 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, 6 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,
7 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, 7 KC_LCTL, 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,
8 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, 8 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,
9 KC_LCTRL, KC_LALT, KC_LGUI, KC_SPACE, KC_NO, KC_RGUI, KC_RALT, KC_MENU, KC_RCTL 9 KC_LCTRL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_MENU, KC_RCTL
10 ) 10 )
11}; \ No newline at end of file 11};
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index e85326ff4..e08233486 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -17,9 +17,11 @@
17#include <stdio.h> 17#include <stdio.h>
18#include <string.h> 18#include <string.h>
19//#include <math.h> 19//#include <math.h>
20#include <avr/pgmspace.h> 20#if defined(__AVR__)
21#include <avr/interrupt.h> 21 #include <avr/pgmspace.h>
22#include <avr/io.h> 22 #include <avr/interrupt.h>
23 #include <avr/io.h>
24#endif
23#include "print.h" 25#include "print.h"
24#include "audio.h" 26#include "audio.h"
25#include "keymap.h" 27#include "keymap.h"
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
index 79e0da229..da09b2bcd 100644
--- a/quantum/audio/audio.h
+++ b/quantum/audio/audio.h
@@ -18,12 +18,15 @@
18 18
19#include <stdint.h> 19#include <stdint.h>
20#include <stdbool.h> 20#include <stdbool.h>
21#include <avr/io.h> 21#if defined(__AVR__)
22#include <util/delay.h> 22 #include <avr/io.h>
23#endif
24#include "wait.h"
23#include "musical_notes.h" 25#include "musical_notes.h"
24#include "song_list.h" 26#include "song_list.h"
25#include "voices.h" 27#include "voices.h"
26#include "quantum.h" 28#include "quantum.h"
29#include <math.h>
27 30
28// Largely untested PWM audio mode (doesn't sound as good) 31// Largely untested PWM audio mode (doesn't sound as good)
29// #define PWM_AUDIO 32// #define PWM_AUDIO
diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c
new file mode 100644
index 000000000..5ad0c86ec
--- /dev/null
+++ b/quantum/audio/audio_arm.c
@@ -0,0 +1,606 @@
1/* Copyright 2016 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "audio.h"
18#include "ch.h"
19#include "hal.h"
20
21#include <stdio.h>
22#include <string.h>
23#include "print.h"
24#include "keymap.h"
25
26#include "eeconfig.h"
27
28// -----------------------------------------------------------------------------
29
30int voices = 0;
31int voice_place = 0;
32float frequency = 0;
33float frequency_alt = 0;
34int volume = 0;
35long position = 0;
36
37float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
38int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
39bool sliding = false;
40
41float place = 0;
42
43uint8_t * sample;
44uint16_t sample_length = 0;
45
46bool playing_notes = false;
47bool playing_note = false;
48float note_frequency = 0;
49float note_length = 0;
50uint8_t note_tempo = TEMPO_DEFAULT;
51float note_timbre = TIMBRE_DEFAULT;
52uint16_t note_position = 0;
53float (* notes_pointer)[][2];
54uint16_t notes_count;
55bool notes_repeat;
56bool note_resting = false;
57
58uint8_t current_note = 0;
59uint8_t rest_counter = 0;
60
61#ifdef VIBRATO_ENABLE
62float vibrato_counter = 0;
63float vibrato_strength = .5;
64float vibrato_rate = 0.125;
65#endif
66
67float polyphony_rate = 0;
68
69static bool audio_initialized = false;
70
71audio_config_t audio_config;
72
73uint16_t envelope_index = 0;
74bool glissando = true;
75
76#ifndef STARTUP_SONG
77 #define STARTUP_SONG SONG(STARTUP_SOUND)
78#endif
79float startup_song[][2] = STARTUP_SONG;
80
81static void gpt_cb6(GPTDriver *gptp);
82static void gpt_cb7(GPTDriver *gptp);
83static void gpt_cb8(GPTDriver *gptp);
84
85/*
86 * GPT6 configuration.
87 */
88GPTConfig gpt6cfg1 = {
89 .frequency = 440,
90 .callback = gpt_cb6,
91 .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
92 .dier = 0U
93};
94
95GPTConfig gpt7cfg1 = {
96 .frequency = 440,
97 .callback = gpt_cb7,
98 .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
99 .dier = 0U
100};
101
102GPTConfig gpt8cfg1 = {
103 .frequency = 10,
104 .callback = gpt_cb8,
105 .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
106 .dier = 0U
107};
108
109static void gpt_cb6(GPTDriver *gptp) {
110 palTogglePad(GPIOA, 4);
111}
112
113
114static void gpt_cb7(GPTDriver *gptp) {
115 palTogglePad(GPIOA, 5);
116}
117
118void audio_init()
119{
120
121 if (audio_initialized)
122 return;
123
124 // Check EEPROM
125 // if (!eeconfig_is_enabled())
126 // {
127 // eeconfig_init();
128 // }
129 // audio_config.raw = eeconfig_read_audio();
130 audio_config.enable = true;
131
132 palSetPadMode(GPIOA, 4, PAL_MODE_OUTPUT_PUSHPULL);
133 palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL);
134
135 audio_initialized = true;
136
137 if (audio_config.enable) {
138 PLAY_SONG(startup_song);
139 }
140
141}
142
143void stop_all_notes()
144{
145 dprintf("audio stop all notes");
146
147 if (!audio_initialized) {
148 audio_init();
149 }
150 voices = 0;
151
152 gptStopTimer(&GPTD6);
153 gptStopTimer(&GPTD7);
154 gptStopTimer(&GPTD8);
155
156 playing_notes = false;
157 playing_note = false;
158 frequency = 0;
159 frequency_alt = 0;
160 volume = 0;
161
162 for (uint8_t i = 0; i < 8; i++)
163 {
164 frequencies[i] = 0;
165 volumes[i] = 0;
166 }
167}
168
169void stop_note(float freq)
170{
171 dprintf("audio stop note freq=%d", (int)freq);
172
173 if (playing_note) {
174 if (!audio_initialized) {
175 audio_init();
176 }
177 for (int i = 7; i >= 0; i--) {
178 if (frequencies[i] == freq) {
179 frequencies[i] = 0;
180 volumes[i] = 0;
181 for (int j = i; (j < 7); j++) {
182 frequencies[j] = frequencies[j+1];
183 frequencies[j+1] = 0;
184 volumes[j] = volumes[j+1];
185 volumes[j+1] = 0;
186 }
187 break;
188 }
189 }
190 voices--;
191 if (voices < 0)
192 voices = 0;
193 if (voice_place >= voices) {
194 voice_place = 0;
195 }
196 if (voices == 0) {
197 gptStopTimer(&GPTD6);
198 gptStopTimer(&GPTD7);
199 gptStopTimer(&GPTD8);
200 frequency = 0;
201 frequency_alt = 0;
202 volume = 0;
203 playing_note = false;
204 }
205 }
206}
207
208#ifdef VIBRATO_ENABLE
209
210float mod(float a, int b)
211{
212 float r = fmod(a, b);
213 return r < 0 ? r + b : r;
214}
215
216float vibrato(float average_freq) {
217 #ifdef VIBRATO_STRENGTH_ENABLE
218 float vibrated_freq = average_freq * pow(vibrato_lut[(int)vibrato_counter], vibrato_strength);
219 #else
220 float vibrated_freq = average_freq * vibrato_lut[(int)vibrato_counter];
221 #endif
222 vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0/average_freq)), VIBRATO_LUT_LENGTH);
223 return vibrated_freq;
224}
225
226#endif
227
228static void restart_gpt6(void) {
229 // gptStopTimer(&GPTD6);
230
231 gptStart(&GPTD6, &gpt6cfg1);
232 gptStartContinuous(&GPTD6, 2U);
233}
234
235static void restart_gpt7(void) {
236 // gptStopTimer(&GPTD7);
237
238 gptStart(&GPTD7, &gpt7cfg1);
239 gptStartContinuous(&GPTD7, 2U);
240}
241
242static void gpt_cb8(GPTDriver *gptp) {
243 float freq;
244
245 if (playing_note) {
246 if (voices > 0) {
247
248 float freq_alt = 0;
249 if (voices > 1) {
250 if (polyphony_rate == 0) {
251 if (glissando) {
252 if (frequency_alt != 0 && frequency_alt < frequencies[voices - 2] && frequency_alt < frequencies[voices - 2] * pow(2, -440/frequencies[voices - 2]/12/2)) {
253 frequency_alt = frequency_alt * pow(2, 440/frequency_alt/12/2);
254 } else if (frequency_alt != 0 && frequency_alt > frequencies[voices - 2] && frequency_alt > frequencies[voices - 2] * pow(2, 440/frequencies[voices - 2]/12/2)) {
255 frequency_alt = frequency_alt * pow(2, -440/frequency_alt/12/2);
256 } else {
257 frequency_alt = frequencies[voices - 2];
258 }
259 } else {
260 frequency_alt = frequencies[voices - 2];
261 }
262
263 #ifdef VIBRATO_ENABLE
264 if (vibrato_strength > 0) {
265 freq_alt = vibrato(frequency_alt);
266 } else {
267 freq_alt = frequency_alt;
268 }
269 #else
270 freq_alt = frequency_alt;
271 #endif
272 }
273
274 if (envelope_index < 65535) {
275 envelope_index++;
276 }
277
278 freq_alt = voice_envelope(freq_alt);
279
280 if (freq_alt < 30.517578125) {
281 freq_alt = 30.52;
282 }
283
284 if (gpt6cfg1.frequency != (uint16_t)freq_alt) {
285 gpt6cfg1.frequency = freq_alt;
286 restart_gpt6();
287 }
288 //note_timbre;
289 } else {
290 // gptStopTimer(&GPTD6);
291 }
292
293 if (polyphony_rate > 0) {
294 if (voices > 1) {
295 voice_place %= voices;
296 if (place++ > (frequencies[voice_place] / polyphony_rate)) {
297 voice_place = (voice_place + 1) % voices;
298 place = 0.0;
299 }
300 }
301
302 #ifdef VIBRATO_ENABLE
303 if (vibrato_strength > 0) {
304 freq = vibrato(frequencies[voice_place]);
305 } else {
306 freq = frequencies[voice_place];
307 }
308 #else
309 freq = frequencies[voice_place];
310 #endif
311 } else {
312 if (glissando) {
313 if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) {
314 frequency = frequency * pow(2, 440/frequency/12/2);
315 } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) {
316 frequency = frequency * pow(2, -440/frequency/12/2);
317 } else {
318 frequency = frequencies[voices - 1];
319 }
320 } else {
321 frequency = frequencies[voices - 1];
322 }
323
324 #ifdef VIBRATO_ENABLE
325 if (vibrato_strength > 0) {
326 freq = vibrato(frequency);
327 } else {
328 freq = frequency;
329 }
330 #else
331 freq = frequency;
332 #endif
333 }
334
335 if (envelope_index < 65535) {
336 envelope_index++;
337 }
338
339 freq = voice_envelope(freq);
340
341 if (freq < 30.517578125) {
342 freq = 30.52;
343 }
344
345
346 if (gpt7cfg1.frequency != (uint16_t)freq) {
347 gpt7cfg1.frequency = freq;
348 restart_gpt7();
349 }
350 //note_timbre;
351 } else {
352 // gptStopTimer(&GPTD7);
353 }
354 }
355
356 if (playing_notes) {
357 if (note_frequency > 0) {
358 #ifdef VIBRATO_ENABLE
359 if (vibrato_strength > 0) {
360 freq = vibrato(note_frequency);
361 } else {
362 freq = note_frequency;
363 }
364 #else
365 freq = note_frequency;
366 #endif
367
368 if (envelope_index < 65535) {
369 envelope_index++;
370 }
371 freq = voice_envelope(freq);
372
373
374 if (gpt6cfg1.frequency != (uint16_t)freq) {
375 gpt6cfg1.frequency = freq;
376 restart_gpt6();
377 gpt7cfg1.frequency = freq;
378 restart_gpt7();
379 }
380 //note_timbre;
381 } else {
382 // gptStopTimer(&GPTD6);
383 // gptStopTimer(&GPTD7);
384 }
385
386 note_position++;
387 bool end_of_note = false;
388 if (gpt6cfg1.frequency > 0) {
389 if (!note_resting)
390 end_of_note = (note_position >= (note_length*16 - 1));
391 else
392 end_of_note = (note_position >= (note_length*16));
393 } else {
394 end_of_note = (note_position >= (note_length*16));
395 }
396
397 if (end_of_note) {
398 current_note++;
399 if (current_note >= notes_count) {
400 if (notes_repeat) {
401 current_note = 0;
402 } else {
403 gptStopTimer(&GPTD6);
404 gptStopTimer(&GPTD7);
405 // gptStopTimer(&GPTD8);
406 playing_notes = false;
407 return;
408 }
409 }
410 if (!note_resting) {
411 note_resting = true;
412 current_note--;
413 if ((*notes_pointer)[current_note][0] == (*notes_pointer)[current_note + 1][0]) {
414 note_frequency = 0;
415 note_length = 1;
416 } else {
417 note_frequency = (*notes_pointer)[current_note][0];
418 note_length = 1;
419 }
420 } else {
421 note_resting = false;
422 envelope_index = 0;
423 note_frequency = (*notes_pointer)[current_note][0];
424 note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
425 }
426
427 note_position = 0;
428 }
429 }
430
431 if (!audio_config.enable) {
432 playing_notes = false;
433 playing_note = false;
434 }
435}
436
437void play_note(float freq, int vol) {
438
439 dprintf("audio play note freq=%d vol=%d", (int)freq, vol);
440
441 if (!audio_initialized) {
442 audio_init();
443 }
444
445 if (audio_config.enable && voices < 8) {
446
447 // Cancel notes if notes are playing
448 if (playing_notes)
449 stop_all_notes();
450
451 playing_note = true;
452
453 envelope_index = 0;
454
455 if (freq > 0) {
456 frequencies[voices] = freq;
457 volumes[voices] = vol;
458 voices++;
459 }
460
461 gptStart(&GPTD8, &gpt8cfg1);
462 gptStartContinuous(&GPTD8, 2U);
463
464 }
465
466}
467
468void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat)
469{
470
471 if (!audio_initialized) {
472 audio_init();
473 }
474
475 if (audio_config.enable) {
476
477 // Cancel note if a note is playing
478 if (playing_note)
479 stop_all_notes();
480
481 playing_notes = true;
482
483 notes_pointer = np;
484 notes_count = n_count;
485 notes_repeat = n_repeat;
486
487 place = 0;
488 current_note = 0;
489
490 note_frequency = (*notes_pointer)[current_note][0];
491 note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100);
492 note_position = 0;
493
494 gptStart(&GPTD8, &gpt8cfg1);
495 gptStartContinuous(&GPTD8, 2U);
496 restart_gpt6();
497 restart_gpt7();
498 }
499
500}
501
502bool is_playing_notes(void) {
503 return playing_notes;
504}
505
506bool is_audio_on(void) {
507 return (audio_config.enable != 0);
508}
509
510void audio_toggle(void) {
511 audio_config.enable ^= 1;
512 eeconfig_update_audio(audio_config.raw);
513 if (audio_config.enable)
514 audio_on_user();
515}
516
517void audio_on(void) {
518 audio_config.enable = 1;
519 eeconfig_update_audio(audio_config.raw);
520 audio_on_user();
521}
522
523void audio_off(void) {
524 audio_config.enable = 0;
525 eeconfig_update_audio(audio_config.raw);
526}
527
528#ifdef VIBRATO_ENABLE
529
530// Vibrato rate functions
531
532void set_vibrato_rate(float rate) {
533 vibrato_rate = rate;
534}
535
536void increase_vibrato_rate(float change) {
537 vibrato_rate *= change;
538}
539
540void decrease_vibrato_rate(float change) {
541 vibrato_rate /= change;
542}
543
544#ifdef VIBRATO_STRENGTH_ENABLE
545
546void set_vibrato_strength(float strength) {
547 vibrato_strength = strength;
548}
549
550void increase_vibrato_strength(float change) {
551 vibrato_strength *= change;
552}
553
554void decrease_vibrato_strength(float change) {
555 vibrato_strength /= change;
556}
557
558#endif /* VIBRATO_STRENGTH_ENABLE */
559
560#endif /* VIBRATO_ENABLE */
561
562// Polyphony functions
563
564void set_polyphony_rate(float rate) {
565 polyphony_rate = rate;
566}
567
568void enable_polyphony() {
569 polyphony_rate = 5;
570}
571
572void disable_polyphony() {
573 polyphony_rate = 0;
574}
575
576void increase_polyphony_rate(float change) {
577 polyphony_rate *= change;
578}
579
580void decrease_polyphony_rate(float change) {
581 polyphony_rate /= change;
582}
583
584// Timbre function
585
586void set_timbre(float timbre) {
587 note_timbre = timbre;
588}
589
590// Tempo functions
591
592void set_tempo(uint8_t tempo) {
593 note_tempo = tempo;
594}
595
596void decrease_tempo(uint8_t tempo_change) {
597 note_tempo += tempo_change;
598}
599
600void increase_tempo(uint8_t tempo_change) {
601 if (note_tempo - tempo_change < 10) {
602 note_tempo = 10;
603 } else {
604 note_tempo -= tempo_change;
605 }
606}
diff --git a/quantum/audio/luts.c b/quantum/audio/luts.c
index 57f2d5924..4404aff43 100644
--- a/quantum/audio/luts.c
+++ b/quantum/audio/luts.c
@@ -14,9 +14,6 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17#include <avr/io.h>
18#include <avr/interrupt.h>
19#include <avr/pgmspace.h>
20#include "luts.h" 17#include "luts.h"
21 18
22const float vibrato_lut[VIBRATO_LUT_LENGTH] = 19const float vibrato_lut[VIBRATO_LUT_LENGTH] =
diff --git a/quantum/audio/luts.h b/quantum/audio/luts.h
index 155e34e88..a377a6c87 100644
--- a/quantum/audio/luts.h
+++ b/quantum/audio/luts.h
@@ -14,9 +14,14 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17#include <avr/io.h> 17#if defined(__AVR__)
18#include <avr/interrupt.h> 18 #include <avr/io.h>
19#include <avr/pgmspace.h> 19 #include <avr/interrupt.h>
20 #include <avr/pgmspace.h>
21#else
22 #include "ch.h"
23 #include "hal.h"
24#endif
20 25
21#ifndef LUTS_H 26#ifndef LUTS_H
22#define LUTS_H 27#define LUTS_H
diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h
index 9403a6b5e..1cf33095a 100644
--- a/quantum/audio/voices.h
+++ b/quantum/audio/voices.h
@@ -15,8 +15,10 @@
15 */ 15 */
16#include <stdint.h> 16#include <stdint.h>
17#include <stdbool.h> 17#include <stdbool.h>
18#include <avr/io.h> 18#if defined(__AVR__)
19#include <util/delay.h> 19 #include <avr/io.h>
20#endif
21#include "wait.h"
20#include "luts.h" 22#include "luts.h"
21 23
22#ifndef VOICES_H 24#ifndef VOICES_H
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index 61e0a847d..c938eaeb9 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -143,7 +143,7 @@ MCUFLAGS = -mcpu=$(MCU)
143 143
144DEBUG = gdb 144DEBUG = gdb
145 145
146DFU_ARGS = 146DFU_ARGS ?=
147ifneq ("$(SERIAL)","") 147ifneq ("$(SERIAL)","")
148 DFU_ARGS += -S $(SERIAL) 148 DFU_ARGS += -S $(SERIAL)
149endif 149endif
@@ -157,4 +157,4 @@ dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter
157 $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin 157 $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
158 158
159bin: $(BUILD_DIR)/$(TARGET).bin sizeafter 159bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
160 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; \ No newline at end of file 160 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
diff --git a/tmk_core/common/chibios/bootloader.c b/tmk_core/common/chibios/bootloader.c
index 8a533ab6f..fc17fca1b 100644
--- a/tmk_core/common/chibios/bootloader.c
+++ b/tmk_core/common/chibios/bootloader.c
@@ -16,6 +16,19 @@ void bootloader_jump(void) {
16 NVIC_SystemReset(); 16 NVIC_SystemReset();
17} 17}
18 18
19#elif defined(STM32F3XX)
20/* This code should be checked whether it runs correctly on platforms.
21 * It was added for clueboard60 BUT HAS NOT BEEN TESTED.
22 * FIXME - Test this
23 */
24#define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0))
25extern uint32_t __ram0_end__;
26
27void bootloader_jump(void) {
28 *((unsigned long *)(SYMVAL(__ram0_end__) - 4)) = 0xDEADBEEF; // set magic flag => reset handler will jump into boot loader
29 NVIC_SystemReset();
30}
31
19#else /* defined(STM32F0XX) */ 32#else /* defined(STM32F0XX) */
20#error Check that the bootloader code works on your platform and add it to bootloader.c! 33#error Check that the bootloader code works on your platform and add it to bootloader.c!
21#endif /* defined(STM32F0XX) */ 34#endif /* defined(STM32F0XX) */
@@ -35,8 +48,9 @@ void bootloader_jump(void) {
35 48
36#else /* defined(KIIBOHD_BOOTLOADER) */ 49#else /* defined(KIIBOHD_BOOTLOADER) */
37/* Default for Kinetis - expecting an ARM Teensy */ 50/* Default for Kinetis - expecting an ARM Teensy */
51#include "wait.h"
38void bootloader_jump(void) { 52void bootloader_jump(void) {
39 chThdSleepMilliseconds(100); 53 wait_ms(100);
40 __BKPT(0); 54 __BKPT(0);
41} 55}
42#endif /* defined(KIIBOHD_BOOTLOADER) */ 56#endif /* defined(KIIBOHD_BOOTLOADER) */
@@ -44,4 +58,4 @@ void bootloader_jump(void) {
44#else /* neither STM32 nor KINETIS */ 58#else /* neither STM32 nor KINETIS */
45__attribute__((weak)) 59__attribute__((weak))
46void bootloader_jump(void) {} 60void bootloader_jump(void) {}
47#endif \ No newline at end of file 61#endif
diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c
index 6ca16034f..7c3c75387 100644
--- a/tmk_core/common/chibios/suspend.c
+++ b/tmk_core/common/chibios/suspend.c
@@ -10,10 +10,11 @@
10#include "host.h" 10#include "host.h"
11#include "backlight.h" 11#include "backlight.h"
12#include "suspend.h" 12#include "suspend.h"
13#include "wait.h"
13 14
14void suspend_idle(uint8_t time) { 15void suspend_idle(uint8_t time) {
15 // TODO: this is not used anywhere - what units is 'time' in? 16 // TODO: this is not used anywhere - what units is 'time' in?
16 chThdSleepMilliseconds(time); 17 wait_ms(time);
17} 18}
18 19
19void suspend_power_down(void) { 20void suspend_power_down(void) {
@@ -24,7 +25,7 @@ void suspend_power_down(void) {
24 // on AVR, this enables the watchdog for 15ms (max), and goes to 25 // on AVR, this enables the watchdog for 15ms (max), and goes to
25 // SLEEP_MODE_PWR_DOWN 26 // SLEEP_MODE_PWR_DOWN
26 27
27 chThdSleepMilliseconds(17); 28 wait_ms(17);
28} 29}
29 30
30__attribute__ ((weak)) void matrix_power_up(void) {} 31__attribute__ ((weak)) void matrix_power_up(void) {}
diff --git a/tmk_core/common/wait.h b/tmk_core/common/wait.h
index bdcb3f2a4..553f5243f 100644
--- a/tmk_core/common/wait.h
+++ b/tmk_core/common/wait.h
@@ -11,10 +11,15 @@ extern "C" {
11# include <util/delay.h> 11# include <util/delay.h>
12# define wait_ms(ms) _delay_ms(ms) 12# define wait_ms(ms) _delay_ms(ms)
13# define wait_us(us) _delay_us(us) 13# define wait_us(us) _delay_us(us)
14#elif defined(PROTOCOL_CHIBIOS) 14#elif defined PROTOCOL_CHIBIOS
15# include "ch.h" 15# include "ch.h"
16# define wait_ms(ms) chThdSleepMilliseconds(ms) 16# if defined(STM32F3xx_MCUCONF)
17# define wait_us(us) chThdSleepMicroseconds(us) 17# define wait_ms(ms) chSysPolledDelayX(MS2RTC(STM32_HCLK, (ms)))
18# define wait_us(us) chSysPolledDelayX(US2RTC(STM32_HCLK, (us)))
19# else
20# define wait_ms(ms) chThdSleepMilliseconds(ms)
21# define wait_us(us) chThdSleepMicroseconds(us)
22# endif
18#elif defined(__arm__) 23#elif defined(__arm__)
19# include "wait_api.h" 24# include "wait_api.h"
20#else // Unit tests 25#else // Unit tests
diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c
index b0eb9aef8..7138b5535 100644
--- a/tmk_core/protocol/chibios/main.c
+++ b/tmk_core/protocol/chibios/main.c
@@ -42,7 +42,7 @@
42#include "visualizer/visualizer.h" 42#include "visualizer/visualizer.h"
43#endif 43#endif
44#include "suspend.h" 44#include "suspend.h"
45 45#include "wait.h"
46 46
47/* ------------------------- 47/* -------------------------
48 * TMK host driver defs 48 * TMK host driver defs
@@ -70,19 +70,19 @@ host_driver_t chibios_driver = {
70 * Amber LED blinker thread, times are in milliseconds. 70 * Amber LED blinker thread, times are in milliseconds.
71 */ 71 */
72/* set this variable to non-zero anywhere to blink once */ 72/* set this variable to non-zero anywhere to blink once */
73// uint8_t blinkLed = 0; 73// static THD_WORKING_AREA(waThread1, 128);
74// static THD_WORKING_AREA(waBlinkerThread, 128); 74// static THD_FUNCTION(Thread1, arg) {
75// static THD_FUNCTION(blinkerThread, arg) { 75
76// (void)arg; 76// (void)arg;
77// chRegSetThreadName("blinkOrange"); 77// chRegSetThreadName("blinker");
78// while(true) { 78// while (true) {
79// if(blinkLed) { 79// systime_t time;
80// blinkLed = 0; 80
81// palSetPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13); 81// time = USB_DRIVER.state == USB_ACTIVE ? 250 : 500;
82// chThdSleepMilliseconds(100); 82// palClearLine(LINE_CAPS_LOCK);
83// palClearPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13); 83// chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
84// } 84// palSetLine(LINE_CAPS_LOCK);
85// chThdSleepMilliseconds(100); 85// chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
86// } 86// }
87// } 87// }
88 88
@@ -96,7 +96,7 @@ int main(void) {
96 chSysInit(); 96 chSysInit();
97 97
98 // TESTING 98 // TESTING
99 // chThdCreateStatic(waBlinkerThread, sizeof(waBlinkerThread), NORMALPRIO, blinkerThread, NULL); 99 // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
100 100
101 /* Init USB */ 101 /* Init USB */
102 init_usb_driver(&USB_DRIVER); 102 init_usb_driver(&USB_DRIVER);
@@ -128,7 +128,7 @@ int main(void) {
128 } 128 }
129 serial_link_update(); 129 serial_link_update();
130#endif 130#endif
131 chThdSleepMilliseconds(50); 131 wait_ms(50);
132 } 132 }
133 133
134 /* Do need to wait here! 134 /* Do need to wait here!
@@ -136,7 +136,7 @@ int main(void) {
136 * before the USB is completely ready, which sometimes causes 136 * before the USB is completely ready, which sometimes causes
137 * HardFaults. 137 * HardFaults.
138 */ 138 */
139 chThdSleepMilliseconds(50); 139 wait_ms(50);
140 140
141 print("USB configured.\n"); 141 print("USB configured.\n");
142 142
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index d0c72c46c..59edab9bd 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -27,6 +27,7 @@
27#include "sleep_led.h" 27#include "sleep_led.h"
28#include "led.h" 28#include "led.h"
29#endif 29#endif
30#include "wait.h"
30 31
31#ifdef NKRO_ENABLE 32#ifdef NKRO_ENABLE
32 #include "keycode_config.h" 33 #include "keycode_config.h"
@@ -39,6 +40,14 @@
39 * --------------------------------------------------------- 40 * ---------------------------------------------------------
40 */ 41 */
41 42
43#ifndef usb_lld_connect_bus
44 #define usb_lld_connect_bus(usbp)
45#endif
46
47#ifndef usb_lld_disconnect_bus
48 #define usb_lld_disconnect_bus(usbp)
49#endif
50
42uint8_t keyboard_idle __attribute__((aligned(2))) = 0; 51uint8_t keyboard_idle __attribute__((aligned(2))) = 0;
43uint8_t keyboard_protocol __attribute__((aligned(2))) = 1; 52uint8_t keyboard_protocol __attribute__((aligned(2))) = 1;
44uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0; 53uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0;
@@ -1017,7 +1026,7 @@ void init_usb_driver(USBDriver *usbp) {
1017 * after a reset. 1026 * after a reset.
1018 */ 1027 */
1019 usbDisconnectBus(usbp); 1028 usbDisconnectBus(usbp);
1020 chThdSleepMilliseconds(1500); 1029 wait_ms(1500);
1021 usbStart(usbp, &usbcfg); 1030 usbStart(usbp, &usbcfg);
1022 usbConnectBus(usbp); 1031 usbConnectBus(usbp);
1023 1032
@@ -1037,16 +1046,16 @@ void send_remote_wakeup(USBDriver *usbp) {
1037#if defined(K20x) || defined(KL2x) 1046#if defined(K20x) || defined(KL2x)
1038#if KINETIS_USB_USE_USB0 1047#if KINETIS_USB_USE_USB0
1039 USB0->CTL |= USBx_CTL_RESUME; 1048 USB0->CTL |= USBx_CTL_RESUME;
1040 chThdSleepMilliseconds(15); 1049 wait_ms(15);
1041 USB0->CTL &= ~USBx_CTL_RESUME; 1050 USB0->CTL &= ~USBx_CTL_RESUME;
1042#endif /* KINETIS_USB_USE_USB0 */ 1051#endif /* KINETIS_USB_USE_USB0 */
1043#elif defined(STM32F0XX) || defined(STM32F1XX) /* K20x || KL2x */ 1052#elif defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) /* End K20x || KL2x */
1044 STM32_USB->CNTR |= CNTR_RESUME; 1053 STM32_USB->CNTR |= CNTR_RESUME;
1045 chThdSleepMilliseconds(15); 1054 wait_ms(15);
1046 STM32_USB->CNTR &= ~CNTR_RESUME; 1055 STM32_USB->CNTR &= ~CNTR_RESUME;
1047#else /* STM32F0XX || STM32F1XX */ 1056#else /* End STM32F0XX || STM32F1XX || STM32F3XX */
1048#warning Sending remote wakeup packet not implemented for your platform. 1057#warning Sending remote wakeup packet not implemented for your platform.
1049#endif /* K20x || KL2x */ 1058#endif
1050} 1059}
1051 1060
1052/* --------------------------------------------------------- 1061/* ---------------------------------------------------------
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index aef4d5e55..73ffeaac1 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -385,4 +385,4 @@ $(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
385.PHONY : all finish sizebefore sizeafter qmkversion \ 385.PHONY : all finish sizebefore sizeafter qmkversion \
386gccversion build elf hex eep lss sym coff extcoff \ 386gccversion build elf hex eep lss sym coff extcoff \
387clean clean_list debug gdb-config show_path \ 387clean clean_list debug gdb-config show_path \
388program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file 388program teensy dfu flip dfu-ee flip-ee dfu-start