Changeset fa09449 in mainline


Ignore:
Timestamp:
2009-02-15T22:31:07Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6cd9aa6
Parents:
76dd25b
Message:

Keycodes, keyboard events, kbd_event_get(). Keyboard driver now (formally) produces kbd events (press/release, keycode, mods, char) instead of just characters. In reality, the driver and client are only hacked to work with the new interface atm.

Location:
uspace
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/tetris/input.c

    r76dd25b rfa09449  
    115115                        cons_phone = get_cons_phone();
    116116                        getchar_inprog = async_send_2(cons_phone,
    117                             CONSOLE_GETCHAR, 0, 0, &charcall);
     117                            CONSOLE_GETKEY, 0, 0, &charcall);
    118118                }
    119119                if (!s)
     
    128128                        stop("end of file, help");
    129129                }
    130                 lastchar = IPC_GET_ARG1(charcall);
     130                lastchar = IPC_GET_ARG4(charcall);
    131131        }
    132132        if (tvp) {
  • uspace/app/trace/trace.c

    r76dd25b rfa09449  
    624624                V_INTEGER,
    625625                V_INTEGER,
    626                 V_INTEGER               
     626                V_INTEGER
    627627        };
    628628
     
    659659
    660660        p = proto_new("console");
    661         resp_def[0] = V_CHAR;
    662         o = oper_new("getchar", 0, arg_def, V_INTEGER, 2, resp_def);
    663         proto_add_oper(p, CONSOLE_GETCHAR, o);
     661        resp_def[0] = V_INTEGER; resp_def[1] = V_INTEGER;
     662        resp_def[2] = V_INTEGER; resp_def[3] = V_CHAR;
     663        o = oper_new("getkey", 0, arg_def, V_ERRNO, 4, resp_def);
     664        proto_add_oper(p, CONSOLE_GETKEY, o);
    664665
    665666        arg_def[0] = V_CHAR;
  • uspace/lib/libc/Makefile

    r76dd25b rfa09449  
    8080        generic/err.c \
    8181        generic/stdlib.c \
     82        generic/kbd.c \
    8283        generic/mman.c \
    8384        generic/udebug.c \
  • uspace/lib/libc/generic/io/stream.c

    r76dd25b rfa09449  
    4444#include <ipc/services.h>
    4545#include <ipc/console.h>
     46#include <kbd/kbd.h>
    4647#include <unistd.h>
    4748#include <async.h>
     
    5960        open_console();
    6061        if (console_phone >= 0) {
    61                 ipcarg_t r0, r1;
     62                kbd_event_t ev;
     63                int rc;
    6264                size_t i = 0;
    6365       
    6466                while (i < count) {
    65                         if (async_req_0_2(console_phone, CONSOLE_GETCHAR, &r0, &r1) < 0)
    66                                 return -1;
    67                         ((char *) buf)[i++] = r0;
     67                        do {
     68                                rc = kbd_get_event(&ev);
     69                                if (rc < 0) return -1;
     70                        } while (ev.c == 0);
     71
     72                        ((char *) buf)[i++] = ev.c;
    6873                }
    6974                return i;
  • uspace/lib/libc/include/ipc/console.h

    r76dd25b rfa09449  
    3939
    4040typedef enum {
    41         CONSOLE_GETCHAR = IPC_FIRST_USER_METHOD,
     41        CONSOLE_GETKEY = IPC_FIRST_USER_METHOD,
    4242        CONSOLE_PUTCHAR,
    4343        CONSOLE_CLEAR,
  • uspace/srv/console/console.c

    r76dd25b rfa09449  
    298298        ipc_call_t call;
    299299        int retval;
    300         int c;
     300        kbd_event_t ev;
    301301        connection_t *conn;
    302302        int newcon;
     
    320320                        retval = 0;
    321321                        break;
    322                 case KBD_PUSHCHAR:
    323                         /* got key from keyboard driver */
     322                case KBD_EVENT:
     323                        /* Got event from keyboard driver. */
    324324                        retval = 0;
    325                         c = IPC_GET_ARG1(call);
     325                        ev.type = IPC_GET_ARG1(call);
     326                        ev.key = IPC_GET_ARG2(call);
     327                        ev.mods = IPC_GET_ARG3(call);
     328                        ev.c = IPC_GET_ARG4(call);
     329                       
    326330                        /* switch to another virtual console */
    327331                       
    328332                        conn = &connections[active_console];
    329 /*
    330  *                      if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 +
    331  *                              CONSOLE_COUNT)) {
    332  */
    333                         if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) {
    334                                 if (c == 0x112)
     333
     334                        if ((ev.key >= 0x101) && (ev.key < 0x101 +
     335                            CONSOLE_COUNT)) {
     336                                if (ev.key == 0x112)
    335337                                        change_console(KERNEL_CONSOLE);
    336338                                else
    337                                         change_console(c - 0x101);
     339                                        change_console(ev.key - 0x101);
    338340                                break;
    339341                        }
     
    342344                        if (conn->keyrequest_counter > 0) {             
    343345                                conn->keyrequest_counter--;
    344                                 ipc_answer_1(fifo_pop(conn->keyrequests), EOK,
    345                                     c);
     346                                ipc_answer_4(fifo_pop(conn->keyrequests), EOK,
     347                                    ev.type, ev.key, ev.mods, ev.c);
    346348                                break;
    347349                        }
    348                        
    349                         keybuffer_push(&conn->keybuffer, c);
     350
     351                        keybuffer_push(&conn->keybuffer, &ev);
    350352                        retval = 0;
    351                        
     353
    352354                        break;
    353355                default:
     
    364366        ipc_call_t call;
    365367        int consnum;
    366         ipcarg_t arg1, arg2, arg3;
     368        ipcarg_t arg1, arg2, arg3, arg4;
    367369        connection_t *conn;
    368370       
     
    389391                arg1 = 0;
    390392                arg2 = 0;
     393                arg3 = 0;
     394                arg4 = 0;
     395
    391396                switch (IPC_GET_METHOD(call)) {
    392397                case IPC_M_PHONE_HUNGUP:
     
    459464                                curs_visibility(arg1);
    460465                        break;
    461                 case CONSOLE_GETCHAR:
     466                case CONSOLE_GETKEY:
    462467                        if (keybuffer_empty(&conn->keybuffer)) {
    463468                                /* buffer is empty -> store request */
     
    475480                                continue;
    476481                        }
    477                         int ch;
    478                         keybuffer_pop(&conn->keybuffer, &ch);
    479                         arg1 = ch;
     482                        kbd_event_t ev;
     483                        keybuffer_pop(&conn->keybuffer, &ev);
     484                        arg1 = ev.type;
     485                        arg2 = ev.key;
     486                        arg3 = ev.mods;
     487                        arg4 = ev.c;
    480488                        break;
    481489                }
    482                 ipc_answer_2(callid, EOK, arg1, arg2);
     490                ipc_answer_4(callid, EOK, arg1, arg2, arg3, arg4);
    483491        }
    484492}
  • uspace/srv/kbd/arch/arm32/src/kbd_gxemul.c

    r76dd25b rfa09449  
    123123        /*
    124124        // Preserve for detecting scan codes.
    125         keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
    126         keybuffer_push(keybuffer, to_hex(scan_code&0xf));
    127         keybuffer_push(keybuffer, 'X');
    128         keybuffer_push(keybuffer, 'Y');
     125        keybuffer_push0(keybuffer, to_hex((scan_code>>4)&0xf));
     126        keybuffer_push0(keybuffer, to_hex(scan_code&0xf));
     127        keybuffer_push0(keybuffer, 'X');
     128        keybuffer_push0(keybuffer, 'Y');
    129129        return 1;
    130130        */
     
    137137                switch (buf) {
    138138                case GXEMUL_KEY_F5:
    139                         keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
     139                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 5);
    140140                        buf = count = 0;
    141141                        return 1;
    142142                case GXEMUL_KEY_F6:
    143                         keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
     143                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 6);
    144144                        buf = count = 0;
    145145                        return 1;
    146146                case GXEMUL_KEY_F7:
    147                         keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
     147                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 7);
    148148                        buf = count = 0;
    149149                        return 1;
    150150                case GXEMUL_KEY_F8:
    151                         keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
     151                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 8);
    152152                        buf = count = 0;
    153153                        return 1;
    154154                case GXEMUL_KEY_F9:
    155                         keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
     155                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 9);
    156156                        buf = count = 0;
    157157                        return 1;
    158158                case GXEMUL_KEY_F10:
    159                         keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
     159                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 10);
    160160                        buf = count = 0;
    161161                        return 1;
    162162                case GXEMUL_KEY_F11:
    163                         keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
     163                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 11);
    164164                        buf = count = 0;
    165165                        return 1;
    166166                case GXEMUL_KEY_F12:
    167                         keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
     167                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 12);
    168168                        buf = count = 0;
    169169                        return 1;
    170170                default:
    171                         keybuffer_push(keybuffer, buf & 0xff);
    172                         keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
    173                         keybuffer_push(keybuffer, (buf >> 16) & 0xff);
    174                         keybuffer_push(keybuffer, (buf >> 24) & 0xff);
    175                         keybuffer_push(keybuffer, scan_code);
     171                        keybuffer_push0(keybuffer, buf & 0xff);
     172                        keybuffer_push0(keybuffer, (buf >> 8)  & 0xff);
     173                        keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
     174                        keybuffer_push0(keybuffer, (buf >> 24) & 0xff);
     175                        keybuffer_push0(keybuffer, scan_code);
    176176                        buf = count = 0;
    177177                        return 1;
     
    183183       
    184184        if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
    185                 keybuffer_push(keybuffer, buf);
     185                keybuffer_push0(keybuffer, buf);
    186186                buf = count = 0;
    187187                return 1;
     
    195195                && (buf & 0xffff) != (GXEMUL_KEY_F5 & 0xffff) ) {
    196196
    197                 keybuffer_push(keybuffer, buf & 0xff);
    198                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
     197                keybuffer_push0(keybuffer, buf & 0xff);
     198                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
    199199                buf = count = 0;
    200200                return 1;
     
    207207        switch (buf) {
    208208        case GXEMUL_KEY_F1:
    209                 keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
     209                keybuffer_push0(keybuffer,FUNCTION_KEYS | 1);
    210210                buf = count = 0;
    211211                return 1;
    212212        case GXEMUL_KEY_F2:
    213                 keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
     213                keybuffer_push0(keybuffer,FUNCTION_KEYS | 2);
    214214                buf = count = 0;
    215215                return 1;
    216216        case GXEMUL_KEY_F3:
    217                 keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
     217                keybuffer_push0(keybuffer,FUNCTION_KEYS | 3);
    218218                buf = count = 0;
    219219                return 1;
    220220        case GXEMUL_KEY_F4:
    221                 keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
     221                keybuffer_push0(keybuffer,FUNCTION_KEYS | 4);
    222222                buf = count = 0;
    223223                return 1;
     
    228228                && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
    229229
    230                 keybuffer_push(keybuffer, buf & 0xff);
    231                 keybuffer_push(keybuffer, (buf >> 8) & 0xff);
    232                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     230                keybuffer_push0(keybuffer, buf & 0xff);
     231                keybuffer_push0(keybuffer, (buf >> 8) & 0xff);
     232                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
    233233                buf = count = 0;
    234234                return 1;
     
    250250                return 1;
    251251        default:
    252                 keybuffer_push(keybuffer, buf & 0xff);
    253                 keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
    254                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
    255                 keybuffer_push(keybuffer, (buf >> 24) & 0xff);
     252                keybuffer_push0(keybuffer, buf & 0xff);
     253                keybuffer_push0(keybuffer, (buf >> 8)  & 0xff);
     254                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
     255                keybuffer_push0(keybuffer, (buf >> 24) & 0xff);
    256256                buf = count = 0;
    257257                return 1;
     
    279279        /*
    280280        // Please preserve this code (it can be used to determine scancodes)
    281         keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
    282         keybuffer_push(keybuffer, to_hex(scan_code&0xf));
    283         keybuffer_push(keybuffer, ' ');
    284         keybuffer_push(keybuffer, ' ');
     281        keybuffer_push0(keybuffer, to_hex((scan_code>>4)&0xf));
     282        keybuffer_push0(keybuffer, to_hex(scan_code&0xf));
     283        keybuffer_push0(keybuffer, ' ');
     284        keybuffer_push0(keybuffer, ' ');
    285285        return 1;
    286286        */
     
    295295       
    296296        if ((buf & 0xff) != (GXEMUL_FB_KEY_F1 & 0xff)) {
    297                 keybuffer_push(keybuffer, buf);
     297                keybuffer_push0(keybuffer, buf);
    298298                buf = count = 0;
    299299                return 1;
     
    305305
    306306        if ((buf & 0xffff) != (GXEMUL_FB_KEY_F1 & 0xffff)) {
    307                 keybuffer_push(keybuffer, buf & 0xff);
    308                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
     307                keybuffer_push0(keybuffer, buf & 0xff);
     308                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
    309309                buf = count = 0;
    310310                return 1;
     
    319319                && (buf & 0xffffff) != (GXEMUL_FB_KEY_F9 & 0xffffff)) {
    320320
    321                 keybuffer_push(keybuffer, buf & 0xff);
    322                 keybuffer_push(keybuffer, (buf >> 8) & 0xff);
    323                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     321                keybuffer_push0(keybuffer, buf & 0xff);
     322                keybuffer_push0(keybuffer, (buf >> 8) & 0xff);
     323                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
    324324                buf = count = 0;
    325325                return 1;
     
    332332        switch (buf) {
    333333        case GXEMUL_FB_KEY_F1:
    334                 keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
     334                keybuffer_push0(keybuffer,FUNCTION_KEYS | 1 );
    335335                buf = count = 0;
    336336                return 1;
    337337        case GXEMUL_FB_KEY_F2:
    338                 keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
     338                keybuffer_push0(keybuffer,FUNCTION_KEYS | 2 );
    339339                buf = count = 0;
    340340                return 1;
    341341        case GXEMUL_FB_KEY_F3:
    342                 keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
     342                keybuffer_push0(keybuffer,FUNCTION_KEYS | 3 );
    343343                buf = count = 0;
    344344                return 1;
    345345        case GXEMUL_FB_KEY_F4:
    346                 keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
     346                keybuffer_push0(keybuffer,FUNCTION_KEYS | 4 );
    347347                buf = count = 0;
    348348                return 1;
    349349        case GXEMUL_FB_KEY_F5:
    350                 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
     350                keybuffer_push0(keybuffer,FUNCTION_KEYS | 5 );
    351351                buf = count = 0;
    352352                return 1;
    353353        case GXEMUL_FB_KEY_F6:
    354                 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
     354                keybuffer_push0(keybuffer,FUNCTION_KEYS | 6 );
    355355                buf = count = 0;
    356356                return 1;
    357357        case GXEMUL_FB_KEY_F7:
    358                 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
     358                keybuffer_push0(keybuffer,FUNCTION_KEYS | 7 );
    359359                buf = count = 0;
    360360                return 1;
    361361        case GXEMUL_FB_KEY_F8:
    362                 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
     362                keybuffer_push0(keybuffer,FUNCTION_KEYS | 8 );
    363363                buf = count = 0;
    364364                return 1;
    365365        case GXEMUL_FB_KEY_F9:
    366                 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
     366                keybuffer_push0(keybuffer,FUNCTION_KEYS | 9 );
    367367                buf = count = 0;
    368368                return 1;
    369369        case GXEMUL_FB_KEY_F10:
    370                 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
     370                keybuffer_push0(keybuffer,FUNCTION_KEYS | 10 );
    371371                buf = count = 0;
    372372                return 1;
    373373        case GXEMUL_FB_KEY_F11:
    374                 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
     374                keybuffer_push0(keybuffer,FUNCTION_KEYS | 11 );
    375375                buf = count = 0;
    376376                return 1;
    377377        case GXEMUL_FB_KEY_F12:
    378                 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
     378                keybuffer_push0(keybuffer,FUNCTION_KEYS | 12 );
    379379                buf = count = 0;
    380380                return 1;
    381381        default:
    382                 keybuffer_push(keybuffer, buf & 0xff );
    383                 keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
    384                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
    385                 keybuffer_push(keybuffer, (buf >> 24) & 0xff);
     382                keybuffer_push0(keybuffer, buf & 0xff );
     383                keybuffer_push0(keybuffer, (buf >> 8)  & 0xff);
     384                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
     385                keybuffer_push0(keybuffer, (buf >> 24) & 0xff);
    386386                buf = count = 0;
    387387                return 1;
  • uspace/srv/kbd/arch/ia64/src/kbd.c

    r76dd25b rfa09449  
    179179                switch (buf) {
    180180                case NSKEY_F6:
    181                         keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
     181                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 6);
    182182                        buf = count = 0;
    183183                        return 1;
    184184                case NSKEY_F7:
    185                         keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
     185                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 7);
    186186                        buf = count = 0;
    187187                        return 1;
    188188                case NSKEY_F8:
    189                         keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
     189                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 8);
    190190                        buf = count = 0;
    191191                        return 1;
    192192                case NSKEY_F9:
    193                         keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
     193                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 9);
    194194                        buf = count = 0;
    195195                        return 1;
    196196                case NSKEY_F10:
    197                         keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
     197                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 10);
    198198                        buf = count = 0;
    199199                        return 1;
    200200                case NSKEY_F11:
    201                         keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
     201                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 11);
    202202                        buf = count = 0;
    203203                        return 1;
    204204                case NSKEY_F12:
    205                         keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
     205                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 12);
    206206                        buf = count = 0;
    207207                        return 1;
    208208                default:
    209                         keybuffer_push(keybuffer, buf & 0xff);
    210                         keybuffer_push(keybuffer, (buf >> 8) &0xff);
    211                         keybuffer_push(keybuffer, (buf >> 16) &0xff);
    212                         keybuffer_push(keybuffer, (buf >> 24) &0xff);
    213                         keybuffer_push(keybuffer, scan_code);
     209                        keybuffer_push0(keybuffer, buf & 0xff);
     210                        keybuffer_push0(keybuffer, (buf >> 8) &0xff);
     211                        keybuffer_push0(keybuffer, (buf >> 16) &0xff);
     212                        keybuffer_push0(keybuffer, (buf >> 24) &0xff);
     213                        keybuffer_push0(keybuffer, scan_code);
    214214                        buf = count = 0;
    215215                        return 1;
     
    220220       
    221221        if((buf & 0xff) != (NSKEY_F1 & 0xff)) {
    222                 keybuffer_push(keybuffer, buf);
     222                keybuffer_push0(keybuffer, buf);
    223223                buf = count = 0;
    224224                return 1;
     
    230230        if ((buf & 0xffff) != (NSKEY_F1 & 0xffff))  {
    231231
    232                 keybuffer_push(keybuffer, buf & 0xff);
    233                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
     232                keybuffer_push0(keybuffer, buf & 0xff);
     233                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
    234234                buf = count = 0;
    235235                return 1;
     
    244244                && (buf & 0xffffff) != (NSKEY_F9 & 0xffffff) ) {
    245245
    246                 keybuffer_push(keybuffer, buf & 0xff);
    247                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
    248                 keybuffer_push(keybuffer, (buf >> 16) &0xff);
     246                keybuffer_push0(keybuffer, buf & 0xff);
     247                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
     248                keybuffer_push0(keybuffer, (buf >> 16) &0xff);
    249249                buf = count = 0;
    250250                return 1;
     
    256256        switch (buf) {
    257257        case NSKEY_F1:
    258                 keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
     258                keybuffer_push0(keybuffer,FUNCTION_KEYS | 1);
    259259                buf = count = 0;
    260260                return 1;
    261261        case NSKEY_F2:
    262                 keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
     262                keybuffer_push0(keybuffer,FUNCTION_KEYS | 2);
    263263                buf = count = 0;
    264264                return 1;
    265265        case NSKEY_F3:
    266                 keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
     266                keybuffer_push0(keybuffer,FUNCTION_KEYS | 3);
    267267                buf = count = 0;
    268268                return 1;
    269269        case NSKEY_F4:
    270                 keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
     270                keybuffer_push0(keybuffer,FUNCTION_KEYS | 4);
    271271                buf = count = 0;
    272272                return 1;
    273273        case NSKEY_F5:
    274                 keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
     274                keybuffer_push0(keybuffer,FUNCTION_KEYS | 5);
    275275                buf = count = 0;
    276276                return 1;
     
    289289                return 1;
    290290        default:
    291                 keybuffer_push(keybuffer, buf & 0xff);
    292                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
    293                 keybuffer_push(keybuffer, (buf >> 16) &0xff);
    294                 keybuffer_push(keybuffer, (buf >> 24) &0xff);
     291                keybuffer_push0(keybuffer, buf & 0xff);
     292                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
     293                keybuffer_push0(keybuffer, (buf >> 16) &0xff);
     294                keybuffer_push0(keybuffer, (buf >> 24) &0xff);
    295295                buf = count = 0;
    296296                return 1;
     
    309309         * Please preserve this code (it can be used to determine scancodes)
    310310         */
    311         //keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
    312         //keybuffer_push(keybuffer, to_hex(scan_code&0xf));
    313         //keybuffer_push(keybuffer, ' ');
    314         //keybuffer_push(keybuffer, ' ');
     311        //keybuffer_push0(keybuffer, to_hex((scan_code>>4)&0xf));
     312        //keybuffer_push0(keybuffer, to_hex(scan_code&0xf));
     313        //keybuffer_push0(keybuffer, ' ');
     314        //keybuffer_push0(keybuffer, ' ');
    315315        //*/
    316316       
     
    329329       
    330330                if (!(buf & 0xff00)) {
    331                         keybuffer_push(keybuffer, buf);
     331                        keybuffer_push0(keybuffer, buf);
    332332                } else {
    333333                        switch (buf) {
    334334                        case KEY_F1:
    335                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 1);
     335                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 1);
    336336                                break;
    337337                        case KEY_F2:
    338                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 2);
     338                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 2);
    339339                                break;
    340340                        case KEY_F3:
    341                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 3);
     341                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 3);
    342342                                break;
    343343                        case KEY_F4:
    344                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 4);
     344                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 4);
    345345                                break;
    346346                        case KEY_F5:
    347                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 5);
     347                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 5);
    348348                                break;
    349349                        case KEY_F6:
    350                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 6);
     350                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 6);
    351351                                break;
    352352                        case KEY_F7:
    353                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 7);
     353                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 7);
    354354                                break;
    355355                        case KEY_F8:
    356                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 8);
     356                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 8);
    357357                                break;
    358358                        case KEY_F9:
    359                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 9);
     359                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 9);
    360360                                break;
    361361                        case KEY_F10:
    362                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 10);
     362                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 10);
    363363                                break;
    364364                        case KEY_F11:
    365                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 11);
     365                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 11);
    366366                                break;
    367367                        case KEY_F12:
    368                                 keybuffer_push(keybuffer, FUNCTION_KEYS | 12);
     368                                keybuffer_push0(keybuffer, FUNCTION_KEYS | 12);
    369369                                break;
    370370                        }
  • uspace/srv/kbd/arch/mips32/src/kbd.c

    r76dd25b rfa09449  
    108108        /* Please preserve this code (it can be used to determine scancodes)
    109109       
    110         keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
    111         keybuffer_push(keybuffer, to_hex(scan_code&0xf));
    112         keybuffer_push(keybuffer, ' ');
    113         keybuffer_push(keybuffer, ' ');
     110        keybuffer_push0(keybuffer, to_hex((scan_code>>4)&0xf));
     111        keybuffer_push0(keybuffer, to_hex(scan_code&0xf));
     112        keybuffer_push0(keybuffer, ' ');
     113        keybuffer_push0(keybuffer, ' ');
    114114       
    115115        return 1;
     
    123123       
    124124        if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
    125                 keybuffer_push(keybuffer, buf);
     125                keybuffer_push0(keybuffer, buf);
    126126                buf = count = 0;
    127127                return 1;
     
    132132
    133133        if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) {
    134                 keybuffer_push(keybuffer, buf & 0xff);
    135                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
     134                keybuffer_push0(keybuffer, buf & 0xff);
     135                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
    136136                buf = count = 0;
    137137                return 1;
     
    146146                && (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
    147147
    148                 keybuffer_push(keybuffer, buf & 0xff);
    149                 keybuffer_push(keybuffer, (buf >> 8) & 0xff);
    150                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     148                keybuffer_push0(keybuffer, buf & 0xff);
     149                keybuffer_push0(keybuffer, (buf >> 8) & 0xff);
     150                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
    151151                buf = count = 0;
    152152                return 1;
     
    159159        switch (buf) {
    160160        case GXEMUL_KEY_F1:
    161                 keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
     161                keybuffer_push0(keybuffer,FUNCTION_KEYS | 1 );
    162162                buf=count=0;
    163163                return 1;
    164164        case GXEMUL_KEY_F2:
    165                 keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
     165                keybuffer_push0(keybuffer,FUNCTION_KEYS | 2 );
    166166                buf=count=0;
    167167                return 1;
    168168        case GXEMUL_KEY_F3:
    169                 keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
     169                keybuffer_push0(keybuffer,FUNCTION_KEYS | 3 );
    170170                buf=count=0;
    171171                return 1;
    172172        case GXEMUL_KEY_F4:
    173                 keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
     173                keybuffer_push0(keybuffer,FUNCTION_KEYS | 4 );
    174174                buf=count=0;
    175175                return 1;
    176176        case GXEMUL_KEY_F5:
    177                 keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
     177                keybuffer_push0(keybuffer,FUNCTION_KEYS | 5 );
    178178                buf=count=0;
    179179                return 1;
    180180        case GXEMUL_KEY_F6:
    181                 keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
     181                keybuffer_push0(keybuffer,FUNCTION_KEYS | 6 );
    182182                buf=count=0;
    183183                return 1;
    184184        case GXEMUL_KEY_F7:
    185                 keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
     185                keybuffer_push0(keybuffer,FUNCTION_KEYS | 7 );
    186186                buf=count=0;
    187187                return 1;
    188188        case GXEMUL_KEY_F8:
    189                 keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
     189                keybuffer_push0(keybuffer,FUNCTION_KEYS | 8 );
    190190                buf=count=0;
    191191                return 1;
    192192        case GXEMUL_KEY_F9:
    193                 keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
     193                keybuffer_push0(keybuffer,FUNCTION_KEYS | 9 );
    194194                buf=count=0;
    195195                return 1;
    196196        case GXEMUL_KEY_F10:
    197                 keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
     197                keybuffer_push0(keybuffer,FUNCTION_KEYS | 10 );
    198198                buf=count=0;
    199199                return 1;
    200200        case GXEMUL_KEY_F11:
    201                 keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
     201                keybuffer_push0(keybuffer,FUNCTION_KEYS | 11 );
    202202                buf=count=0;
    203203                return 1;
    204204        case GXEMUL_KEY_F12:
    205                 keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
     205                keybuffer_push0(keybuffer,FUNCTION_KEYS | 12 );
    206206                buf=count=0;
    207207                return 1;
    208208        default:
    209                 keybuffer_push(keybuffer, buf & 0xff );
    210                 keybuffer_push(keybuffer, (buf >> 8) &0xff );
    211                 keybuffer_push(keybuffer, (buf >> 16) &0xff );
    212                 keybuffer_push(keybuffer, (buf >> 24) &0xff );
     209                keybuffer_push0(keybuffer, buf & 0xff );
     210                keybuffer_push0(keybuffer, (buf >> 8) &0xff );
     211                keybuffer_push0(keybuffer, (buf >> 16) &0xff );
     212                keybuffer_push0(keybuffer, (buf >> 24) &0xff );
    213213                buf=count=0;
    214214                return 1;
  • uspace/srv/kbd/arch/ppc32/src/kbd.c

    r76dd25b rfa09449  
    193193                       
    194194                        if (key != SPECIAL)
    195                                 keybuffer_push(keybuffer, key);
     195                                keybuffer_push0(keybuffer, key);
    196196                }
    197197        }
  • uspace/srv/kbd/genarch/src/kbd.c

    r76dd25b rfa09449  
    7474        int shift, capslock;
    7575        int letter = 0;
     76        kbd_event_t ev;
    7677
    7778        static int esc_count = 0;
     
    103104                if (shift)
    104105                        map = sc_secondary_map;
    105                 if (map[key] != SPECIAL)
    106                         keybuffer_push(keybuffer, map[key]);   
     106                if (map[key] != SPECIAL) {
     107                        ev.key = map[key];
     108                        ev.mods = 0;
     109                        ev.c = map[key];
     110                        keybuffer_push(keybuffer, &ev);
     111                }
    107112                break;
    108113        }
  • uspace/srv/kbd/genarch/src/nofb.c

    r76dd25b rfa09449  
    6767                switch (buf) {
    6868                case KEY_F5:
    69                         keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
     69                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 5);
    7070                        buf = count = 0;
    7171                        return 1;
    7272                case KEY_F6:
    73                         keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
     73                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 6);
    7474                        buf = count = 0;
    7575                        return 1;
    7676                case KEY_F7:
    77                         keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
     77                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 7);
    7878                        buf = count = 0;
    7979                        return 1;
    8080                case KEY_F8:
    81                         keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
     81                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 8);
    8282                        buf = count = 0;
    8383                        return 1;
    8484                case KEY_F9:
    85                         keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
     85                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 9);
    8686                        buf = count = 0;
    8787                        return 1;
    8888                case KEY_F10:
    89                         keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
     89                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 10);
    9090                        buf = count = 0;
    9191                        return 1;
    9292                case KEY_F11:
    93                         keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
     93                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 11);
    9494                        buf = count = 0;
    9595                        return 1;
    9696                case KEY_F12:
    97                         keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
     97                        keybuffer_push0(keybuffer,FUNCTION_KEYS | 12);
    9898                        buf = count = 0;
    9999                        return 1;
    100100                default:
    101                         keybuffer_push(keybuffer, buf & 0xff);
    102                         keybuffer_push(keybuffer, (buf >> 8) &0xff);
    103                         keybuffer_push(keybuffer, (buf >> 16) &0xff);
    104                         keybuffer_push(keybuffer, (buf >> 24) &0xff);
    105                         keybuffer_push(keybuffer, scan_code);
     101                        keybuffer_push0(keybuffer, buf & 0xff);
     102                        keybuffer_push0(keybuffer, (buf >> 8) &0xff);
     103                        keybuffer_push0(keybuffer, (buf >> 16) &0xff);
     104                        keybuffer_push0(keybuffer, (buf >> 24) &0xff);
     105                        keybuffer_push0(keybuffer, scan_code);
    106106                        buf = count = 0;
    107107                        return 1;
     
    112112       
    113113        if((buf & 0xff) != (KEY_F1 & 0xff)) {
    114                 keybuffer_push(keybuffer, buf);
     114                keybuffer_push0(keybuffer, buf);
    115115                buf = count = 0;
    116116                return 1;
     
    123123                && (buf & 0xffff) != (KEY_F5 & 0xffff) ) {
    124124
    125                 keybuffer_push(keybuffer, buf & 0xff);
    126                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
     125                keybuffer_push0(keybuffer, buf & 0xff);
     126                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
    127127                buf = count = 0;
    128128                return 1;
     
    134134        switch (buf) {
    135135        case KEY_F1:
    136                 keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
     136                keybuffer_push0(keybuffer,FUNCTION_KEYS | 1);
    137137                buf = count = 0;
    138138                return 1;
    139139        case KEY_F2:
    140                 keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
     140                keybuffer_push0(keybuffer,FUNCTION_KEYS | 2);
    141141                buf = count = 0;
    142142                return 1;
    143143        case KEY_F3:
    144                 keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
     144                keybuffer_push0(keybuffer,FUNCTION_KEYS | 3);
    145145                buf = count = 0;
    146146                return 1;
    147147        case KEY_F4:
    148                 keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
     148                keybuffer_push0(keybuffer,FUNCTION_KEYS | 4);
    149149                buf = count = 0;
    150150                return 1;
     
    155155                && (buf & 0xffffff) != (KEY_F9 & 0xffffff)) {
    156156
    157                 keybuffer_push(keybuffer, buf & 0xff);
    158                 keybuffer_push(keybuffer, (buf >> 8) & 0xff);
    159                 keybuffer_push(keybuffer, (buf >> 16) & 0xff);
     157                keybuffer_push0(keybuffer, buf & 0xff);
     158                keybuffer_push0(keybuffer, (buf >> 8) & 0xff);
     159                keybuffer_push0(keybuffer, (buf >> 16) & 0xff);
    160160                buf=count=0;
    161161                return 1;
     
    176176                return 1;
    177177        default:
    178                 keybuffer_push(keybuffer, buf & 0xff);
    179                 keybuffer_push(keybuffer, (buf >> 8) &0xff);
    180                 keybuffer_push(keybuffer, (buf >> 16) &0xff);
    181                 keybuffer_push(keybuffer, (buf >> 24) &0xff);
     178                keybuffer_push0(keybuffer, buf & 0xff);
     179                keybuffer_push0(keybuffer, (buf >> 8) &0xff);
     180                keybuffer_push0(keybuffer, (buf >> 16) &0xff);
     181                keybuffer_push0(keybuffer, (buf >> 24) &0xff);
    182182                buf = count = 0;
    183183                return 1;
  • uspace/srv/kbd/generic/kbd.c

    r76dd25b rfa09449  
    4343#include <stdio.h>
    4444#include <ipc/ns.h>
     45#include <async.h>
    4546#include <errno.h>
     47#include <libadt/fifo.h>
     48#include <kbd/kbd.h>
     49
    4650#include <arch/kbd.h>
    4751#include <kbd.h>
    48 #include <libadt/fifo.h>
    4952#include <key_buffer.h>
    50 #include <async.h>
    5153#include <keys.h>
    5254
     
    5961static void irq_handler(ipc_callid_t iid, ipc_call_t *call)
    6062{
    61         int chr;
     63        kbd_event_t ev;
    6264
    6365#ifdef MOUSE_ENABLED
     
    7072        if (cons_connected && phone2cons != -1) {
    7173                /*
    72                  * recode to ASCII - one interrupt can produce more than one
    73                  * code so result is stored in fifo
     74                 * One interrupt can produce more than one event so the result
     75                 * is stored in a FIFO.
    7476                 */
    7577                while (!keybuffer_empty(&keybuffer)) {
    76                         if (!keybuffer_pop(&keybuffer, (int *)&chr))
     78                        if (!keybuffer_pop(&keybuffer, &ev))
    7779                                break;
    7880
    79                         async_msg_1(phone2cons, KBD_PUSHCHAR, chr);
     81                        async_msg_4(phone2cons, KBD_EVENT, ev.type, ev.key,
     82                            ev.mods, ev.c);
    8083                }
    8184        }
  • uspace/srv/kbd/generic/key_buffer.c

    r76dd25b rfa09449  
    4141/** Clear key buffer.
    4242 */
    43 void keybuffer_free(keybuffer_t *keybuffer) 
     43void keybuffer_free(keybuffer_t *keybuffer)
    4444{
    4545        futex_down(&keybuffer_futex);
     
    7676}
    7777
    78 /** Push key to key buffer.
    79  * If buffer is full, character is ignored.
    80  * @param key code of stored key
     78/** Push key event to key buffer.
     79 *
     80 * If the buffer is full, the event is ignored.
     81 *
     82 * @param keybuffer     The keybuffer.
     83 * @param ev            The event to push.
    8184 */
    82 void keybuffer_push(keybuffer_t *keybuffer, int key)
     85void keybuffer_push(keybuffer_t *keybuffer, const kbd_event_t *ev)
    8386{
    8487        futex_down(&keybuffer_futex);
    8588        if (keybuffer->items < KEYBUFFER_SIZE) {
    86                 keybuffer->fifo[keybuffer->tail] = key;
     89                keybuffer->fifo[keybuffer->tail] = *ev;
    8790                keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
    8891                keybuffer->items++;
     
    9194}
    9295
    93 /** Pop character from buffer.
    94  * @param c pointer to space where to store character from buffer.
    95  * @return zero on empty buffer, nonzero else
     96void keybuffer_push0(keybuffer_t *keybuffer, int c)
     97{
     98        kbd_event_t ev;
     99
     100        ev.key = c; ev.mods = 0; ev.c = c;
     101        keybuffer_push(keybuffer, &ev);
     102}
     103
     104/** Pop event from buffer.
     105 *
     106 * @param edst  Pointer to where the event should be saved.
     107 * @return      Zero on empty buffer, nonzero otherwise.
    96108 */
    97 int keybuffer_pop(keybuffer_t *keybuffer, int *c)
     109int keybuffer_pop(keybuffer_t *keybuffer, kbd_event_t *edst)
    98110{
    99111        futex_down(&keybuffer_futex);
    100112        if (keybuffer->items > 0) {
    101113                keybuffer->items--;
    102                 *c = (keybuffer->fifo[keybuffer->head]) ;
     114                *edst = (keybuffer->fifo[keybuffer->head]) ;
    103115                keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
    104116                futex_up(&keybuffer_futex);
  • uspace/srv/kbd/include/key_buffer.h

    r76dd25b rfa09449  
    3939
    4040#include <sys/types.h>
     41#include <kbd/kbd.h>
    4142
    4243/** Size of buffer for pressed keys */
     
    4445
    4546typedef struct {
    46         int fifo[KEYBUFFER_SIZE];
     47        kbd_event_t fifo[KEYBUFFER_SIZE];
    4748        unsigned long head;
    4849        unsigned long tail;
     
    5051} keybuffer_t;
    5152
    52 void keybuffer_free(keybuffer_t *keybuffer);
    53 void keybuffer_init(keybuffer_t *keybuffer);
    54 int keybuffer_available(keybuffer_t *keybuffer);
    55 int keybuffer_empty(keybuffer_t *keybuffer);
    56 void keybuffer_push(keybuffer_t *keybuffer, int key);
    57 int keybuffer_pop(keybuffer_t *keybuffer, int *c);
     53extern void keybuffer_free(keybuffer_t *);
     54extern void keybuffer_init(keybuffer_t *);
     55extern int keybuffer_available(keybuffer_t *);
     56extern int keybuffer_empty(keybuffer_t *);
     57extern void keybuffer_push(keybuffer_t *, const kbd_event_t *);
     58extern void keybuffer_push0(keybuffer_t *, int c);
     59extern int keybuffer_pop(keybuffer_t *, kbd_event_t *);
    5860
    5961#endif
  • uspace/srv/kbd/include/keys.h

    r76dd25b rfa09449  
    3838#define _KBD_KEYS_H_
    3939
    40 #define KBD_PUSHCHAR    1024
    41 #define KBD_MS_LEFT     1025
    42 #define KBD_MS_RIGHT    1026
    43 #define KBD_MS_MIDDLE   1027
    44 #define KBD_MS_MOVE     1028
     40#define KBD_EVENT       1024
     41#define KBD_MS_LEFT     1025
     42#define KBD_MS_RIGHT    1026
     43#define KBD_MS_MIDDLE   1027
     44#define KBD_MS_MOVE     1028
    4545
    4646#define KBD_KEY_F1      0x3b
Note: See TracChangeset for help on using the changeset viewer.