equal
deleted
inserted
replaced
|
1 #ifndef QMSK_SWITCH_H |
|
2 #define QMSK_SWITCH_H |
|
3 |
|
4 #include "stdlib.h" |
|
5 |
|
6 extern byte switch_mask; |
|
7 |
|
8 /* |
|
9 * Setup switch input triggering on SWITCH_DDR/PORT/PIN using SWITCH_PCMSK/PCIE/PCIF interrupts. |
|
10 */ |
|
11 void switch_init (void) |
|
12 { |
|
13 switch_mask = SWITCH_MASK; |
|
14 |
|
15 // input mode |
|
16 byte bit = 1; |
|
17 |
|
18 for (byte i = 0; i < 8; i++) { |
|
19 if (SWITCH_MASK & bit) { |
|
20 cbi(SWITCH_DDR, i); |
|
21 |
|
22 // pull-up |
|
23 sbi(SWITCH_PORT, i); |
|
24 } |
|
25 |
|
26 bit <<= 1; |
|
27 } |
|
28 |
|
29 // interrupt mask for port |
|
30 *SWITCH_PCMSK = SWITCH_MASK; |
|
31 |
|
32 // enable interrupts |
|
33 sbi(&PCICR, SWITCH_PCIE); |
|
34 } |
|
35 |
|
36 /* |
|
37 * Update switch state if changed. |
|
38 * |
|
39 * Returns 1 if changed, 0 if no changes. |
|
40 * |
|
41 * TODO: debouncing |
|
42 */ |
|
43 byte switch_read (byte *sp); |
|
44 |
|
45 #endif |