Commit | Line | Data |
---|---|---|
15f6278a | 1 | /* Copyright 2015-2018 Jack Humbert |
23839b8c | 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 | ||
15f6278a | 17 | #pragma once |
35a81f5b | 18 | |
aaa758f1 | 19 | /* diode directions */ |
b624f32f | 20 | #define COL2ROW 0 |
21 | #define ROW2COL 1 | |
8cbf61c9 | 22 | |
28929ad0 JC |
23 | // useful for direct pin mapping |
24 | #define NO_PIN (~0) | |
25 | ||
ade22f8e | 26 | #ifdef __AVR__ |
b624f32f | 27 | # ifndef __ASSEMBLER__ |
28 | # include <avr/io.h> | |
29 | # endif | |
30 | # define PORT_SHIFTER 4 // this may be 4 for all AVR chips | |
15f6278a | 31 | |
b624f32f | 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 | |
15f6278a | 34 | |
b624f32f | 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 | |
15f6278a | 69 | |
b624f32f | 70 | /* I/O pins */ |
71 | # define PINDEF(port, pin) ((PIN##port##_ADDRESS << PORT_SHIFTER) | pin) | |
15f6278a | 72 | |
b624f32f | 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 | |
15f6278a | 133 | |
b624f32f | 134 | # ifndef __ASSEMBLER__ |
05d6e6ca | 135 | # define _PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + ((p) >> PORT_SHIFTER) + (offset)) |
b624f32f | 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 | |
1c5b0cbb | 143 | |
7fe03d08 | 144 | #elif defined(PROTOCOL_CHIBIOS) |
b624f32f | 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) | |
3cf179be | 160 | |
b624f32f | 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) | |
3cf179be | 174 | |
b624f32f | 175 | // LEDs (only D5/C13 uses an actual LED) |
176 | # ifdef CONVERT_TO_PROTON_C_RXLED | |
64c075ed | 177 | # define D5 PAL_LINE(GPIOC, 14) |
b624f32f | 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 | |
6390033e | 283 | #endif |
35a81f5b | 284 | |
aaa758f1 | 285 | /* USART configuration */ |
35a81f5b | 286 | #ifdef BLUETOOTH_ENABLE |
b624f32f | 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) | |
a91c0c47 | 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) | |
b624f32f | 325 | # else |
326 | # error "USART configuration is needed." | |
327 | # endif | |
35a81f5b JH |
328 | #endif |
329 | ||
dd685ece FS |
330 | #define API_SYSEX_MAX_SIZE 32 |
331 | ||
6a3c6677 | 332 | #include "song_list.h" |