Mercurial > louis > kiibohd-controller
annotate main.c @ 1:0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
author | Jacob Alexander <triplehaata@gmail.com> |
---|---|
date | Mon, 07 Mar 2011 10:42:32 -0800 |
parents | 43dfb6e4e697 |
children | c3b2eaa4a89d |
rev | line source |
---|---|
0 | 1 /* Copyright (C) 2011 by Jacob Alexander |
2 * | |
3 * Permission is hereby granted, free of charge, to any person obtaining a copy | |
4 * of this software and associated documentation files (the "Software"), to deal | |
5 * in the Software without restriction, including without limitation the rights | |
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
7 * copies of the Software, and to permit persons to whom the Software is | |
8 * furnished to do so, subject to the following conditions: | |
9 * | |
10 * The above copyright notice and this permission notice shall be included in | |
11 * all copies or substantial portions of the Software. | |
12 * | |
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
19 * THE SOFTWARE. | |
20 */ | |
21 | |
22 #include <avr/io.h> | |
23 #include <avr/pgmspace.h> | |
24 #include <avr/interrupt.h> | |
25 #include <util/delay.h> | |
26 #include "usb_keyboard.h" | |
27 | |
28 #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) | |
29 | |
1
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
30 #define PRE_DRIVE_SLEEP |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
31 #define POST_DRIVE_SLEEP |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
32 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
33 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
34 #define DRIVE_reg_1 PORTB |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
35 #define DRIVE_reg_2 PORTB |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
36 #define DRIVE_reg_3 PORTB |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
37 #define DRIVE_reg_4 PORTC |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
38 #define DRIVE_reg_5 PORTE |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
39 #define DRIVE_reg_6 PORTE |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
40 #define DRIVE_reg_7 PORTF |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
41 #define DRIVE_reg_8 PORTF |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
42 #define DRIVE_reg_9 PORTF |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
43 #define DRIVE_reg_10 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
44 #define DRIVE_reg_11 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
45 #define DRIVE_reg_12 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
46 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
47 #define DRIVE_pin_1 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
48 #define DRIVE_pin_2 1 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
49 #define DRIVE_pin_3 2 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
50 #define DRIVE_pin_4 7 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
51 #define DRIVE_pin_5 6 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
52 #define DRIVE_pin_6 7 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
53 #define DRIVE_pin_7 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
54 #define DRIVE_pin_8 4 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
55 #define DRIVE_pin_9 5 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
56 #define DRIVE_pin_10 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
57 #define DRIVE_pin_11 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
58 #define DRIVE_pin_12 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
59 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
60 #define DETECT_group_1 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
61 #define DETECT_group_2 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
62 #define DETECT_group_3 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
63 #define DETECT_group_4 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
64 #define DETECT_group_5 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
65 #define DETECT_group_6 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
66 #define DETECT_group_7 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
67 #define DETECT_group_8 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
68 #define DETECT_group_9 0 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
69 #define DETECT_group_10 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
70 #define DETECT_group_11 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
71 #define DETECT_group_12 <blank> |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
72 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
73 // Change number of ORDs if number of lines differ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
74 #define DD_LOOP \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
75 for ( int c = 0;; c++ ) { \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
76 switch ( c ) { \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
77 DD_CASE_ORD(1) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
78 DD_CASE_ORD(2) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
79 DD_CASE_ORD(3) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
80 DD_CASE_ORD(4) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
81 DD_CASE_ORD(5) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
82 DD_CASE_ORD(6) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
83 DD_CASE_ORD(7) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
84 DD_CASE_ORD(8) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
85 DD_CASE_END(9,c) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
86 } \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
87 } |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
88 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
89 #define DRIVE_DETECT(reg,pin,group) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
90 reg |= (1 << pin);\ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
91 detection(group);\ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
92 reg &= (0 << pin); |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
93 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
94 #define DD_CASE(number) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
95 case number:\ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
96 DRIVE_DETECT(DRIVE_reg##_##number, DRIVE_pin##_##number, DETECT_group##_##number) |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
97 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
98 #define DD_CASE_ORD(number) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
99 DD_CASE(number) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
100 break; |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
101 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
102 #define DD_CASE_END(number,var) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
103 DD_CASE(number) \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
104 default: \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
105 var = -1; \ |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
106 break; |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
107 |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
108 int main(void) |
0 | 109 { |
110 // set for 16 MHz clock | |
111 CPU_PRESCALE( 0 ); | |
112 | |
113 // Configuring Pins | |
1
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
114 |
0 | 115 // TODO |
116 | |
117 // Initialize the USB, and then wait for the host to set configuration. | |
118 // If the Teensy is powered without a PC connected to the USB port, | |
119 // this will wait forever. | |
120 usb_init(); | |
121 while ( !usb_configured() ) /* wait */ ; | |
122 | |
123 // Wait an extra second for the PC's operating system to load drivers | |
124 // and do whatever it does to actually be ready for input | |
125 _delay_ms(1000); | |
126 | |
127 // Main Detection Loop | |
1
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
128 DD_LOOP |
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
129 |
0 | 130 // usb_keyboard_press(KEY_B, KEY_SHIFT); |
1
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
131 return 0; |
0 | 132 } |
133 |