Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/input/ctl/kbdev.c

    rcc574511 r1875a0c  
    4848#include <kbd_ctl.h>
    4949#include <kbd_port.h>
    50 #include <loc.h>
    5150#include <stdlib.h>
    52 #include <sys/typefmt.h>
    5351#include <vfs/vfs_sess.h>
    5452
     
    7270        /** Session with kbdev device */
    7371        async_sess_t *sess;
     72
     73        /** File descriptor of open kbdev device */
     74        int fd;
    7475} kbdev_t;
    7576
     
    8384
    8485        kbdev->kbd_dev = kdev;
     86        kbdev->fd = -1;
    8587
    8688        return kbdev;
     
    9193        if (kbdev->sess != NULL)
    9294                async_hangup(kbdev->sess);
     95        if (kbdev->fd >= 0)
     96                close(kbdev->fd);
    9397        free(kbdev);
    9498}
     
    96100static int kbdev_ctl_init(kbd_dev_t *kdev)
    97101{
     102        const char *pathname;
    98103        async_sess_t *sess;
    99104        async_exch_t *exch;
    100105        kbdev_t *kbdev;
    101         char *svc_name;
     106        int fd;
    102107        int rc;
    103108
    104         if (asprintf(&svc_name, "devname%" PRIun, kdev->service_id) > 0)
    105                 svc_name = (char *) "unknown";
    106 
    107         sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->service_id, 0);
     109        pathname = kdev->dev_path;
     110
     111        fd = open(pathname, O_RDWR);
     112        if (fd < 0) {
     113                return -1;
     114        }
     115
     116        sess = fd_session(EXCHANGE_SERIALIZE, fd);
    108117        if (sess == NULL) {
    109                 printf("%s: Failed starting session with '%s.'\n", NAME,
    110                     svc_name);
     118                printf("%s: Failed starting session with '%s'\n", NAME, pathname);
     119                close(fd);
    111120                return -1;
    112121        }
     
    115124        if (kbdev == NULL) {
    116125                printf("%s: Failed allocating device structure for '%s'.\n",
    117                     NAME, svc_name);
    118                 return -1;
    119         }
    120 
     126                    NAME, pathname);
     127                return -1;
     128        }
     129
     130        kbdev->fd = fd;
    121131        kbdev->sess = sess;
    122132
    123133        exch = async_exchange_begin(sess);
    124134        if (exch == NULL) {
    125                 printf("%s: Failed starting exchange with '%s'.\n", NAME,
    126                     svc_name);
     135                printf("%s: Failed starting exchange with '%s'.\n", NAME, pathname);
    127136                kbdev_destroy(kbdev);
    128137                return -1;
     
    132141        if (rc != EOK) {
    133142                printf("%s: Failed creating callback connection from '%s'.\n",
    134                     NAME, svc_name);
     143                    NAME, pathname);
    135144                async_exchange_end(exch);
    136145                kbdev_destroy(kbdev);
Note: See TracChangeset for help on using the changeset viewer.