Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/char/xtkbd/xtkbd.c

    r75751db6 r56fd7cf  
    3636#include <ddf/log.h>
    3737#include <io/keycode.h>
    38 #include <io/chardev.h>
    3938#include <io/console.h>
    4039#include <ipc/kbdev.h>
    4140#include <abi/ipc/methods.h>
    4241
     42#include "chardev.h"
    4343#include "xtkbd.h"
    4444
     
    159159static const int scanmap_e0[] = {
    160160        [0x38] = KC_RALT,
    161         [0x1d] = KC_RCTRL,
     161        [0x1d] = KC_RSHIFT,
    162162
    163163        [0x37] = KC_PRTSCR,
     
    199199 * @param dev DDF device structure.
    200200 *
    201  * Connects to parent, creates keyboard function, starts polling fibril.
     201 * Connects to parent, creates mouse function, starts polling fibril.
    202202 */
    203203int xt_kbd_init(xt_kbd_t *kbd, ddf_dev_t *dev)
     
    207207        kbd->client_sess = NULL;
    208208        kbd->parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
    209         if (!kbd->parent_sess) {
    210                 ddf_msg(LVL_ERROR, "Failed creating parent session.");
    211                 return EIO;
    212         }
     209        if (!kbd->parent_sess)
     210                return ENOMEM;
    213211
    214212        kbd->kbd_fun = ddf_fun_create(dev, fun_exposed, "kbd");
    215213        if (!kbd->kbd_fun) {
    216                 ddf_msg(LVL_ERROR, "Failed creating function 'kbd'.");
    217214                return ENOMEM;
    218215        }
     
    221218        int ret = ddf_fun_bind(kbd->kbd_fun);
    222219        if (ret != EOK) {
    223                 ddf_msg(LVL_ERROR, "Failed binding function 'kbd'.");
    224220                ddf_fun_destroy(kbd->kbd_fun);
    225                 return EEXIST;
     221                return ENOMEM;
    226222        }
    227223
    228224        ret = ddf_fun_add_to_category(kbd->kbd_fun, "keyboard");
    229225        if (ret != EOK) {
    230                 ddf_msg(LVL_ERROR, "Failed adding function 'kbd' to category "
    231                     "'keyboard'.");
    232226                ddf_fun_unbind(kbd->kbd_fun);
    233227                ddf_fun_destroy(kbd->kbd_fun);
     
    237231        kbd->polling_fibril = fibril_create(polling, kbd);
    238232        if (!kbd->polling_fibril) {
    239                 ddf_msg(LVL_ERROR, "Failed creating polling fibril.");
    240233                ddf_fun_unbind(kbd->kbd_fun);
    241234                ddf_fun_destroy(kbd->kbd_fun);
    242235                return ENOMEM;
    243236        }
    244 
    245237        fibril_add_ready(kbd->polling_fibril);
    246238        return EOK;
     
    249241/** Get data and parse scancodes.
    250242 * @param arg Pointer to xt_kbd_t structure.
    251  * @return EIO on error.
     243 * @return Never.
    252244 */
    253245int polling(void *arg)
     
    267259                uint8_t code = 0;
    268260                ssize_t size = chardev_read(parent_exch, &code, 1);
    269                 if (size != 1)
    270                         return EIO;
    271261
    272262                /** Ignore AT command reply */
     
    279269                        map_size = sizeof(scanmap_e0) / sizeof(int);
    280270                        size = chardev_read(parent_exch, &code, 1);
    281                         if (size != 1)
    282                                 return EIO;
    283 
    284271                        // TODO handle print screen
    285272                }
     273
     274                /* Invalid read. */
     275                if (size != 1) {
     276                        continue;
     277                }
     278
    286279
    287280                /* Bit 7 indicates press/release */
Note: See TracChangeset for help on using the changeset viewer.