Changeset 801579fe in mainline for uspace/kbd/arch/mips32/src/kbd.c


Ignore:
Timestamp:
2006-09-07T19:46:23Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
253f35a1
Parents:
9141377
Message:

Cleanup and reorganize the kbd service a bit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/kbd/arch/mips32/src/kbd.c

    r9141377 r801579fe  
    5353#define MSIM_KEY_F12 0x34325b1bL
    5454
    55 
    5655#define GXEMUL_KEY_F1 0x504f5b1bL
    5756#define GXEMUL_KEY_F2 0x514f5b1bL
     
    6766#define GXEMUL_KEY_F12 0x34325b1bL
    6867
    69 
    7068#define FUNCTION_KEYS 0x100
    71 
    7269
    7370irq_cmd_t msim_cmds[1] = {
     
    8683int kbd_arch_init(void)
    8784{
    88         fb_fb=sysinfo_value("fb.kind")==1;
     85        fb_fb = (sysinfo_value("fb.kind") == 1);
    8986        ipc_register_irq(2, &msim_kbd);
    9087        return 0;
     
    105102{
    106103
    107         static unsigned long buf=0;
    108         static int count=0;     
    109 
     104        static unsigned long buf = 0;
     105        static int count = 0;   
    110106
    111107        /* Please preserve this code (it can be used to determine scancodes)
     
    119115        */
    120116       
    121         if(scan_code==0x7e)
    122         {
    123                 switch (buf){
    124                         case MSIM_KEY_F5:
    125                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
    126                                 buf=count=0;
    127                                 return 1;
    128                         case MSIM_KEY_F6:
    129                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
    130                                 buf=count=0;
    131                                 return 1;
    132                         case MSIM_KEY_F7:
    133                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
    134                                 buf=count=0;
    135                                 return 1;
    136                         case MSIM_KEY_F8:
    137                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
    138                                 buf=count=0;
    139                                 return 1;
    140 
    141                         case MSIM_KEY_F9:
    142                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
    143                                 buf=count=0;
    144                                 return 1;
    145                         case MSIM_KEY_F10:
    146                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
    147                                 buf=count=0;
    148                                 return 1;
    149 
    150                         case MSIM_KEY_F11:
    151                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
    152                                 buf=count=0;
    153                                 return 1;
    154                         case MSIM_KEY_F12:
    155                                 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
    156                                 buf=count=0;
    157                                 return 1;
    158                         default:
    159                                 keybuffer_push(keybuffer, buf & 0xff );
    160                                 keybuffer_push(keybuffer, (buf >> 8) &0xff );
    161                                 keybuffer_push(keybuffer, (buf >> 16) &0xff );
    162                                 keybuffer_push(keybuffer, (buf >> 24) &0xff );
    163                                 keybuffer_push(keybuffer, scan_code );
    164                                 buf=count=0;
    165                                 return 1;
    166        
     117        if(scan_code == 0x7e) {
     118                switch (buf) {
     119                case MSIM_KEY_F5:
     120                        keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
     121                        buf = count = 0;
     122                        return 1;
     123                case MSIM_KEY_F6:
     124                        keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
     125                        buf = count = 0;
     126                        return 1;
     127                case MSIM_KEY_F7:
     128                        keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
     129                        buf = count = 0;
     130                        return 1;
     131                case MSIM_KEY_F8:
     132                        keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
     133                        buf = count = 0;
     134                        return 1;
     135                case MSIM_KEY_F9:
     136                        keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
     137                        buf = count = 0;
     138                        return 1;
     139                case MSIM_KEY_F10:
     140                        keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
     141                        buf = count = 0;
     142                        return 1;
     143                case MSIM_KEY_F11:
     144                        keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
     145                        buf = count = 0;
     146                        return 1;
     147                case MSIM_KEY_F12:
     148                        keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
     149                        buf = count = 0;
     150                        return 1;
     151                default:
     152                        keybuffer_push(keybuffer, buf & 0xff);
     153                        keybuffer_push(keybuffer, (buf >> 8) &0xff);
     154                        keybuffer_push(keybuffer, (buf >> 16) &0xff);
     155                        keybuffer_push(keybuffer, (buf >> 24) &0xff);
     156                        keybuffer_push(keybuffer, scan_code);
     157                        buf = count = 0;
     158                        return 1;
    167159                }
    168160        }
    169161
    170         buf|=((unsigned long) scan_code)<<(8*(count++));
    171        
    172        
    173         if((buf & 0xff)!= (MSIM_KEY_F1 & 0xff)) {
    174 
    175                 keybuffer_push(keybuffer,buf );
    176                 buf=count=0;
    177                 return 1;
    178         }
    179 
    180         if ( count <= 1 )
    181                 return 1;
    182 
    183         if(    (buf & 0xffff) != (MSIM_KEY_F1 & 0xffff)
    184             && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
    185 
    186                 keybuffer_push(keybuffer, buf & 0xff );
    187                 keybuffer_push(keybuffer, (buf >> 8) &0xff );
    188                 buf=count=0;
    189                 return 1;
    190         }
    191 
    192         if ( count <= 2)
    193                 return 1;
    194 
    195         switch (buf){
    196                 case MSIM_KEY_F1:
    197                         keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
    198                         buf=count=0;
    199                         return 1;
    200                 case MSIM_KEY_F2:
    201                         keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
    202                         buf=count=0;
    203                         return 1;
    204                 case MSIM_KEY_F3:
    205                         keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
    206                         buf=count=0;
    207                         return 1;
    208                 case MSIM_KEY_F4:
    209                         keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
    210                         buf=count=0;
    211                         return 1;
    212         }
    213 
    214 
    215         if(    (buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
    216             && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff) ) {
    217 
    218                 keybuffer_push(keybuffer, buf & 0xff );
    219                 keybuffer_push(keybuffer, (buf >> 8) &0xff );
    220                 keybuffer_push(keybuffer, (buf >> 16) &0xff );
    221                 buf=count=0;
    222                 return 1;
    223         }
    224 
    225         if ( count <= 3 )
    226                 return 1;
    227        
    228 
    229        
    230        
    231         switch (buf){
    232                 case MSIM_KEY_F5:
    233                 case MSIM_KEY_F6:
    234                 case MSIM_KEY_F7:
    235                 case MSIM_KEY_F8:
    236                 case MSIM_KEY_F9:
    237                 case MSIM_KEY_F10:
    238                 case MSIM_KEY_F11:
    239                 case MSIM_KEY_F12:
    240                         return 1;
    241                 default:
    242                         keybuffer_push(keybuffer, buf & 0xff );
    243                         keybuffer_push(keybuffer, (buf >> 8) &0xff );
    244                         keybuffer_push(keybuffer, (buf >> 16) &0xff );
    245                         keybuffer_push(keybuffer, (buf >> 24) &0xff );
    246                         buf=count=0;
    247                         return 1;
    248                
    249                 }
     162        buf |= ((unsigned long) scan_code)<<(8*(count++));
     163       
     164        if((buf & 0xff) != (MSIM_KEY_F1 & 0xff)) {
     165                keybuffer_push(keybuffer, buf);
     166                buf = count = 0;
     167                return 1;
     168        }
     169
     170        if (count <= 1)
     171                return 1;
     172
     173        if ((buf & 0xffff) != (MSIM_KEY_F1 & 0xffff)
     174                && (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
     175
     176                keybuffer_push(keybuffer, buf & 0xff);
     177                keybuffer_push(keybuffer, (buf >> 8) &0xff);
     178                buf = count = 0;
     179                return 1;
     180        }
     181
     182        if (count <= 2)
     183                return 1;
     184
     185        switch (buf) {
     186        case MSIM_KEY_F1:
     187                keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
     188                buf = count = 0;
     189                return 1;
     190        case MSIM_KEY_F2:
     191                keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
     192                buf = count = 0;
     193                return 1;
     194        case MSIM_KEY_F3:
     195                keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
     196                buf = count = 0;
     197                return 1;
     198        case MSIM_KEY_F4:
     199                keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
     200                buf = count = 0;
     201                return 1;
     202        }
     203
     204
     205        if((buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
     206                && (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff)) {
     207
     208                keybuffer_push(keybuffer, buf & 0xff);
     209                keybuffer_push(keybuffer, (buf >> 8) & 0xff);
     210                keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     211                buf=count=0;
     212                return 1;
     213        }
     214
     215        if (count <= 3)
     216                return 1;
     217       
     218        switch (buf) {
     219        case MSIM_KEY_F5:
     220        case MSIM_KEY_F6:
     221        case MSIM_KEY_F7:
     222        case MSIM_KEY_F8:
     223        case MSIM_KEY_F9:
     224        case MSIM_KEY_F10:
     225        case MSIM_KEY_F11:
     226        case MSIM_KEY_F12:
     227                return 1;
     228        default:
     229                keybuffer_push(keybuffer, buf & 0xff);
     230                keybuffer_push(keybuffer, (buf >> 8) &0xff);
     231                keybuffer_push(keybuffer, (buf >> 16) &0xff);
     232                keybuffer_push(keybuffer, (buf >> 24) &0xff);
     233                buf = count = 0;
     234                return 1;
     235        }
    250236        return 1;
    251237}
     
    255241static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code)
    256242{
    257 
    258         static unsigned long buf=0;
    259         static int count=0;     
    260 
     243        static unsigned long buf = 0;
     244        static int count = 0;
    261245
    262246        /* Please preserve this code (it can be used to determine scancodes)
     
    270254        */
    271255       
    272         if ( scan_code == '\r' )
    273                 scan_code = '\n' ;
    274        
    275         buf|=((unsigned long) scan_code)<<(8*(count++));
    276        
    277        
    278         if((buf & 0xff)!= (GXEMUL_KEY_F1 & 0xff)) {
    279 
    280                 keybuffer_push(keybuffer,buf );
    281                 buf=count=0;
    282                 return 1;
    283         }
    284 
    285         if ( count <= 1 )
    286                 return 1;
    287 
    288         if(    (buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)  ) {
    289 
    290                 keybuffer_push(keybuffer, buf & 0xff );
    291                 keybuffer_push(keybuffer, (buf >> 8) &0xff );
    292                 buf=count=0;
    293                 return 1;
    294         }
    295 
    296         if ( count <= 2)
    297                 return 1;
    298 
    299 
    300         if(    (buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
    301             && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
    302             && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff) ) {
    303 
     256        if (scan_code == '\r')
     257                scan_code = '\n';
     258       
     259        buf |= ((unsigned long) scan_code)<<(8*(count++));
     260       
     261       
     262        if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
     263                keybuffer_push(keybuffer, buf);
     264                buf = count = 0;
     265                return 1;
     266        }
     267
     268        if (count <= 1)
     269                return 1;
     270
     271        if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) {
     272                keybuffer_push(keybuffer, buf & 0xff);
     273                keybuffer_push(keybuffer, (buf >> 8) &0xff);
     274                buf = count = 0;
     275                return 1;
     276        }
     277
     278        if (count <= 2)
     279                return 1;
     280
     281
     282        if ((buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
     283                && (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
     284                && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
     285
     286                keybuffer_push(keybuffer, buf & 0xff);
     287                keybuffer_push(keybuffer, (buf >> 8) & 0xff);
     288                keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     289                buf = count = 0;
     290                return 1;
     291        }
     292
     293        if ( count <= 3 )
     294                return 1;
     295       
     296
     297        switch (buf) {
     298        case GXEMUL_KEY_F1:
     299                keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
     300                buf=count=0;
     301                return 1;
     302        case GXEMUL_KEY_F2:
     303                keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
     304                buf=count=0;
     305                return 1;
     306        case GXEMUL_KEY_F3:
     307                keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
     308                buf=count=0;
     309                return 1;
     310        case GXEMUL_KEY_F4:
     311                keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
     312                buf=count=0;
     313                return 1;
     314        case GXEMUL_KEY_F5:
     315                keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
     316                buf=count=0;
     317                return 1;
     318        case GXEMUL_KEY_F6:
     319                keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
     320                buf=count=0;
     321                return 1;
     322        case GXEMUL_KEY_F7:
     323                keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
     324                buf=count=0;
     325                return 1;
     326        case GXEMUL_KEY_F8:
     327                keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
     328                buf=count=0;
     329                return 1;
     330        case GXEMUL_KEY_F9:
     331                keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
     332                buf=count=0;
     333                return 1;
     334        case GXEMUL_KEY_F10:
     335                keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
     336                buf=count=0;
     337                return 1;
     338        case GXEMUL_KEY_F11:
     339                keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
     340                buf=count=0;
     341                return 1;
     342        case GXEMUL_KEY_F12:
     343                keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
     344                buf=count=0;
     345                return 1;
     346        default:
    304347                keybuffer_push(keybuffer, buf & 0xff );
    305348                keybuffer_push(keybuffer, (buf >> 8) &0xff );
    306349                keybuffer_push(keybuffer, (buf >> 16) &0xff );
    307                 buf=count=0;
    308                 return 1;
    309         }
    310 
    311         if ( count <= 3 )
    312                 return 1;
    313        
    314 
    315         switch (buf){
    316 
    317                 case GXEMUL_KEY_F1:
    318                         keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
    319                         buf=count=0;
    320                         return 1;
    321                 case GXEMUL_KEY_F2:
    322                         keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
    323                         buf=count=0;
    324                         return 1;
    325                 case GXEMUL_KEY_F3:
    326                         keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
    327                         buf=count=0;
    328                         return 1;
    329                 case GXEMUL_KEY_F4:
    330                         keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
    331                         buf=count=0;
    332                         return 1;
    333                 case GXEMUL_KEY_F5:
    334                         keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
    335                         buf=count=0;
    336                         return 1;
    337                 case GXEMUL_KEY_F6:
    338                         keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
    339                         buf=count=0;
    340                         return 1;
    341                 case GXEMUL_KEY_F7:
    342                         keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
    343                         buf=count=0;
    344                         return 1;
    345                 case GXEMUL_KEY_F8:
    346                         keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
    347                         buf=count=0;
    348                         return 1;
    349                 case GXEMUL_KEY_F9:
    350                         keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
    351                         buf=count=0;
    352                         return 1;
    353                 case GXEMUL_KEY_F10:
    354                         keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
    355                         buf=count=0;
    356                         return 1;
    357                 case GXEMUL_KEY_F11:
    358                         keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
    359                         buf=count=0;
    360                         return 1;
    361                 case GXEMUL_KEY_F12:
    362                         keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
    363                         buf=count=0;
    364                         return 1;
    365 
    366                 default:
    367                         keybuffer_push(keybuffer, buf & 0xff );
    368                         keybuffer_push(keybuffer, (buf >> 8) &0xff );
    369                         keybuffer_push(keybuffer, (buf >> 16) &0xff );
    370                         keybuffer_push(keybuffer, (buf >> 24) &0xff );
    371                         buf=count=0;
    372                         return 1;
    373                
    374                 }
     350                keybuffer_push(keybuffer, (buf >> 24) &0xff );
     351                buf=count=0;
     352                return 1;
     353        }
    375354        return 1;
    376355}
     
    381360        static int esc_count=0;
    382361
    383        
    384         if ( scan_code == 0x1b ) {
     362        if (scan_code == 0x1b) {
    385363                esc_count++;
    386                 if ( esc_count == 3 ) {
     364                if (esc_count == 3)
    387365                        __SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
    388                 }       
    389366        } else {
    390367                esc_count=0;
    391368        }
    392369
    393         if(fb_fb) return kbd_arch_process_fb(keybuffer, scan_code);
     370        if (fb_fb)
     371                return kbd_arch_process_fb(keybuffer, scan_code);
     372
    394373        return kbd_arch_process_no_fb(keybuffer, scan_code);
    395 
    396         return 0;
    397374}
    398375/** @}
Note: See TracChangeset for help on using the changeset viewer.