Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/hid/atkbd/atkbd.c

    rd420b22 r5d50c419  
    11/*
     2 * Copyright (c) 2017 Jiri Svoboda
    23 * Copyright (c) 2011 Jan Vesely
    34 * Copyright (c) 2009 Vineeth Pillai
     
    201202static int polling(void *arg)
    202203{
    203         const at_kbd_t *kbd = arg;
    204        
    205         assert(kbd);
    206         assert(kbd->parent_sess);
    207        
    208         async_exch_t *parent_exch = async_exchange_begin(kbd->parent_sess);
     204        at_kbd_t *kbd = arg;
     205        size_t nwr;
     206        int rc;
    209207       
    210208        while (true) {
    211                 if (!parent_exch)
    212                         parent_exch = async_exchange_begin(kbd->parent_sess);
    213 
    214209                uint8_t code = 0;
    215                 ssize_t size = chardev_read(parent_exch, &code, 1);
    216                 if (size != 1)
     210                rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     211                if (rc != EOK)
    217212                        return EIO;
    218213               
     
    224219                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    225220                       
    226                         size = chardev_read(parent_exch, &code, 1);
    227                         if (size != 1)
     221                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     222                        if (rc != EOK)
    228223                                return EIO;
    229224                } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    230                         size = chardev_read(parent_exch, &code, 1);
    231                         if (size != 1)
     225                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     226                        if (rc != EOK)
    232227                                return EIO;
    233228                        if (code != 0x14)
    234229                                continue;
    235230
    236                         size = chardev_read(parent_exch, &code, 1);
    237                         if (size != 1)
     231                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     232                        if (rc != EOK)
    238233                                return EIO;
    239234                        if (code != 0x77)
    240235                                continue;
    241236
    242                         size = chardev_read(parent_exch, &code, 1);
    243                         if (size != 1)
     237                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     238                        if (rc != EOK)
    244239                                return EIO;
    245240                        if (code != 0xe1)
    246241                                continue;
    247242
    248                         size = chardev_read(parent_exch, &code, 1);
    249                         if (size != 1)
     243                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     244                        if (rc != EOK)
    250245                                return EIO;
    251246                        if (code != 0xf0)
    252247                                continue;
    253248
    254                         size = chardev_read(parent_exch, &code, 1);
    255                         if (size != 1)
     249                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     250                        if (rc != EOK)
    256251                                return EIO;
    257252                        if (code != 0x14)
    258253                                continue;
    259254
    260                         size = chardev_read(parent_exch, &code, 1);
    261                         if (size != 1)
     255                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     256                        if (rc != EOK)
    262257                                return EIO;
    263258                        if (code != 0xf0)
    264259                                continue;
    265260
    266                         size = chardev_read(parent_exch, &code, 1);
    267                         if (size != 1)
     261                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     262                        if (rc != EOK)
    268263                                return EIO;
    269264                        if (code == 0x77)
     
    279274                if (code == KBD_SCANCODE_KEY_RELEASE) {
    280275                        type = KEY_RELEASE;
    281                         size = chardev_read(parent_exch, &code, 1);
    282                         if (size != 1)
     276                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     277                        if (rc != EOK)
    283278                                return EIO;
    284279                } else {
     
    362357int at_kbd_init(at_kbd_t *kbd, ddf_dev_t *dev)
    363358{
     359        async_sess_t *parent_sess;
     360        int rc;
     361       
    364362        assert(kbd);
    365363        assert(dev);
    366364       
    367365        kbd->client_sess = NULL;
    368         kbd->parent_sess = ddf_dev_parent_sess_get(dev);
    369        
    370         if (!kbd->parent_sess) {
     366        parent_sess = ddf_dev_parent_sess_get(dev);
     367        if (parent_sess == NULL) {
    371368                ddf_msg(LVL_ERROR, "Failed creating parent session.");
     369                rc = EIO;
     370                goto error;
     371        }
     372       
     373        rc = chardev_open(parent_sess, &kbd->chardev);
     374        if (rc != EOK) {
     375                ddf_msg(LVL_ERROR, "Failed opening character device.");
    372376                return EIO;
    373377        }
     
    407411        fibril_add_ready(kbd->polling_fibril);
    408412        return EOK;
     413error:
     414        chardev_close(kbd->chardev);
     415        kbd->chardev = NULL;
     416        return rc;
    409417}
Note: See TracChangeset for help on using the changeset viewer.