@@ -31,119 +31,143 @@ static matrix_row_t matrix[MATRIX_ROWS];
31
31
static matrix_row_t matrix_debouncing [MATRIX_ROWS ];
32
32
33
33
static matrix_row_t read_cols (void );
34
- static void select_row (uint8_t col );
34
+ static void select_row (uint8_t col );
35
35
36
36
// user-defined overridable functions
37
37
38
- __attribute__((weak )) void matrix_init_kb (void ) { matrix_init_user (); }
38
+ __attribute__((weak )) void matrix_init_kb (void ) {
39
+ matrix_init_user ();
40
+ }
39
41
40
- __attribute__((weak )) void matrix_scan_kb (void ) { matrix_scan_user (); }
42
+ __attribute__((weak )) void matrix_scan_kb (void ) {
43
+ matrix_scan_user ();
44
+ }
41
45
42
46
__attribute__((weak )) void matrix_init_user (void ) {}
43
47
44
48
__attribute__((weak )) void matrix_scan_user (void ) {}
45
49
46
50
// helper functions
47
51
48
- inline uint8_t matrix_rows (void )
49
- {
50
- return MATRIX_ROWS ;
52
+ inline uint8_t matrix_rows (void ) {
53
+ return MATRIX_ROWS ;
51
54
}
52
55
53
- inline uint8_t matrix_cols (void )
54
- {
55
- return MATRIX_COLS ;
56
+ inline uint8_t matrix_cols (void ) {
57
+ return MATRIX_COLS ;
56
58
}
57
59
58
- void matrix_init (void )
59
- {
60
- /* Column output pins */
61
- DDRD |= 0b01111011 ;
62
- /* Row input pins */
63
- DDRC &= ~0b10000000 ;
64
- DDRB &= ~0b01111111 ;
65
- PORTC |= 0b10000000 ;
66
- PORTB |= 0b01111111 ;
67
-
68
- for (uint8_t i = 0 ; i < matrix_rows (); i ++ ) {
69
- matrix [i ] = 0 ;
70
- matrix_debouncing [i ] = 0 ;
71
- }
72
-
73
- matrix_init_kb ();
60
+ void matrix_init (void ) {
61
+ /* Column output pins */
62
+ DDRD |= 0b01111011 ;
63
+ /* Row input pins */
64
+ DDRC &= ~0b10000000 ;
65
+ DDRB &= ~0b01111111 ;
66
+ PORTC |= 0b10000000 ;
67
+ PORTB |= 0b01111111 ;
68
+
69
+ for (uint8_t i = 0 ; i < matrix_rows (); i ++ ) {
70
+ matrix [i ] = 0 ;
71
+ matrix_debouncing [i ] = 0 ;
72
+ }
73
+
74
+ matrix_init_kb ();
74
75
}
75
76
76
- uint8_t matrix_scan (void )
77
- {
78
- bool changed = false;
79
- for ( uint8_t col = 0 ; col < MATRIX_COLS ; col ++ ) {
80
- select_row ( col );
81
- wait_us ( 30 );
82
- matrix_row_t rows = read_cols ();
83
- for ( uint8_t row = 0 ; row < matrix_rows (); row ++ ) {
84
- bool prev_bit = matrix_debouncing [ row ] & (( matrix_row_t ) 1 << col );
85
- bool curr_bit = rows & ( 1 << row );
86
- if (( changed |= prev_bit != curr_bit )) {
87
- matrix_debouncing [ row ] ^= ( matrix_row_t ) 1 << col ;
88
- }
77
+ uint8_t matrix_scan (void ) {
78
+ bool changed = false;
79
+ for ( uint8_t col = 0 ; col < MATRIX_COLS ; col ++ ) {
80
+ select_row ( col );
81
+ wait_us ( 30 );
82
+ matrix_row_t rows = read_cols ( );
83
+ for ( uint8_t row = 0 ; row < matrix_rows (); row ++ ) {
84
+ bool prev_bit = matrix_debouncing [ row ] & (( matrix_row_t ) 1 << col );
85
+ bool curr_bit = rows & (1 << row );
86
+ if (( changed |= prev_bit != curr_bit )) {
87
+ matrix_debouncing [ row ] ^= ( matrix_row_t ) 1 << col ;
88
+ }
89
+ }
89
90
}
90
- }
91
91
92
- debounce (matrix_debouncing , matrix , changed );
93
- matrix_scan_kb ();
92
+ debounce (matrix_debouncing , matrix , changed );
93
+ matrix_scan_kb ();
94
94
95
- return (uint8_t )changed ;
95
+ return (uint8_t )changed ;
96
96
}
97
97
98
- inline
99
- matrix_row_t matrix_get_row (uint8_t row )
100
- {
101
- return matrix [row ];
98
+ inline matrix_row_t matrix_get_row (uint8_t row ) {
99
+ return matrix [row ];
102
100
}
103
101
104
- void matrix_print (void )
105
- {
106
- print ( "\nr/c 0123456789ABCDEF\n" );
107
- for ( uint8_t row = 0 ; row < matrix_rows (); row ++ ) {
108
- print_hex8 ( row ); print (": " );
109
- print_bin_reverse16 (matrix_get_row (row ));
110
- print ("\n" );
111
- }
102
+ void matrix_print (void ) {
103
+ print ( "\nr/c 0123456789ABCDEF\n" );
104
+ for ( uint8_t row = 0 ; row < matrix_rows (); row ++ ) {
105
+ print_hex8 ( row );
106
+ print (": " );
107
+ print_bin_reverse16 (matrix_get_row (row ));
108
+ print ("\n" );
109
+ }
112
110
}
113
111
114
- static matrix_row_t read_cols (void )
115
- {
116
- return
117
- (PINB & (1 <<5 ) ? 0 : ((matrix_row_t )1 <<0 )) |
118
- (PINC & (1 <<7 ) ? 0 : ((matrix_row_t )1 <<1 )) |
119
- (PINB & (1 <<4 ) ? 0 : ((matrix_row_t )1 <<2 )) |
120
- (PINB & (1 <<6 ) ? 0 : ((matrix_row_t )1 <<3 )) |
121
- (PINB & (1 <<1 ) ? 0 : ((matrix_row_t )1 <<4 )) |
122
- (PINB & (1 <<2 ) ? 0 : ((matrix_row_t )1 <<5 )) |
123
- (PINB & (1 <<3 ) ? 0 : ((matrix_row_t )1 <<6 )) |
124
- (PINB & (1 <<0 ) ? 0 : ((matrix_row_t )1 <<7 ));
112
+ static matrix_row_t read_cols (void ) {
113
+ return (PINB & (1 << 5 ) ? 0 : ((matrix_row_t )1 << 0 )) | (PINC & (1 << 7 ) ? 0 : ((matrix_row_t )1 << 1 )) | (PINB & (1 << 4 ) ? 0 : ((matrix_row_t )1 << 2 )) | (PINB & (1 << 6 ) ? 0 : ((matrix_row_t )1 << 3 )) | (PINB & (1 << 1 ) ? 0 : ((matrix_row_t )1 << 4 )) | (PINB & (1 << 2 ) ? 0 : ((matrix_row_t )1 << 5 )) | (PINB & (1 << 3 ) ? 0 : ((matrix_row_t )1 << 6 )) | (PINB & (1 << 0 ) ? 0 : ((matrix_row_t )1 << 7 ));
125
114
}
126
115
127
- static void select_row (uint8_t col )
128
- {
129
- switch (col ) {
130
- case 0 : PORTD = (PORTD & ~0b01111011 ) | 0b00011011 ; break ;
131
- case 1 : PORTD = (PORTD & ~0b01111011 ) | 0b01000011 ; break ;
132
- case 2 : PORTD = (PORTD & ~0b01111011 ) | 0b01100000 ; break ;
133
- case 3 : PORTD = (PORTD & ~0b01111011 ) | 0b01111001 ; break ;
134
- case 4 : PORTD = (PORTD & ~0b01111011 ) | 0b01100010 ; break ;
135
- case 5 : PORTD = (PORTD & ~0b01111011 ) | 0b01101010 ; break ;
136
- case 6 : PORTD = (PORTD & ~0b01111011 ) | 0b01110001 ; break ;
137
- case 7 : PORTD = (PORTD & ~0b01111011 ) | 0b01101001 ; break ;
138
- case 8 : PORTD = (PORTD & ~0b01111011 ) | 0b01100001 ; break ;
139
- case 9 : PORTD = (PORTD & ~0b01111011 ) | 0b01111000 ; break ;
140
- case 10 : PORTD = (PORTD & ~0b01111011 ) | 0b00100011 ; break ;
141
- case 11 : PORTD = (PORTD & ~0b01111011 ) | 0b00101011 ; break ;
142
- case 12 : PORTD = (PORTD & ~0b01111011 ) | 0b00110011 ; break ;
143
- case 13 : PORTD = (PORTD & ~0b01111011 ) | 0b01110000 ; break ;
144
- case 14 : PORTD = (PORTD & ~0b01111011 ) | 0b00010011 ; break ;
145
- case 15 : PORTD = (PORTD & ~0b01111011 ) | 0b01101000 ; break ;
146
- case 16 : PORTD = (PORTD & ~0b01111011 ) | 0b00001011 ; break ;
147
- case 17 : PORTD = (PORTD & ~0b01111011 ) | 0b00111011 ; break ;
148
- }
116
+ static void select_row (uint8_t col ) {
117
+ switch (col ) {
118
+ case 0 :
119
+ PORTD = (PORTD & ~0b01111011 ) | 0b00011011 ;
120
+ break ;
121
+ case 1 :
122
+ PORTD = (PORTD & ~0b01111011 ) | 0b01000011 ;
123
+ break ;
124
+ case 2 :
125
+ PORTD = (PORTD & ~0b01111011 ) | 0b01100000 ;
126
+ break ;
127
+ case 3 :
128
+ PORTD = (PORTD & ~0b01111011 ) | 0b01111001 ;
129
+ break ;
130
+ case 4 :
131
+ PORTD = (PORTD & ~0b01111011 ) | 0b01100010 ;
132
+ break ;
133
+ case 5 :
134
+ PORTD = (PORTD & ~0b01111011 ) | 0b01101010 ;
135
+ break ;
136
+ case 6 :
137
+ PORTD = (PORTD & ~0b01111011 ) | 0b01110001 ;
138
+ break ;
139
+ case 7 :
140
+ PORTD = (PORTD & ~0b01111011 ) | 0b01101001 ;
141
+ break ;
142
+ case 8 :
143
+ PORTD = (PORTD & ~0b01111011 ) | 0b01100001 ;
144
+ break ;
145
+ case 9 :
146
+ PORTD = (PORTD & ~0b01111011 ) | 0b01111000 ;
147
+ break ;
148
+ case 10 :
149
+ PORTD = (PORTD & ~0b01111011 ) | 0b00100011 ;
150
+ break ;
151
+ case 11 :
152
+ PORTD = (PORTD & ~0b01111011 ) | 0b00101011 ;
153
+ break ;
154
+ case 12 :
155
+ PORTD = (PORTD & ~0b01111011 ) | 0b00110011 ;
156
+ break ;
157
+ case 13 :
158
+ PORTD = (PORTD & ~0b01111011 ) | 0b01110000 ;
159
+ break ;
160
+ case 14 :
161
+ PORTD = (PORTD & ~0b01111011 ) | 0b00010011 ;
162
+ break ;
163
+ case 15 :
164
+ PORTD = (PORTD & ~0b01111011 ) | 0b01101000 ;
165
+ break ;
166
+ case 16 :
167
+ PORTD = (PORTD & ~0b01111011 ) | 0b00001011 ;
168
+ break ;
169
+ case 17 :
170
+ PORTD = (PORTD & ~0b01111011 ) | 0b00111011 ;
171
+ break ;
172
+ }
149
173
}
0 commit comments