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