Changeset d1eece6 in mainline for uspace/srv/kbd/generic/kbd.c


Ignore:
Timestamp:
2009-02-19T22:54:32Z (16 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
013c4d6
Parents:
91825d90
Message:

Basic support for key modifiers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/kbd/generic/kbd.c

    r91825d90 rd1eece6  
    5858int cons_connected = 0;
    5959int phone2cons = -1;
    60 keybuffer_t keybuffer; 
     60keybuffer_t keybuffer;
     61
     62/** Currently active modifiers. */
     63static unsigned mods;
    6164
    6265void kbd_push_scancode(int scancode)
     
    6770
    6871#include <kbd/keycode.h>
    69 void kbd_push_ev(int type, unsigned int key, unsigned int mods)
     72void kbd_push_ev(int type, unsigned int key)
    7073{
    7174        kbd_event_t ev;
     75        unsigned mod_mask;
     76
     77        switch (key) {
     78        case KC_LCTRL: mod_mask = KM_LCTRL; break;
     79        case KC_RCTRL: mod_mask = KM_RCTRL; break;
     80        case KC_LSHIFT: mod_mask = KM_LSHIFT; break;
     81        case KC_RSHIFT: mod_mask = KM_RSHIFT; break;
     82        case KC_LALT: mod_mask = KM_LALT; break;
     83        case KC_RALT: mod_mask = KM_RALT; break;
     84        default: mod_mask = 0; break;
     85        }
     86
     87        if (mod_mask != 0) {
     88                if (type == KE_PRESS)
     89                        mods = mods | mod_mask;
     90                else
     91                        mods = mods & ~mod_mask;
     92        }
     93
     94        switch (key) {
     95        case KC_CAPS_LOCK: mod_mask = KM_CAPS_LOCK; break;
     96        case KC_NUM_LOCK: mod_mask = KM_NUM_LOCK; break;
     97        case KC_SCROLL_LOCK: mod_mask = KM_SCROLL_LOCK; break;
     98        default: mod_mask = 0; break;
     99        }
     100
     101        if (mod_mask != 0 && type == KE_PRESS)
     102                mods = mods ^ mod_mask;
    72103
    73104        printf("type: %d\n", type);
     
    83114        async_msg_4(phone2cons, KBD_EVENT, ev.type, ev.key, ev.mods, ev.c);
    84115}
    85 
    86 //static void irq_handler(ipc_callid_t iid, ipc_call_t *call)
    87 //{
    88 //      kbd_event_t ev;
    89 //
    90 //      kbd_arch_process(&keybuffer, call);
    91 //
    92 //      if (cons_connected && phone2cons != -1) {
    93 //              /*
    94 //               * One interrupt can produce more than one event so the result
    95 //               * is stored in a FIFO.
    96 //               */
    97 //              while (!keybuffer_empty(&keybuffer)) {
    98 //                      if (!keybuffer_pop(&keybuffer, &ev))
    99 //                              break;
    100 //
    101 //                      async_msg_4(phone2cons, KBD_EVENT, ev.type, ev.key,
    102 //                          ev.mods, ev.c);
    103 //              }
    104 //      }
    105 //}
    106116
    107117static void console_connection(ipc_callid_t iid, ipc_call_t *icall)
     
    143153
    144154
    145 
    146155int main(int argc, char **argv)
    147156{
Note: See TracChangeset for help on using the changeset viewer.