Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhid/kbddev.c

    r2f593872 rac8285d  
    3838#include <str_error.h>
    3939#include <fibril.h>
    40 #include <stdio.h>
    4140
    4241#include <io/keycode.h>
     
    6362static const size_t BOOTP_BUFFER_SIZE = 8;
    6463static const size_t BOOTP_BUFFER_OUT_SIZE = 1;
    65 static const uint8_t BOOTP_ERROR_ROLLOVER = 1;
    66 static const uint8_t IDLE_RATE = 0;
    6764
    6865/** Keyboard polling endpoint description for boot protocol class. */
     
    152149        uint8_t buffer[BOOTP_BUFFER_OUT_SIZE];
    153150        int rc= 0;
     151        unsigned i;
    154152       
    155153        memset(buffer, 0, BOOTP_BUFFER_OUT_SIZE);
     
    179177        }
    180178       
    181         usb_log_debug("Output report buffer: %s\n",
    182             usb_debug_str_buffer(buffer, BOOTP_BUFFER_OUT_SIZE, 0));
    183        
     179        // TODO: REFACTOR!!!
     180       
     181        usb_log_debug("Output report buffer: ");
     182        for (i = 0; i < BOOTP_BUFFER_OUT_SIZE; ++i) {
     183                usb_log_debug("0x%x ", buffer[i]);
     184        }
     185        usb_log_debug("\n");
     186       
     187        uint16_t value = 0;
     188        value |= (USB_HID_REPORT_TYPE_OUTPUT << 8);
     189
    184190        assert(kbd_dev->hid_dev != NULL);
    185191        assert(kbd_dev->hid_dev->initialized);
    186         usbhid_req_set_report(kbd_dev->hid_dev, USB_HID_REPORT_TYPE_OUTPUT,
    187             buffer, BOOTP_BUFFER_OUT_SIZE);
     192        usbhid_req_set_report(kbd_dev->hid_dev, value, buffer,
     193            BOOTP_BUFFER_OUT_SIZE);
    188194}
    189195
     
    222228
    223229        if (mod_mask != 0) {
     230                usb_log_debug2("\n\nChanging mods and lock keys\n");
     231                usb_log_debug2("\nmods before: 0x%x\n", kbd_dev->mods);
     232                usb_log_debug2("\nLock keys before:0x%x\n\n",
     233                    kbd_dev->lock_keys);
     234               
    224235                if (type == KEY_PRESS) {
     236                        usb_log_debug2("\nKey pressed.\n");
    225237                        /*
    226238                         * Only change lock state on transition from released
     
    235247                        usbhid_kbd_set_led(kbd_dev);
    236248                } else {
     249                        usb_log_debug2("\nKey released.\n");
    237250                        kbd_dev->lock_keys = kbd_dev->lock_keys & ~mod_mask;
    238251                }
    239252        }
    240253
     254        usb_log_debug2("\n\nmods after: 0x%x\n", kbd_dev->mods);
     255        usb_log_debug2("\nLock keys after: 0x%x\n\n", kbd_dev->lock_keys);
     256       
    241257        if (key == KC_CAPS_LOCK || key == KC_NUM_LOCK || key == KC_SCROLL_LOCK) {
    242258                // do not send anything to the console, this is our business
     
    265281        ev.key = key;
    266282        ev.mods = kbd_dev->mods;
     283       
     284        if (ev.mods & KM_NUM_LOCK) {
     285                usb_log_debug("\n\nNum Lock turned on.\n\n");
     286        }
    267287
    268288        ev.c = layout[active_layout]->parse_ev(&ev);
    269289
    270290        usb_log_debug2("Sending key %d to the console\n", ev.key);
    271         if (kbd_dev->console_phone < 0) {
    272                 usb_log_warning(
    273                     "Connection to console not ready, key discarded.\n");
    274                 return;
    275         }
     291        assert(kbd_dev->console_phone != -1);
    276292       
    277293        async_msg_4(kbd_dev->console_phone, KBD_EVENT, ev.type, ev.key,
     
    320336    const uint8_t *key_codes)
    321337{
     338        // TODO: phantom state!!
     339       
    322340        unsigned int key;
    323341        unsigned int i, j;
    324        
    325         /*
    326          * First of all, check if the kbd have reported phantom state.
    327          */
    328         i = 0;
    329         // all fields should report Error Rollover
    330         while (i < kbd_dev->keycode_count &&
    331             key_codes[i] == BOOTP_ERROR_ROLLOVER) {
    332                 ++i;
    333         }
    334         if (i == kbd_dev->keycode_count) {
    335                 usb_log_debug("Phantom state occured.\n");
    336                 // phantom state, do nothing
    337                 return;
    338         }
    339342       
    340343        // TODO: quite dummy right now, think of better implementation
     
    355358                        key = usbhid_parse_scancode(kbd_dev->keycodes[j]);
    356359                        usbhid_kbd_push_ev(kbd_dev, KEY_RELEASE, key);
    357                         usb_log_debug2("Key released: %d\n", key);
     360                        usb_log_debug2("\nKey released: %d\n", key);
    358361                } else {
    359362                        // found, nothing happens
     
    375378                        // not found, i.e. new key pressed
    376379                        key = usbhid_parse_scancode(key_codes[i]);
    377                         usb_log_debug2("Key pressed: %d (keycode: %d)\n", key,
     380                        usb_log_debug2("\nKey pressed: %d (keycode: %d)\n", key,
    378381                            key_codes[i]);
    379382                        usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key);
     
    382385                }
    383386        }
    384 //      // report all currently pressed keys
    385 //      for (i = 0; i < kbd_dev->keycode_count; ++i) {
    386 //              if (key_codes[i] != 0) {
    387 //                      key = usbhid_parse_scancode(key_codes[i]);
    388 //                      usb_log_debug2("Key pressed: %d (keycode: %d)\n", key,
    389 //                          key_codes[i]);
    390 //                      usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key);
    391 //              }
    392 //      }
    393387       
    394388        memcpy(kbd_dev->keycodes, key_codes, kbd_dev->keycode_count);
    395 
    396         usb_log_debug("New stored keycodes: %s\n",
    397             usb_debug_str_buffer(kbd_dev->keycodes, kbd_dev->keycode_count, 0));
     389       
     390        usb_log_debug2("\nNew stored keycodes: ");
     391        for (i = 0; i < kbd_dev->keycode_count; ++i) {
     392                usb_log_debug2("%d ", kbd_dev->keycodes[i]);
     393        }
    398394}
    399395
     
    410406                return;
    411407        }
     408
     409        usb_log_debug2("Got keys from parser: ");
     410        unsigned i;
     411        for (i = 0; i < count; ++i) {
     412                usb_log_debug2("%d ", key_codes[i]);
     413        }
     414        usb_log_debug2("\n");
    412415       
    413416        usbhid_kbd_t *kbd_dev = (usbhid_kbd_t *)arg;
    414417        assert(kbd_dev != NULL);
    415 
    416         usb_log_debug("Got keys from parser: %s\n",
    417             usb_debug_str_buffer(key_codes, kbd_dev->keycode_count, 0));
    418418       
    419419        if (count != kbd_dev->keycode_count) {
     
    440440        callbacks->keyboard = usbhid_kbd_process_keycodes;
    441441
    442         usb_log_debug("Calling usb_hid_parse_report() with "
    443             "buffer %s\n", usb_debug_str_buffer(buffer, actual_size, 0));
    444        
    445 //      int rc = usb_hid_boot_keyboard_input_report(buffer, actual_size,
    446 //          callbacks, kbd_dev);
    447         int rc = usb_hid_parse_report(kbd_dev->hid_dev->parser, buffer,
    448             actual_size, callbacks, kbd_dev);
     442        //usb_hid_parse_report(kbd_dev->parser, buffer, actual_size, callbacks,
     443        //    NULL);
     444        /*usb_log_debug2("Calling usb_hid_boot_keyboard_input_report() with size"
     445            " %zu\n", actual_size);*/
     446        //dump_buffer("bufffer: ", buffer, actual_size);
     447       
     448        int rc = usb_hid_boot_keyboard_input_report(buffer, actual_size,
     449            callbacks, kbd_dev);
    449450       
    450451        if (rc != EOK) {
     
    498499        }
    499500       
    500         usb_hid_free_report_parser((*kbd_dev)->parser);
    501        
    502501        free(*kbd_dev);
    503502        *kbd_dev = NULL;
     
    556555         * Set boot protocol.
    557556         * Set LEDs according to initial setup.
    558          * Set Idle rate
    559557         */
    560558        assert(kbd_dev->hid_dev != NULL);
    561559        assert(kbd_dev->hid_dev->initialized);
    562         //usbhid_req_set_protocol(kbd_dev->hid_dev, USB_HID_PROTOCOL_BOOT);
     560        usbhid_req_set_protocol(kbd_dev->hid_dev, USB_HID_PROTOCOL_BOOT);
    563561       
    564562        usbhid_kbd_set_led(kbd_dev);
    565        
    566         usbhid_req_set_idle(kbd_dev->hid_dev, IDLE_RATE);
    567563       
    568564        kbd_dev->initialized = 1;
     
    593589
    594590        while (true) {
     591                async_usleep(1000 * 10);
     592
    595593                sess_rc = usb_endpoint_pipe_start_session(
    596594                    &kbd_dev->hid_dev->poll_pipe);
     
    633631                usb_log_debug("Calling usbhid_kbd_process_data()\n");
    634632                usbhid_kbd_process_data(kbd_dev, buffer, actual_size);
    635                
    636                 // disabled for now, no reason to sleep
    637                 //async_usleep(kbd_dev->hid_dev->poll_interval);
    638633        }
    639634
Note: See TracChangeset for help on using the changeset viewer.