Ignore:
File:
1 edited

Legend:

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

    rcce8a83 r854eddd6  
    4848#include <kbd_ctl.h>
    4949#include <kbd_port.h>
    50 #include <loc.h>
    5150#include <stdlib.h>
    5251#include <vfs/vfs_sess.h>
    53 #include <sys/typefmt.h>
     52
    5453
    5554static int kbdev_ctl_init(kbd_dev_t *);
    56 static void kbdev_ctl_set_ind(kbd_dev_t *, unsigned int);
     55static void kbdev_ctl_set_ind(kbd_dev_t *, unsigned);
    5756
    5857static void kbdev_callback_conn(ipc_callid_t, ipc_call_t *, void *arg);
    5958
    6059kbd_ctl_ops_t kbdev_ctl = {
    61         .parse = NULL,
     60        .parse_scancode = NULL,
    6261        .init = kbdev_ctl_init,
    6362        .set_ind = kbdev_ctl_set_ind
     
    7170        /** Session with kbdev device */
    7271        async_sess_t *sess;
     72
     73        /** File descriptor of open kbdev device */
     74        int fd;
    7375} kbdev_t;
    7476
     
    8284
    8385        kbdev->kbd_dev = kdev;
     86        kbdev->fd = -1;
    8487
    8588        return kbdev;
     
    9093        if (kbdev->sess != NULL)
    9194                async_hangup(kbdev->sess);
     95        if (kbdev->fd >= 0)
     96                close(kbdev->fd);
    9297        free(kbdev);
    9398}
     
    95100static int kbdev_ctl_init(kbd_dev_t *kdev)
    96101{
     102        const char *pathname;
    97103        async_sess_t *sess;
    98104        async_exch_t *exch;
    99105        kbdev_t *kbdev;
     106        int fd;
    100107        int rc;
    101108
    102         sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->svc_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);
    103117        if (sess == NULL) {
    104                 printf("%s: Failed starting session with '%s.'\n", NAME,
    105                     kdev->svc_name);
     118                printf(NAME ": Failed starting session with '%s'\n", pathname);
     119                close(fd);
    106120                return -1;
    107121        }
     
    109123        kbdev = kbdev_new(kdev);
    110124        if (kbdev == NULL) {
    111                 printf("%s: Failed allocating device structure for '%s'.\n",
    112                     NAME, kdev->svc_name);
    113                 return -1;
    114         }
    115 
     125                printf(NAME ": Failed allocating device structure for '%s'.\n",
     126                    pathname);
     127                return -1;
     128        }
     129
     130        kbdev->fd = fd;
    116131        kbdev->sess = sess;
    117132
    118133        exch = async_exchange_begin(sess);
    119134        if (exch == NULL) {
    120                 printf("%s: Failed starting exchange with '%s'.\n", NAME,
    121                     kdev->svc_name);
     135                printf(NAME ": Failed starting exchange with '%s'.\n", pathname);
    122136                kbdev_destroy(kbdev);
    123137                return -1;
     
    126140        rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev);
    127141        if (rc != EOK) {
    128                 printf("%s: Failed creating callback connection from '%s'.\n",
    129                     NAME, kdev->svc_name);
     142                printf(NAME ": Failed creating callback connection from '%s'.\n",
     143                    pathname);
    130144                async_exchange_end(exch);
    131145                kbdev_destroy(kbdev);
     
    179193                        type = IPC_GET_ARG1(call);
    180194                        key = IPC_GET_ARG2(call);
    181                         kbd_push_event(kbdev->kbd_dev, type, key);
     195                        kbd_push_ev(kbdev->kbd_dev, type, key);
    182196                        break;
    183197                default:
Note: See TracChangeset for help on using the changeset viewer.