Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/input/port/chardev.c

    r854eddd6 r15f3c3f  
    3737#include <ipc/char.h>
    3838#include <async.h>
    39 #include <async_obsolete.h>
    4039#include <input.h>
    4140#include <kbd_port.h>
    4241#include <kbd.h>
    43 #include <devmap.h>
    44 #include <devmap_obsolete.h>
     42#include <loc.h>
    4543#include <errno.h>
    4644#include <stdio.h>
     
    6159
    6260static kbd_dev_t *kbd_dev;
    63 static int dev_phone;
     61static async_sess_t *dev_sess;
    6462
    6563/** List of devices to try connecting to. */
     
    7371static int chardev_port_init(kbd_dev_t *kdev)
    7472{
    75         devmap_handle_t handle;
     73        service_id_t service_id;
     74        async_exch_t *exch;
    7675        unsigned int i;
    7776        int rc;
     
    8079       
    8180        for (i = 0; i < num_devs; i++) {
    82                 rc = devmap_device_get_handle(in_devs[i], &handle, 0);
     81                rc = loc_service_get_id(in_devs[i], &service_id, 0);
    8382                if (rc == EOK)
    8483                        break;
     
    9089        }
    9190       
    92         dev_phone = devmap_obsolete_device_connect(handle, IPC_FLAG_BLOCKING);
    93         if (dev_phone < 0) {
     91        dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id,
     92            IPC_FLAG_BLOCKING);
     93        if (dev_sess == NULL) {
    9494                printf("%s: Failed connecting to device\n", NAME);
    9595                return ENOENT;
    9696        }
    9797       
     98        exch = async_exchange_begin(dev_sess);
     99        if (exch == NULL) {
     100                printf("%s: Failed starting exchange with device\n", NAME);
     101                async_hangup(dev_sess);
     102                return ENOMEM;
     103        }
     104       
    98105        /* NB: The callback connection is slotted for removal */
    99         if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events,
    100             NULL) != 0) {
    101                 printf(NAME ": Failed to create callback from device\n");
     106        rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL);
     107        async_exchange_end(exch);
     108       
     109        if (rc != 0) {
     110                printf("%s: Failed to create callback from device\n", NAME);
     111                async_hangup(dev_sess);
    102112                return -1;
    103113        }
    104 
     114       
    105115        return 0;
    106116}
     
    116126static void chardev_port_write(uint8_t data)
    117127{
    118         async_obsolete_msg_1(dev_phone, CHAR_WRITE_BYTE, data);
     128        async_exch_t *exch = async_exchange_begin(dev_sess);
     129        if (exch == NULL) {
     130                printf("%s: Failed starting exchange with device\n", NAME);
     131                return;
     132        }
     133
     134        async_msg_1(exch, CHAR_WRITE_BYTE, data);
     135        async_exchange_end(exch);
    119136}
    120137
     
    136153                switch (IPC_GET_IMETHOD(call)) {
    137154                case CHAR_NOTIF_BYTE:
    138                         kbd_push_scancode(kbd_dev, IPC_GET_ARG1(call));
     155                        kbd_push_data(kbd_dev, IPC_GET_ARG1(call));
    139156                        break;
    140157                default:
Note: See TracChangeset for help on using the changeset viewer.