Changeset 15c5418 in mainline for uspace/drv/hid/atkbd/atkbd.c


Ignore:
Timestamp:
2017-11-18T20:06:15Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
75fcf9b
Parents:
efb9fd08
Message:

chardev_open, chardev_close.

File:
1 edited

Legend:

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

    refb9fd08 r15c5418  
    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;
    209205       
    210206        while (true) {
    211                 if (!parent_exch)
    212                         parent_exch = async_exchange_begin(kbd->parent_sess);
    213 
    214207                uint8_t code = 0;
    215                 ssize_t size = chardev_read(parent_exch, &code, 1);
     208                ssize_t size = chardev_read(kbd->chardev, &code, 1);
    216209                if (size != 1)
    217210                        return EIO;
     
    224217                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    225218                       
    226                         size = chardev_read(parent_exch, &code, 1);
     219                        size = chardev_read(kbd->chardev, &code, 1);
    227220                        if (size != 1)
    228221                                return EIO;
    229222                } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    230                         size = chardev_read(parent_exch, &code, 1);
     223                        size = chardev_read(kbd->chardev, &code, 1);
    231224                        if (size != 1)
    232225                                return EIO;
     
    234227                                continue;
    235228
    236                         size = chardev_read(parent_exch, &code, 1);
     229                        size = chardev_read(kbd->chardev, &code, 1);
    237230                        if (size != 1)
    238231                                return EIO;
     
    240233                                continue;
    241234
    242                         size = chardev_read(parent_exch, &code, 1);
     235                        size = chardev_read(kbd->chardev, &code, 1);
    243236                        if (size != 1)
    244237                                return EIO;
     
    246239                                continue;
    247240
    248                         size = chardev_read(parent_exch, &code, 1);
     241                        size = chardev_read(kbd->chardev, &code, 1);
    249242                        if (size != 1)
    250243                                return EIO;
     
    252245                                continue;
    253246
    254                         size = chardev_read(parent_exch, &code, 1);
     247                        size = chardev_read(kbd->chardev, &code, 1);
    255248                        if (size != 1)
    256249                                return EIO;
     
    258251                                continue;
    259252
    260                         size = chardev_read(parent_exch, &code, 1);
     253                        size = chardev_read(kbd->chardev, &code, 1);
    261254                        if (size != 1)
    262255                                return EIO;
     
    264257                                continue;
    265258
    266                         size = chardev_read(parent_exch, &code, 1);
     259                        size = chardev_read(kbd->chardev, &code, 1);
    267260                        if (size != 1)
    268261                                return EIO;
     
    279272                if (code == KBD_SCANCODE_KEY_RELEASE) {
    280273                        type = KEY_RELEASE;
    281                         size = chardev_read(parent_exch, &code, 1);
     274                        size = chardev_read(kbd->chardev, &code, 1);
    282275                        if (size != 1)
    283276                                return EIO;
     
    362355int at_kbd_init(at_kbd_t *kbd, ddf_dev_t *dev)
    363356{
     357        async_sess_t *parent_sess;
     358        int rc;
     359       
    364360        assert(kbd);
    365361        assert(dev);
    366362       
    367363        kbd->client_sess = NULL;
    368         kbd->parent_sess = ddf_dev_parent_sess_get(dev);
    369        
    370         if (!kbd->parent_sess) {
     364        parent_sess = ddf_dev_parent_sess_get(dev);
     365        if (parent_sess == NULL) {
    371366                ddf_msg(LVL_ERROR, "Failed creating parent session.");
     367                rc = EIO;
     368                goto error;
     369        }
     370       
     371        rc = chardev_open(parent_sess, &kbd->chardev);
     372        if (rc != EOK) {
     373                ddf_msg(LVL_ERROR, "Failed opening character device.");
    372374                return EIO;
    373375        }
     
    407409        fibril_add_ready(kbd->polling_fibril);
    408410        return EOK;
     411error:
     412        chardev_close(kbd->chardev);
     413        kbd->chardev = NULL;
     414        return rc;
    409415}
Note: See TracChangeset for help on using the changeset viewer.