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


Ignore:
Timestamp:
2017-11-18T20:06:15Z (8 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.

Location:
uspace/drv/hid/atkbd
Files:
2 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}
  • uspace/drv/hid/atkbd/atkbd.h

    refb9fd08 r15c5418  
    11/*
    22 * Copyright (c) 2011 Jan Vesely
     3 * Copyright (c) 2017 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    3435 */
    3536
    36 #ifndef _AT_KBD_H_
    37 #define _AT_KBD_H_
     37#ifndef AT_KBD_H_
     38#define AT_KBD_H_
    3839
    3940#include <ddf/driver.h>
    4041#include <fibril.h>
     42#include <io/chardev.h>
    4143
    4244/** PC/AT keyboard driver structure. */
    4345typedef struct {
    44         ddf_fun_t *kbd_fun;        /**< Keyboard function. */
    45         async_sess_t *parent_sess; /**< Connection to device providing data. */
    46         async_sess_t *client_sess; /**< Callback connection to client. */
    47         fid_t polling_fibril;      /**< Fibril retrieving an parsing data. */
     46        /** Keyboard function */
     47        ddf_fun_t *kbd_fun;
     48        /** Device providing keyboard connection */
     49        chardev_t *chardev;
     50        /** Callback connection to client */
     51        async_sess_t *client_sess;
     52        /** Fibril retrieving and parsing data */
     53        fid_t polling_fibril;
    4854} at_kbd_t;
    4955
Note: See TracChangeset for help on using the changeset viewer.