@@ -171,7 +171,7 @@ static const unsigned char KEYBOARD_ASCII_MAPH_OTHERS[] = {
171171 KEYBOARD_SC_RPF0_blackslash , '\\'
172172};
173173
174-
174+ static unsigned char KEYBOARD_ASCII_MAPPING [ 256 ];
175175static char last_ascii ;
176176static int last_ascii_available = 0 ;
177177static char tmp_juggad_is_f0 = 0 ;
@@ -185,6 +185,28 @@ char keyboard_scanner_ascii_get() {
185185 return last_ascii ;
186186}
187187
188+ void keyboard_scanner_handler_init () {
189+ for (int i = 0 ; i < sizeof (KEYBOARD_ASCII_MAPPING ); ++ i ) {
190+ KEYBOARD_ASCII_MAPPING [i ] = 0 ;
191+ }
192+ for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_AZ );i ++ ) {
193+ unsigned char code = KEYBOARD_ASCII_MAPH_AZ [i ];
194+ unsigned char c = 'a' + i ;
195+ KEYBOARD_ASCII_MAPPING [code ]= c ;
196+ }
197+ for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_09 );i ++ ) {
198+ unsigned char code = KEYBOARD_ASCII_MAPH_09 [i ];
199+ unsigned char c = '0' + i ;
200+ KEYBOARD_ASCII_MAPPING [code ]= c ;
201+ }
202+ if (last_ascii_available ) return 1 ;
203+ for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_OTHERS );i += 2 ) {
204+ unsigned char code = KEYBOARD_ASCII_MAPH_OTHERS [i ];
205+ unsigned char c = KEYBOARD_ASCII_MAPH_OTHERS [i + 1 ];
206+ KEYBOARD_ASCII_MAPPING [code ]= c ;
207+ }
208+ }
209+
188210int keyboard_scanner_handle_buffer (int keyboard_buffer []) {
189211 // For now just taking care of some of the key press and disgarding others.
190212 int len = queue_size (keyboard_buffer );
@@ -203,28 +225,9 @@ int keyboard_scanner_handle_buffer(int keyboard_buffer[]) {
203225 return 1 ;
204226 }
205227
206- for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_AZ );i ++ ) {
207- if (KEYBOARD_ASCII_MAPH_AZ [i ]== c0 ) {
208- last_ascii = 'a' + i ;
209- last_ascii_available = 1 ;
210- break ;
211- }
212- }
213- if (last_ascii_available ) return 1 ;
214- for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_09 );i ++ ) {
215- if (KEYBOARD_ASCII_MAPH_09 [i ]== c0 ) {
216- last_ascii = '0' + i ;
217- last_ascii_available = 1 ;
218- break ;
219- }
220- }
221- if (last_ascii_available ) return 1 ;
222- for (int i = 0 ;i < sizeof (KEYBOARD_ASCII_MAPH_OTHERS );i += 2 ) {
223- if (KEYBOARD_ASCII_MAPH_OTHERS [i ]== c0 ) {
224- last_ascii = KEYBOARD_ASCII_MAPH_OTHERS [i + 1 ];
225- last_ascii_available = 1 ;
226- break ;
227- }
228+ if (KEYBOARD_ASCII_MAPPING [c0 ]> 0 ) {
229+ last_ascii = KEYBOARD_ASCII_MAPPING [c0 ];
230+ last_ascii_available = 1 ;
228231 }
229232 if (last_ascii_available ) return 1 ;
230233 return 0 ;
0 commit comments