Mercurial > louis > kiibohd-controller
annotate main.c @ 18:7a95e742a31f
Small change while the build system is in flux.
author | Jacob Alexander <triplehaata@gmail.com> |
---|---|
date | Wed, 28 Sep 2011 01:47:26 -0700 |
parents | 85bc68be98df |
children | 2d65da455ef3 |
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> | |
17
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
26 //#include "usb_keys.h" |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
27 #include "scan_loop.h" |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
28 //#include "layouts.h" |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
29 //#include "usb_keyboard.h" |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
30 |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
31 // TEMP INCLUDES |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
32 #include "usb_keyboard_debug.h" |
18
7a95e742a31f
Small change while the build system is in flux.
Jacob Alexander <triplehaata@gmail.com>
parents:
17
diff
changeset
|
33 #include "print.h" |
0 | 34 |
35 #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) | |
36 | |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
37 |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
38 |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
39 |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
40 // Verified Keypress Defines |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
41 #define USB_TRANSFER_DIVIDER 10 // 1024 == 1 Send of keypresses per second, 1 == 1 Send of keypresses per ~1 millisecond |
1
0f88e9aad77a
Initial macro line filler design for multiple keyboards matrices.
Jacob Alexander <triplehaata@gmail.com>
parents:
0
diff
changeset
|
42 |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
43 // Error LED Control |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
44 void errorLED( uint8_t on ) |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
45 { |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
46 // Error LED On |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
47 if ( on ) { |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
48 PORTD |= (1<<6); |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
49 } |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
50 // Error LED Off |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
51 else { |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
52 PORTD &= ~(1<<6); |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
53 } |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
54 } |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
55 |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
56 |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
57 |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
58 // Initial Pin Setup |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
59 // If the matrix is properly set, this function does not need to be changed |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
60 inline void pinSetup(void) |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
61 { |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
62 // For each pin, 0=input, 1=output |
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
63 DDRA = 0x00; |
5
a8be29294c26
Updating for the latest pinout
Jacob Alexander <triplehaata@gmail.com>
parents:
4
diff
changeset
|
64 DDRB = 0x00; |
a8be29294c26
Updating for the latest pinout
Jacob Alexander <triplehaata@gmail.com>
parents:
4
diff
changeset
|
65 DDRC = 0x00; |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
66 DDRD = 0x40; // LED Setup |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
67 DDRE = 0x00; |
5
a8be29294c26
Updating for the latest pinout
Jacob Alexander <triplehaata@gmail.com>
parents:
4
diff
changeset
|
68 DDRF = 0x00; |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
69 |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
70 |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
71 // Setting pins to either high or pull-up resistor |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
72 PORTA = 0x00; |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
73 PORTB = 0x00; |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
74 PORTC = 0x00; |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
75 PORTD = 0x40; // LED Enable |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
76 PORTE = 0x00; |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
77 PORTF = 0x00; |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
78 } |
7
18e424630cbd
Adding basic per line keypad detection
Jacob Alexander <haata@users.sf.net>
parents:
6
diff
changeset
|
79 |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
80 int main( void ) |
0 | 81 { |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
82 // Setup with 16 MHz clock |
0 | 83 CPU_PRESCALE( 0 ); |
84 | |
85 // Configuring Pins | |
2
c3b2eaa4a89d
Significant progress made.
Jacob Alexander <triplehaata@gmail.com>
parents:
1
diff
changeset
|
86 pinSetup(); |
0 | 87 |
88 // Initialize the USB, and then wait for the host to set configuration. | |
89 // If the Teensy is powered without a PC connected to the USB port, | |
90 // this will wait forever. | |
91 usb_init(); | |
92 while ( !usb_configured() ) /* wait */ ; | |
93 | |
94 // Wait an extra second for the PC's operating system to load drivers | |
95 // and do whatever it does to actually be ready for input | |
96 _delay_ms(1000); | |
97 | |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
98 // Setup ISR Timer for flagging a kepress send to USB |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
99 // Set to 256 * 1024 (8 bit timer with Clock/1024 prescalar) timer |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
100 TCCR0A = 0x00; |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
101 TCCR0B = 0x03; |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
102 TIMSK0 = (1 << TOIE0); |
4
b97797936037
Redefining pinouts and adding key sending code.
Jacob Alexander <triplehaata@gmail.com>
parents:
3
diff
changeset
|
103 |
17
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
104 uint16_t led = 0; |
0 | 105 // Main Detection Loop |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
106 while ( 1 ) { |
17
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
107 //scan_loop(); |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
108 |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
109 // Loop should never get here (indicate error) |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
110 errorLED( 1 ); |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
111 |
17
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
112 // HID Debug Error message |
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
113 erro_print("Detection loop error, this is very bad...bug report!"); |
16
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
114 } |
f74b797ac060
Parts of the upcoming rewrite
Jacob Alexander <triplehaata@gmail.com>
parents:
15
diff
changeset
|
115 } |
0 | 116 |
10
f35ea5de4456
Adding all of the USB keycodes, and proper key ordering.
Jacob Alexander <triplehaata@gmail.com>
parents:
9
diff
changeset
|
117 // Timer Interrupt for flagging a send of the sampled key detection data to the USB host |
17
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
118 uint16_t sendKeypressCounter = 0; |
85bc68be98df
Code re-factor now compiles.
Jacob Alexander <triplehaata@gmail.com>
parents:
16
diff
changeset
|
119 |
6
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
120 ISR( TIMER0_OVF_vect ) |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
121 { |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
122 sendKeypressCounter++; |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
123 if ( sendKeypressCounter > USB_TRANSFER_DIVIDER ) { |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
124 sendKeypressCounter = 0; |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
125 sendKeypresses = 1; |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
126 } |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
127 } |
9df636be6feb
Keyboard functionally working with very very good debouncing.
Jacob Alexander <triplehaata@gmail.com>
parents:
5
diff
changeset
|
128 |