Enforce definition of `DIODE_DIRECTION` for non-custom matrix boards (#7915)
[jackhill/qmk/firmware.git] / quantum / config_common.h
1 /* Copyright 2015-2018 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 #pragma once
18
19 /* diode directions */
20 #define COL2ROW 0
21 #define ROW2COL 1
22 #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */
23
24 // useful for direct pin mapping
25 #define NO_PIN (~0)
26
27 #ifdef __AVR__
28 # ifndef __ASSEMBLER__
29 # include <avr/io.h>
30 # endif
31 # define PORT_SHIFTER 4 // this may be 4 for all AVR chips
32
33 // If you want to add more to this list, reference the PINx definitions in these header
34 // files: https://github.com/vancegroup-mirrors/avr-libc/tree/master/avr-libc/include/avr
35
36 # if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__)
37 # define ADDRESS_BASE 0x00
38 # define PINB_ADDRESS 0x3
39 # define PINC_ADDRESS 0x6
40 # define PIND_ADDRESS 0x9
41 # define PINE_ADDRESS 0xC
42 # define PINF_ADDRESS 0xF
43 # elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__)
44 # define ADDRESS_BASE 0x00
45 # define PINB_ADDRESS 0x3
46 # define PINC_ADDRESS 0x6
47 # define PIND_ADDRESS 0x9
48 # elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__)
49 # define ADDRESS_BASE 0x00
50 # define PINA_ADDRESS 0x0
51 # define PINB_ADDRESS 0x3
52 # define PINC_ADDRESS 0x6
53 # define PIND_ADDRESS 0x9
54 # define PINE_ADDRESS 0xC
55 # define PINF_ADDRESS 0xF
56 # elif defined(__AVR_ATmega32A__)
57 # define ADDRESS_BASE 0x10
58 # define PIND_ADDRESS 0x0
59 # define PINC_ADDRESS 0x3
60 # define PINB_ADDRESS 0x6
61 # define PINA_ADDRESS 0x9
62 # elif defined(__AVR_ATmega328P__)
63 # define ADDRESS_BASE 0x00
64 # define PINB_ADDRESS 0x3
65 # define PINC_ADDRESS 0x6
66 # define PIND_ADDRESS 0x9
67 # else
68 # error "Pins are not defined"
69 # endif
70
71 /* I/O pins */
72 # define PINDEF(port, pin) ((PIN##port##_ADDRESS << PORT_SHIFTER) | pin)
73
74 # ifdef PORTA
75 # define A0 PINDEF(A, 0)
76 # define A1 PINDEF(A, 1)
77 # define A2 PINDEF(A, 2)
78 # define A3 PINDEF(A, 3)
79 # define A4 PINDEF(A, 4)
80 # define A5 PINDEF(A, 5)
81 # define A6 PINDEF(A, 6)
82 # define A7 PINDEF(A, 7)
83 # endif
84 # ifdef PORTB
85 # define B0 PINDEF(B, 0)
86 # define B1 PINDEF(B, 1)
87 # define B2 PINDEF(B, 2)
88 # define B3 PINDEF(B, 3)
89 # define B4 PINDEF(B, 4)
90 # define B5 PINDEF(B, 5)
91 # define B6 PINDEF(B, 6)
92 # define B7 PINDEF(B, 7)
93 # endif
94 # ifdef PORTC
95 # define C0 PINDEF(C, 0)
96 # define C1 PINDEF(C, 1)
97 # define C2 PINDEF(C, 2)
98 # define C3 PINDEF(C, 3)
99 # define C4 PINDEF(C, 4)
100 # define C5 PINDEF(C, 5)
101 # define C6 PINDEF(C, 6)
102 # define C7 PINDEF(C, 7)
103 # endif
104 # ifdef PORTD
105 # define D0 PINDEF(D, 0)
106 # define D1 PINDEF(D, 1)
107 # define D2 PINDEF(D, 2)
108 # define D3 PINDEF(D, 3)
109 # define D4 PINDEF(D, 4)
110 # define D5 PINDEF(D, 5)
111 # define D6 PINDEF(D, 6)
112 # define D7 PINDEF(D, 7)
113 # endif
114 # ifdef PORTE
115 # define E0 PINDEF(E, 0)
116 # define E1 PINDEF(E, 1)
117 # define E2 PINDEF(E, 2)
118 # define E3 PINDEF(E, 3)
119 # define E4 PINDEF(E, 4)
120 # define E5 PINDEF(E, 5)
121 # define E6 PINDEF(E, 6)
122 # define E7 PINDEF(E, 7)
123 # endif
124 # ifdef PORTF
125 # define F0 PINDEF(F, 0)
126 # define F1 PINDEF(F, 1)
127 # define F2 PINDEF(F, 2)
128 # define F3 PINDEF(F, 3)
129 # define F4 PINDEF(F, 4)
130 # define F5 PINDEF(F, 5)
131 # define F6 PINDEF(F, 6)
132 # define F7 PINDEF(F, 7)
133 # endif
134
135 # ifndef __ASSEMBLER__
136 # define _PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset)
137 // Port X Input Pins Address
138 # define PINx_ADDRESS(p) _PIN_ADDRESS(p, 0)
139 // Port X Data Direction Register, 0:input 1:output
140 # define DDRx_ADDRESS(p) _PIN_ADDRESS(p, 1)
141 // Port X Data Register
142 # define PORTx_ADDRESS(p) _PIN_ADDRESS(p, 2)
143 # endif
144
145 #elif defined(PROTOCOL_CHIBIOS)
146 // Defines mapping for Proton C replacement
147 # ifdef CONVERT_TO_PROTON_C
148 // Left side (front)
149 # define D3 PAL_LINE(GPIOA, 9)
150 # define D2 PAL_LINE(GPIOA, 10)
151 // GND
152 // GND
153 # define D1 PAL_LINE(GPIOB, 7)
154 # define D0 PAL_LINE(GPIOB, 6)
155 # define D4 PAL_LINE(GPIOB, 5)
156 # define C6 PAL_LINE(GPIOB, 4)
157 # define D7 PAL_LINE(GPIOB, 3)
158 # define E6 PAL_LINE(GPIOB, 2)
159 # define B4 PAL_LINE(GPIOB, 1)
160 # define B5 PAL_LINE(GPIOB, 0)
161
162 // Right side (front)
163 // RAW
164 // GND
165 // RESET
166 // VCC
167 # define F4 PAL_LINE(GPIOA, 2)
168 # define F5 PAL_LINE(GPIOA, 1)
169 # define F6 PAL_LINE(GPIOA, 0)
170 # define F7 PAL_LINE(GPIOB, 8)
171 # define B1 PAL_LINE(GPIOB, 13)
172 # define B3 PAL_LINE(GPIOB, 14)
173 # define B2 PAL_LINE(GPIOB, 15)
174 # define B6 PAL_LINE(GPIOB, 9)
175
176 // LEDs (only D5/C13 uses an actual LED)
177 # ifdef CONVERT_TO_PROTON_C_RXLED
178 # define D5 PAL_LINE(GPIOC, 14)
179 # define B0 PAL_LINE(GPIOC, 13)
180 # else
181 # define D5 PAL_LINE(GPIOC, 13)
182 # define B0 PAL_LINE(GPIOC, 14)
183 # endif
184 # else
185 # define A0 PAL_LINE(GPIOA, 0)
186 # define A1 PAL_LINE(GPIOA, 1)
187 # define A2 PAL_LINE(GPIOA, 2)
188 # define A3 PAL_LINE(GPIOA, 3)
189 # define A4 PAL_LINE(GPIOA, 4)
190 # define A5 PAL_LINE(GPIOA, 5)
191 # define A6 PAL_LINE(GPIOA, 6)
192 # define A7 PAL_LINE(GPIOA, 7)
193 # define A8 PAL_LINE(GPIOA, 8)
194 # define A9 PAL_LINE(GPIOA, 9)
195 # define A10 PAL_LINE(GPIOA, 10)
196 # define A11 PAL_LINE(GPIOA, 11)
197 # define A12 PAL_LINE(GPIOA, 12)
198 # define A13 PAL_LINE(GPIOA, 13)
199 # define A14 PAL_LINE(GPIOA, 14)
200 # define A15 PAL_LINE(GPIOA, 15)
201 # define B0 PAL_LINE(GPIOB, 0)
202 # define B1 PAL_LINE(GPIOB, 1)
203 # define B2 PAL_LINE(GPIOB, 2)
204 # define B3 PAL_LINE(GPIOB, 3)
205 # define B4 PAL_LINE(GPIOB, 4)
206 # define B5 PAL_LINE(GPIOB, 5)
207 # define B6 PAL_LINE(GPIOB, 6)
208 # define B7 PAL_LINE(GPIOB, 7)
209 # define B8 PAL_LINE(GPIOB, 8)
210 # define B9 PAL_LINE(GPIOB, 9)
211 # define B10 PAL_LINE(GPIOB, 10)
212 # define B11 PAL_LINE(GPIOB, 11)
213 # define B12 PAL_LINE(GPIOB, 12)
214 # define B13 PAL_LINE(GPIOB, 13)
215 # define B14 PAL_LINE(GPIOB, 14)
216 # define B15 PAL_LINE(GPIOB, 15)
217 # define B16 PAL_LINE(GPIOB, 16)
218 # define B17 PAL_LINE(GPIOB, 17)
219 # define C0 PAL_LINE(GPIOC, 0)
220 # define C1 PAL_LINE(GPIOC, 1)
221 # define C2 PAL_LINE(GPIOC, 2)
222 # define C3 PAL_LINE(GPIOC, 3)
223 # define C4 PAL_LINE(GPIOC, 4)
224 # define C5 PAL_LINE(GPIOC, 5)
225 # define C6 PAL_LINE(GPIOC, 6)
226 # define C7 PAL_LINE(GPIOC, 7)
227 # define C8 PAL_LINE(GPIOC, 8)
228 # define C9 PAL_LINE(GPIOC, 9)
229 # define C10 PAL_LINE(GPIOC, 10)
230 # define C11 PAL_LINE(GPIOC, 11)
231 # define C12 PAL_LINE(GPIOC, 12)
232 # define C13 PAL_LINE(GPIOC, 13)
233 # define C14 PAL_LINE(GPIOC, 14)
234 # define C15 PAL_LINE(GPIOC, 15)
235 # define D0 PAL_LINE(GPIOD, 0)
236 # define D1 PAL_LINE(GPIOD, 1)
237 # define D2 PAL_LINE(GPIOD, 2)
238 # define D3 PAL_LINE(GPIOD, 3)
239 # define D4 PAL_LINE(GPIOD, 4)
240 # define D5 PAL_LINE(GPIOD, 5)
241 # define D6 PAL_LINE(GPIOD, 6)
242 # define D7 PAL_LINE(GPIOD, 7)
243 # define D8 PAL_LINE(GPIOD, 8)
244 # define D9 PAL_LINE(GPIOD, 9)
245 # define D10 PAL_LINE(GPIOD, 10)
246 # define D11 PAL_LINE(GPIOD, 11)
247 # define D12 PAL_LINE(GPIOD, 12)
248 # define D13 PAL_LINE(GPIOD, 13)
249 # define D14 PAL_LINE(GPIOD, 14)
250 # define D15 PAL_LINE(GPIOD, 15)
251 # define E0 PAL_LINE(GPIOE, 0)
252 # define E1 PAL_LINE(GPIOE, 1)
253 # define E2 PAL_LINE(GPIOE, 2)
254 # define E3 PAL_LINE(GPIOE, 3)
255 # define E4 PAL_LINE(GPIOE, 4)
256 # define E5 PAL_LINE(GPIOE, 5)
257 # define E6 PAL_LINE(GPIOE, 6)
258 # define E7 PAL_LINE(GPIOE, 7)
259 # define E8 PAL_LINE(GPIOE, 8)
260 # define E9 PAL_LINE(GPIOE, 9)
261 # define E10 PAL_LINE(GPIOE, 10)
262 # define E11 PAL_LINE(GPIOE, 11)
263 # define E12 PAL_LINE(GPIOE, 12)
264 # define E13 PAL_LINE(GPIOE, 13)
265 # define E14 PAL_LINE(GPIOE, 14)
266 # define E15 PAL_LINE(GPIOE, 15)
267 # define F0 PAL_LINE(GPIOF, 0)
268 # define F1 PAL_LINE(GPIOF, 1)
269 # define F2 PAL_LINE(GPIOF, 2)
270 # define F3 PAL_LINE(GPIOF, 3)
271 # define F4 PAL_LINE(GPIOF, 4)
272 # define F5 PAL_LINE(GPIOF, 5)
273 # define F6 PAL_LINE(GPIOF, 6)
274 # define F7 PAL_LINE(GPIOF, 7)
275 # define F8 PAL_LINE(GPIOF, 8)
276 # define F9 PAL_LINE(GPIOF, 9)
277 # define F10 PAL_LINE(GPIOF, 10)
278 # define F11 PAL_LINE(GPIOF, 11)
279 # define F12 PAL_LINE(GPIOF, 12)
280 # define F13 PAL_LINE(GPIOF, 13)
281 # define F14 PAL_LINE(GPIOF, 14)
282 # define F15 PAL_LINE(GPIOF, 15)
283 # endif
284 #endif
285
286 /* USART configuration */
287 #ifdef BLUETOOTH_ENABLE
288 # ifdef __AVR_ATmega32U4__
289 # define SERIAL_UART_BAUD 9600
290 # define SERIAL_UART_DATA UDR1
291 # define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
292 # define SERIAL_UART_RXD_VECT USART1_RX_vect
293 # define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
294 # define SERIAL_UART_INIT() \
295 do { \
296 /* baud rate */ \
297 UBRR1L = SERIAL_UART_UBRR; \
298 /* baud rate */ \
299 UBRR1H = SERIAL_UART_UBRR >> 8; \
300 /* enable TX */ \
301 UCSR1B = _BV(TXEN1); \
302 /* 8-bit data */ \
303 UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
304 sei(); \
305 } while (0)
306 # elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
307 # define SERIAL_UART_BAUD 115200
308 # define SERIAL_UART_DATA UDR1
309 /* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
310 # define SERIAL_UART_UBRR (F_CPU / (8UL * SERIAL_UART_BAUD) - 1)
311 # define SERIAL_UART_RXD_VECT USART1_RX_vect
312 # define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
313 # define SERIAL_UART_INIT() \
314 do { \
315 UCSR1A = _BV(U2X1); \
316 /* baud rate */ \
317 UBRR1L = SERIAL_UART_UBRR; \
318 /* baud rate */ \
319 UBRR1H = SERIAL_UART_UBRR >> 8; \
320 /* enable TX */ \
321 UCSR1B = _BV(TXEN1); \
322 /* 8-bit data */ \
323 UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
324 sei(); \
325 } while (0)
326 # else
327 # error "USART configuration is needed."
328 # endif
329 #endif
330
331 #define API_SYSEX_MAX_SIZE 32
332
333 #include "song_list.h"