diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/config_common.h | 199 | ||||
-rw-r--r-- | quantum/matrix.c | 49 | ||||
-rw-r--r-- | quantum/quantum.h | 69 |
3 files changed, 221 insertions, 96 deletions
diff --git a/quantum/config_common.h b/quantum/config_common.h index f6f51b367..288617255 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h | |||
@@ -23,57 +23,154 @@ | |||
23 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ | 23 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ |
24 | 24 | ||
25 | #ifdef __AVR__ | 25 | #ifdef __AVR__ |
26 | /* I/O pins */ | 26 | /* I/O pins */ |
27 | #ifndef F0 | 27 | #ifndef F0 |
28 | #define B0 0x30 | 28 | #define B0 0x30 |
29 | #define B1 0x31 | 29 | #define B1 0x31 |
30 | #define B2 0x32 | 30 | #define B2 0x32 |
31 | #define B3 0x33 | 31 | #define B3 0x33 |
32 | #define B4 0x34 | 32 | #define B4 0x34 |
33 | #define B5 0x35 | 33 | #define B5 0x35 |
34 | #define B6 0x36 | 34 | #define B6 0x36 |
35 | #define B7 0x37 | 35 | #define B7 0x37 |
36 | #define C0 0x60 | 36 | #define C0 0x60 |
37 | #define C1 0x61 | 37 | #define C1 0x61 |
38 | #define C2 0x62 | 38 | #define C2 0x62 |
39 | #define C3 0x63 | 39 | #define C3 0x63 |
40 | #define C4 0x64 | 40 | #define C4 0x64 |
41 | #define C5 0x65 | 41 | #define C5 0x65 |
42 | #define C6 0x66 | 42 | #define C6 0x66 |
43 | #define C7 0x67 | 43 | #define C7 0x67 |
44 | #define D0 0x90 | 44 | #define D0 0x90 |
45 | #define D1 0x91 | 45 | #define D1 0x91 |
46 | #define D2 0x92 | 46 | #define D2 0x92 |
47 | #define D3 0x93 | 47 | #define D3 0x93 |
48 | #define D4 0x94 | 48 | #define D4 0x94 |
49 | #define D5 0x95 | 49 | #define D5 0x95 |
50 | #define D6 0x96 | 50 | #define D6 0x96 |
51 | #define D7 0x97 | 51 | #define D7 0x97 |
52 | #define E0 0xC0 | 52 | #define E0 0xC0 |
53 | #define E1 0xC1 | 53 | #define E1 0xC1 |
54 | #define E2 0xC2 | 54 | #define E2 0xC2 |
55 | #define E3 0xC3 | 55 | #define E3 0xC3 |
56 | #define E4 0xC4 | 56 | #define E4 0xC4 |
57 | #define E5 0xC5 | 57 | #define E5 0xC5 |
58 | #define E6 0xC6 | 58 | #define E6 0xC6 |
59 | #define E7 0xC7 | 59 | #define E7 0xC7 |
60 | #define F0 0xF0 | 60 | #define F0 0xF0 |
61 | #define F1 0xF1 | 61 | #define F1 0xF1 |
62 | #define F2 0xF2 | 62 | #define F2 0xF2 |
63 | #define F3 0xF3 | 63 | #define F3 0xF3 |
64 | #define F4 0xF4 | 64 | #define F4 0xF4 |
65 | #define F5 0xF5 | 65 | #define F5 0xF5 |
66 | #define F6 0xF6 | 66 | #define F6 0xF6 |
67 | #define F7 0xF7 | 67 | #define F7 0xF7 |
68 | #define A0 0x00 | 68 | #define A0 0x00 |
69 | #define A1 0x01 | 69 | #define A1 0x01 |
70 | #define A2 0x02 | 70 | #define A2 0x02 |
71 | #define A3 0x03 | 71 | #define A3 0x03 |
72 | #define A4 0x04 | 72 | #define A4 0x04 |
73 | #define A5 0x05 | 73 | #define A5 0x05 |
74 | #define A6 0x06 | 74 | #define A6 0x06 |
75 | #define A7 0x07 | 75 | #define A7 0x07 |
76 | #endif | 76 | #endif |
77 | #elif defined(PROTOCOL_CHIBIOS) | ||
78 | #define A0 PAL_LINE(GPIOA, 0) | ||
79 | #define A1 PAL_LINE(GPIOA, 1) | ||
80 | #define A2 PAL_LINE(GPIOA, 2) | ||
81 | #define A3 PAL_LINE(GPIOA, 3) | ||
82 | #define A4 PAL_LINE(GPIOA, 4) | ||
83 | #define A5 PAL_LINE(GPIOA, 5) | ||
84 | #define A6 PAL_LINE(GPIOA, 6) | ||
85 | #define A7 PAL_LINE(GPIOA, 7) | ||
86 | #define A8 PAL_LINE(GPIOA, 8) | ||
87 | #define A9 PAL_LINE(GPIOA, 9) | ||
88 | #define A10 PAL_LINE(GPIOA, 10) | ||
89 | #define A11 PAL_LINE(GPIOA, 11) | ||
90 | #define A12 PAL_LINE(GPIOA, 12) | ||
91 | #define A13 PAL_LINE(GPIOA, 13) | ||
92 | #define A14 PAL_LINE(GPIOA, 14) | ||
93 | #define A15 PAL_LINE(GPIOA, 15) | ||
94 | #define B0 PAL_LINE(GPIOB, 0) | ||
95 | #define B1 PAL_LINE(GPIOB, 1) | ||
96 | #define B2 PAL_LINE(GPIOB, 2) | ||
97 | #define B3 PAL_LINE(GPIOB, 3) | ||
98 | #define B4 PAL_LINE(GPIOB, 4) | ||
99 | #define B5 PAL_LINE(GPIOB, 5) | ||
100 | #define B6 PAL_LINE(GPIOB, 6) | ||
101 | #define B7 PAL_LINE(GPIOB, 7) | ||
102 | #define B8 PAL_LINE(GPIOB, 8) | ||
103 | #define B9 PAL_LINE(GPIOB, 9) | ||
104 | #define B10 PAL_LINE(GPIOB, 10) | ||
105 | #define B11 PAL_LINE(GPIOB, 11) | ||
106 | #define B12 PAL_LINE(GPIOB, 12) | ||
107 | #define B13 PAL_LINE(GPIOB, 13) | ||
108 | #define B14 PAL_LINE(GPIOB, 14) | ||
109 | #define B15 PAL_LINE(GPIOB, 15) | ||
110 | #define C0 PAL_LINE(GPIOC, 0) | ||
111 | #define C1 PAL_LINE(GPIOC, 1) | ||
112 | #define C2 PAL_LINE(GPIOC, 2) | ||
113 | #define C3 PAL_LINE(GPIOC, 3) | ||
114 | #define C4 PAL_LINE(GPIOC, 4) | ||
115 | #define C5 PAL_LINE(GPIOC, 5) | ||
116 | #define C6 PAL_LINE(GPIOC, 6) | ||
117 | #define C7 PAL_LINE(GPIOC, 7) | ||
118 | #define C8 PAL_LINE(GPIOC, 8) | ||
119 | #define C9 PAL_LINE(GPIOC, 9) | ||
120 | #define C10 PAL_LINE(GPIOC, 10) | ||
121 | #define C11 PAL_LINE(GPIOC, 11) | ||
122 | #define C12 PAL_LINE(GPIOC, 12) | ||
123 | #define C13 PAL_LINE(GPIOC, 13) | ||
124 | #define C14 PAL_LINE(GPIOC, 14) | ||
125 | #define C15 PAL_LINE(GPIOC, 15) | ||
126 | #define D0 PAL_LINE(GPIOD, 0) | ||
127 | #define D1 PAL_LINE(GPIOD, 1) | ||
128 | #define D2 PAL_LINE(GPIOD, 2) | ||
129 | #define D3 PAL_LINE(GPIOD, 3) | ||
130 | #define D4 PAL_LINE(GPIOD, 4) | ||
131 | #define D5 PAL_LINE(GPIOD, 5) | ||
132 | #define D6 PAL_LINE(GPIOD, 6) | ||
133 | #define D7 PAL_LINE(GPIOD, 7) | ||
134 | #define D8 PAL_LINE(GPIOD, 8) | ||
135 | #define D9 PAL_LINE(GPIOD, 9) | ||
136 | #define D10 PAL_LINE(GPIOD, 10) | ||
137 | #define D11 PAL_LINE(GPIOD, 11) | ||
138 | #define D12 PAL_LINE(GPIOD, 12) | ||
139 | #define D13 PAL_LINE(GPIOD, 13) | ||
140 | #define D14 PAL_LINE(GPIOD, 14) | ||
141 | #define D15 PAL_LINE(GPIOD, 15) | ||
142 | #define E0 PAL_LINE(GPIOE, 0) | ||
143 | #define E1 PAL_LINE(GPIOE, 1) | ||
144 | #define E2 PAL_LINE(GPIOE, 2) | ||
145 | #define E3 PAL_LINE(GPIOE, 3) | ||
146 | #define E4 PAL_LINE(GPIOE, 4) | ||
147 | #define E5 PAL_LINE(GPIOE, 5) | ||
148 | #define E6 PAL_LINE(GPIOE, 6) | ||
149 | #define E7 PAL_LINE(GPIOE, 7) | ||
150 | #define E8 PAL_LINE(GPIOE, 8) | ||
151 | #define E9 PAL_LINE(GPIOE, 9) | ||
152 | #define E10 PAL_LINE(GPIOE, 10) | ||
153 | #define E11 PAL_LINE(GPIOE, 11) | ||
154 | #define E12 PAL_LINE(GPIOE, 12) | ||
155 | #define E13 PAL_LINE(GPIOE, 13) | ||
156 | #define E14 PAL_LINE(GPIOE, 14) | ||
157 | #define E15 PAL_LINE(GPIOE, 15) | ||
158 | #define F0 PAL_LINE(GPIOF, 0) | ||
159 | #define F1 PAL_LINE(GPIOF, 1) | ||
160 | #define F2 PAL_LINE(GPIOF, 2) | ||
161 | #define F3 PAL_LINE(GPIOF, 3) | ||
162 | #define F4 PAL_LINE(GPIOF, 4) | ||
163 | #define F5 PAL_LINE(GPIOF, 5) | ||
164 | #define F6 PAL_LINE(GPIOF, 6) | ||
165 | #define F7 PAL_LINE(GPIOF, 7) | ||
166 | #define F8 PAL_LINE(GPIOF, 8) | ||
167 | #define F9 PAL_LINE(GPIOF, 9) | ||
168 | #define F10 PAL_LINE(GPIOF, 10) | ||
169 | #define F11 PAL_LINE(GPIOF, 11) | ||
170 | #define F12 PAL_LINE(GPIOF, 12) | ||
171 | #define F13 PAL_LINE(GPIOF, 13) | ||
172 | #define F14 PAL_LINE(GPIOF, 14) | ||
173 | #define F15 PAL_LINE(GPIOF, 15) | ||
77 | #endif | 174 | #endif |
78 | 175 | ||
79 | /* USART configuration */ | 176 | /* USART configuration */ |
diff --git a/quantum/matrix.c b/quantum/matrix.c index 3600d4e7b..9b5ce33d2 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | Copyright 2012-2017 Jun Wako, Jack Humbert | 2 | Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar |
3 | 3 | ||
4 | This program is free software: you can redistribute it and/or modify | 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 | 5 | it under the terms of the GNU General Public License as published by |
@@ -16,15 +16,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
16 | */ | 16 | */ |
17 | #include <stdint.h> | 17 | #include <stdint.h> |
18 | #include <stdbool.h> | 18 | #include <stdbool.h> |
19 | #if defined(__AVR__) | ||
20 | #include <avr/io.h> | ||
21 | #endif | ||
22 | #include "wait.h" | 19 | #include "wait.h" |
23 | #include "print.h" | 20 | #include "print.h" |
24 | #include "debug.h" | 21 | #include "debug.h" |
25 | #include "util.h" | 22 | #include "util.h" |
26 | #include "matrix.h" | 23 | #include "matrix.h" |
27 | #include "timer.h" | 24 | #include "timer.h" |
25 | #include "quantum.h" | ||
28 | 26 | ||
29 | 27 | ||
30 | /* Set 0 if debouncing isn't needed */ | 28 | /* Set 0 if debouncing isn't needed */ |
@@ -60,8 +58,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
60 | #endif | 58 | #endif |
61 | 59 | ||
62 | #if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW) | 60 | #if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW) |
63 | static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; | 61 | static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; |
64 | static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; | 62 | static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; |
65 | #endif | 63 | #endif |
66 | 64 | ||
67 | /* matrix state(1:on, 0:off) */ | 65 | /* matrix state(1:on, 0:off) */ |
@@ -271,9 +269,7 @@ uint8_t matrix_key_count(void) | |||
271 | static void init_cols(void) | 269 | static void init_cols(void) |
272 | { | 270 | { |
273 | for(uint8_t x = 0; x < MATRIX_COLS; x++) { | 271 | for(uint8_t x = 0; x < MATRIX_COLS; x++) { |
274 | uint8_t pin = col_pins[x]; | 272 | setPinInputHigh(col_pins[x]); |
275 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
276 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
277 | } | 273 | } |
278 | } | 274 | } |
279 | 275 | ||
@@ -293,8 +289,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) | |||
293 | for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { | 289 | for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { |
294 | 290 | ||
295 | // Select the col pin to read (active low) | 291 | // Select the col pin to read (active low) |
296 | uint8_t pin = col_pins[col_index]; | 292 | uint8_t pin_state = readPin(col_pins[col_index]); |
297 | uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); | ||
298 | 293 | ||
299 | // Populate the matrix row with the state of the col pin | 294 | // Populate the matrix row with the state of the col pin |
300 | current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); | 295 | current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); |
@@ -308,24 +303,19 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) | |||
308 | 303 | ||
309 | static void select_row(uint8_t row) | 304 | static void select_row(uint8_t row) |
310 | { | 305 | { |
311 | uint8_t pin = row_pins[row]; | 306 | setPinOutput(row_pins[row]); |
312 | _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT | 307 | writePinLow(row_pins[row]); |
313 | _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW | ||
314 | } | 308 | } |
315 | 309 | ||
316 | static void unselect_row(uint8_t row) | 310 | static void unselect_row(uint8_t row) |
317 | { | 311 | { |
318 | uint8_t pin = row_pins[row]; | 312 | setPinInputHigh(row_pins[row]); |
319 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
320 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
321 | } | 313 | } |
322 | 314 | ||
323 | static void unselect_rows(void) | 315 | static void unselect_rows(void) |
324 | { | 316 | { |
325 | for(uint8_t x = 0; x < MATRIX_ROWS; x++) { | 317 | for(uint8_t x = 0; x < MATRIX_ROWS; x++) { |
326 | uint8_t pin = row_pins[x]; | 318 | setPinInput(row_pins[x]); |
327 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
328 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
329 | } | 319 | } |
330 | } | 320 | } |
331 | 321 | ||
@@ -334,9 +324,7 @@ static void unselect_rows(void) | |||
334 | static void init_rows(void) | 324 | static void init_rows(void) |
335 | { | 325 | { |
336 | for(uint8_t x = 0; x < MATRIX_ROWS; x++) { | 326 | for(uint8_t x = 0; x < MATRIX_ROWS; x++) { |
337 | uint8_t pin = row_pins[x]; | 327 | setPinInputHigh(row_pins[x]); |
338 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
339 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
340 | } | 328 | } |
341 | } | 329 | } |
342 | 330 | ||
@@ -356,7 +344,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) | |||
356 | matrix_row_t last_row_value = current_matrix[row_index]; | 344 | matrix_row_t last_row_value = current_matrix[row_index]; |
357 | 345 | ||
358 | // Check row pin state | 346 | // Check row pin state |
359 | if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) | 347 | if (readPin(row_pins[row_index]) == 0) |
360 | { | 348 | { |
361 | // Pin LO, set col bit | 349 | // Pin LO, set col bit |
362 | current_matrix[row_index] |= (ROW_SHIFTER << current_col); | 350 | current_matrix[row_index] |= (ROW_SHIFTER << current_col); |
@@ -382,24 +370,19 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) | |||
382 | 370 | ||
383 | static void select_col(uint8_t col) | 371 | static void select_col(uint8_t col) |
384 | { | 372 | { |
385 | uint8_t pin = col_pins[col]; | 373 | setPinOutput(col_pins[col]); |
386 | _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT | 374 | writePinLow(col_pins[col]); |
387 | _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW | ||
388 | } | 375 | } |
389 | 376 | ||
390 | static void unselect_col(uint8_t col) | 377 | static void unselect_col(uint8_t col) |
391 | { | 378 | { |
392 | uint8_t pin = col_pins[col]; | 379 | setPinInputHigh(col_pins[col]); |
393 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
394 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
395 | } | 380 | } |
396 | 381 | ||
397 | static void unselect_cols(void) | 382 | static void unselect_cols(void) |
398 | { | 383 | { |
399 | for(uint8_t x = 0; x < MATRIX_COLS; x++) { | 384 | for(uint8_t x = 0; x < MATRIX_COLS; x++) { |
400 | uint8_t pin = col_pins[x]; | 385 | setPinInputHigh(col_pins[x]); |
401 | _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN | ||
402 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI | ||
403 | } | 386 | } |
404 | } | 387 | } |
405 | 388 | ||
diff --git a/quantum/quantum.h b/quantum/quantum.h index 7cf16d81e..683333211 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* Copyright 2016-2017 Erez Zukerman, Jack Humbert | 1 | /* Copyright 2016-2018 Erez Zukerman, Jack Humbert, Yiancar |
2 | * | 2 | * |
3 | * This program is free software: you can redistribute it and/or modify | 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 | 4 | * it under the terms of the GNU General Public License as published by |
@@ -17,9 +17,12 @@ | |||
17 | #define QUANTUM_H | 17 | #define QUANTUM_H |
18 | 18 | ||
19 | #if defined(__AVR__) | 19 | #if defined(__AVR__) |
20 | #include <avr/pgmspace.h> | 20 | #include <avr/pgmspace.h> |
21 | #include <avr/io.h> | 21 | #include <avr/io.h> |
22 | #include <avr/interrupt.h> | 22 | #include <avr/interrupt.h> |
23 | #endif | ||
24 | #if defined(PROTOCOL_CHIBIOS) | ||
25 | #include "hal.h" | ||
23 | #endif | 26 | #endif |
24 | #include "wait.h" | 27 | #include "wait.h" |
25 | #include "matrix.h" | 28 | #include "matrix.h" |
@@ -33,11 +36,11 @@ | |||
33 | #ifdef RGBLIGHT_ENABLE | 36 | #ifdef RGBLIGHT_ENABLE |
34 | #include "rgblight.h" | 37 | #include "rgblight.h" |
35 | #else | 38 | #else |
36 | #ifdef RGB_MATRIX_ENABLE | 39 | #ifdef RGB_MATRIX_ENABLE |
37 | /* dummy define RGBLIGHT_MODE_xxxx */ | 40 | /* dummy define RGBLIGHT_MODE_xxxx */ |
38 | #define RGBLIGHT_H_DUMMY_DEFINE | 41 | #define RGBLIGHT_H_DUMMY_DEFINE |
39 | #include "rgblight.h" | 42 | #include "rgblight.h" |
40 | #endif | 43 | #endif |
41 | #endif | 44 | #endif |
42 | 45 | ||
43 | #ifdef SPLIT_KEYBOARD | 46 | #ifdef SPLIT_KEYBOARD |
@@ -76,9 +79,9 @@ extern uint32_t default_layer_state; | |||
76 | #ifdef AUDIO_ENABLE | 79 | #ifdef AUDIO_ENABLE |
77 | #include "audio.h" | 80 | #include "audio.h" |
78 | #include "process_audio.h" | 81 | #include "process_audio.h" |
79 | #ifdef AUDIO_CLICKY | 82 | #ifdef AUDIO_CLICKY |
80 | #include "process_clicky.h" | 83 | #include "process_clicky.h" |
81 | #endif // AUDIO_CLICKY | 84 | #endif // AUDIO_CLICKY |
82 | #endif | 85 | #endif |
83 | 86 | ||
84 | #ifdef STENO_ENABLE | 87 | #ifdef STENO_ENABLE |
@@ -133,6 +136,48 @@ extern uint32_t default_layer_state; | |||
133 | #include "hd44780.h" | 136 | #include "hd44780.h" |
134 | #endif | 137 | #endif |
135 | 138 | ||
139 | //Function substitutions to ease GPIO manipulation | ||
140 | #ifdef __AVR__ | ||
141 | #define pin_t uint8_t | ||
142 | #define setPinInput(pin) _SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF) | ||
143 | #define setPinInputHigh(pin) ({\ | ||
144 | _SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF);\ | ||
145 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);\ | ||
146 | }) | ||
147 | #define setPinInputLow(pin) _Static_assert(0, "AVR Processors cannot impliment an input as pull low") | ||
148 | #define setPinOutput(pin) _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF) | ||
149 | |||
150 | #define writePinHigh(pin) _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF) | ||
151 | #define writePinLow(pin) _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF) | ||
152 | static inline void writePin(pin_t pin, uint8_t level){ | ||
153 | if (level){ | ||
154 | _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); | ||
155 | } else { | ||
156 | _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); | ||
157 | } | ||
158 | } | ||
159 | |||
160 | #define readPin(pin) (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) | ||
161 | #elif defined(PROTOCOL_CHIBIOS) | ||
162 | #define pin_t ioline_t | ||
163 | #define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT) | ||
164 | #define setPinInputHigh(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLUP) | ||
165 | #define setPinInputLow(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN) | ||
166 | #define setPinOutput(pin) palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL) | ||
167 | |||
168 | #define writePinHigh(pin) palSetLine(pin) | ||
169 | #define writePinLow(pin) palClearLine(pin) | ||
170 | static inline void writePin(pin_t pin, uint8_t level){ | ||
171 | if (level){ | ||
172 | palSetLine(pin); | ||
173 | } else { | ||
174 | palClearLine(pin); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | #define readPin(pin) palReadLine(pin) | ||
179 | #endif | ||
180 | |||
136 | #define STRINGIZE(z) #z | 181 | #define STRINGIZE(z) #z |
137 | #define ADD_SLASH_X(y) STRINGIZE(\x ## y) | 182 | #define ADD_SLASH_X(y) STRINGIZE(\x ## y) |
138 | #define SYMBOL_STR(x) ADD_SLASH_X(x) | 183 | #define SYMBOL_STR(x) ADD_SLASH_X(x) |