Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/input/generic/input.c

    rb72efe8 r5da7199  
    3838
    3939#include <adt/list.h>
     40#include <bool.h>
    4041#include <ipc/services.h>
    4142#include <ipc/input.h>
     
    4647#include <stdio.h>
    4748#include <ns.h>
    48 #include <ns_obsolete.h>
    4949#include <async.h>
    50 #include <async_obsolete.h>
    5150#include <errno.h>
    5251#include <adt/fifo.h>
    5352#include <io/console.h>
    5453#include <io/keycode.h>
    55 #include <devmap.h>
     54#include <loc.h>
    5655#include <input.h>
    5756#include <kbd.h>
    5857#include <kbd_port.h>
    5958#include <kbd_ctl.h>
     59#include <mouse_proto.h>
    6060#include <layout.h>
    6161#include <mouse.h>
    6262
    63 // FIXME: remove this header
    64 #include <kernel/ipc/ipc_methods.h>
    65 
    66 /* In microseconds */
    67 #define DISCOVERY_POLL_INTERVAL         (10*1000*1000)
    68 
    69 static void kbd_devs_yield(void);
    70 static void kbd_devs_reclaim(void);
    71 
    72 static void input_event_key(int, unsigned int, unsigned, wchar_t);
    73 
    74 int client_phone = -1;
    75 
    76 /** List of keyboard devices */
    77 static list_t kbd_devs;
    78 
    79 /** List of mouse devices */
    80 list_t mouse_devs;
    81 
    82 bool irc_service = false;
    83 int irc_phone = -1;
    84 
    85 #define NUM_LAYOUTS 3
     63#define NUM_LAYOUTS  3
    8664
    8765static layout_ops_t *layout[NUM_LAYOUTS] = {
     
    9169};
    9270
    93 void kbd_push_scancode(kbd_dev_t *kdev, int scancode)
    94 {
    95 /*      printf("scancode: 0x%x\n", scancode);*/
    96         (*kdev->ctl_ops->parse_scancode)(scancode);
    97 }
    98 
    99 void kbd_push_ev(kbd_dev_t *kdev, int type, unsigned int key)
     71static void kbd_devs_yield(void);
     72static void kbd_devs_reclaim(void);
     73
     74async_sess_t *client_sess = NULL;
     75
     76/** List of keyboard devices */
     77static list_t kbd_devs;
     78
     79/** List of mouse devices */
     80static list_t mouse_devs;
     81
     82bool irc_service = false;
     83async_sess_t *irc_sess = NULL;
     84
     85void kbd_push_data(kbd_dev_t *kdev, sysarg_t data)
     86{
     87        (*kdev->ctl_ops->parse)(data);
     88}
     89
     90void mouse_push_data(mouse_dev_t *mdev, sysarg_t data)
     91{
     92        (*mdev->proto_ops->parse)(data);
     93}
     94
     95void kbd_push_event(kbd_dev_t *kdev, int type, unsigned int key)
    10096{
    10197        kbd_event_t ev;
    102         unsigned mod_mask;
    103 
     98        unsigned int mod_mask;
     99       
    104100        switch (key) {
    105101        case KC_LCTRL: mod_mask = KM_LCTRL; break;
     
    111107        default: mod_mask = 0; break;
    112108        }
    113 
     109       
    114110        if (mod_mask != 0) {
    115111                if (type == KEY_PRESS)
     
    118114                        kdev->mods = kdev->mods & ~mod_mask;
    119115        }
    120 
     116       
    121117        switch (key) {
    122118        case KC_CAPS_LOCK: mod_mask = KM_CAPS_LOCK; break;
     
    125121        default: mod_mask = 0; break;
    126122        }
    127 
     123       
    128124        if (mod_mask != 0) {
    129125                if (type == KEY_PRESS) {
     
    135131                        kdev->mods = kdev->mods ^ (mod_mask & ~kdev->lock_keys);
    136132                        kdev->lock_keys = kdev->lock_keys | mod_mask;
    137 
     133                       
    138134                        /* Update keyboard lock indicator lights. */
    139135                        (*kdev->ctl_ops->set_ind)(kdev, kdev->mods);
     
    142138                }
    143139        }
    144 /*
    145         printf("type: %d\n", type);
    146         printf("mods: 0x%x\n", mods);
    147         printf("keycode: %u\n", key);
    148 */
     140       
    149141        if (type == KEY_PRESS && (kdev->mods & KM_LCTRL) &&
    150                 key == KC_F1) {
     142            key == KC_F1) {
    151143                layout_destroy(kdev->active_layout);
    152144                kdev->active_layout = layout_create(layout[0]);
    153145                return;
    154146        }
    155 
     147       
    156148        if (type == KEY_PRESS && (kdev->mods & KM_LCTRL) &&
    157                 key == KC_F2) {
     149            key == KC_F2) {
    158150                layout_destroy(kdev->active_layout);
    159151                kdev->active_layout = layout_create(layout[1]);
    160152                return;
    161153        }
    162 
     154       
    163155        if (type == KEY_PRESS && (kdev->mods & KM_LCTRL) &&
    164                 key == KC_F3) {
     156            key == KC_F3) {
    165157                layout_destroy(kdev->active_layout);
    166158                kdev->active_layout = layout_create(layout[2]);
    167159                return;
    168160        }
    169 
     161       
    170162        ev.type = type;
    171163        ev.key = key;
    172164        ev.mods = kdev->mods;
    173 
     165       
    174166        ev.c = layout_parse_ev(kdev->active_layout, &ev);
    175         input_event_key(ev.type, ev.key, ev.mods, ev.c);
    176 }
    177 
    178 /** Key has been pressed or released. */
    179 static void input_event_key(int type, unsigned int key, unsigned mods,
    180     wchar_t c)
    181 {
    182         async_obsolete_msg_4(client_phone, INPUT_EVENT_KEY, type, key,
    183             mods, c);
     167       
     168        async_exch_t *exch = async_exchange_begin(client_sess);
     169        async_msg_4(exch, INPUT_EVENT_KEY, ev.type, ev.key, ev.mods, ev.c);
     170        async_exchange_end(exch);
    184171}
    185172
    186173/** Mouse pointer has moved. */
    187 void input_event_move(int dx, int dy)
    188 {
    189         async_obsolete_msg_2(client_phone, INPUT_EVENT_MOVE, dx, dy);
     174void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy)
     175{
     176        async_exch_t *exch = async_exchange_begin(client_sess);
     177        async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy);
     178        async_exchange_end(exch);
    190179}
    191180
    192181/** Mouse button has been pressed. */
    193 void input_event_button(int bnum, int press)
    194 {
    195         async_obsolete_msg_2(client_phone, INPUT_EVENT_BUTTON, bnum, press);
     182void mouse_push_event_button(mouse_dev_t *mdev, int bnum, int press)
     183{
     184        async_exch_t *exch = async_exchange_begin(client_sess);
     185        async_msg_2(exch, INPUT_EVENT_BUTTON, bnum, press);
     186        async_exchange_end(exch);
    196187}
    197188
    198189static void client_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    199190{
    200         ipc_callid_t callid;
    201         ipc_call_t call;
    202         int retval;
    203 
    204191        async_answer_0(iid, EOK);
    205 
     192       
    206193        while (true) {
    207                 callid = async_get_call(&call);
     194                ipc_call_t call;
     195                ipc_callid_t callid = async_get_call(&call);
    208196               
    209197                if (!IPC_GET_IMETHOD(call)) {
    210                         if (client_phone != -1) {
    211                                 async_obsolete_hangup(client_phone);
    212                                 client_phone = -1;
     198                        if (client_sess != NULL) {
     199                                async_hangup(client_sess);
     200                                client_sess = NULL;
    213201                        }
    214202                       
     
    217205                }
    218206               
    219                 switch (IPC_GET_IMETHOD(call)) {
    220                 case IPC_M_CONNECT_TO_ME:
    221                         if (client_phone != -1) {
    222                                 retval = ELIMIT;
     207                async_sess_t *sess =
     208                    async_callback_receive_start(EXCHANGE_SERIALIZE, &call);
     209                if (sess != NULL) {
     210                        if (client_sess == NULL) {
     211                                client_sess = sess;
     212                                async_answer_0(callid, EOK);
     213                        } else
     214                                async_answer_0(callid, ELIMIT);
     215                } else {
     216                        switch (IPC_GET_IMETHOD(call)) {
     217                        case INPUT_YIELD:
     218                                kbd_devs_yield();
     219                                async_answer_0(callid, EOK);
    223220                                break;
     221                        case INPUT_RECLAIM:
     222                                kbd_devs_reclaim();
     223                                async_answer_0(callid, EOK);
     224                                break;
     225                        default:
     226                                async_answer_0(callid, EINVAL);
    224227                        }
    225                         client_phone = IPC_GET_ARG5(call);
    226                         retval = 0;
    227                         break;
    228                 case INPUT_YIELD:
    229                         kbd_devs_yield();
    230                         retval = 0;
    231                         break;
    232                 case INPUT_RECLAIM:
    233                         kbd_devs_reclaim();
    234                         retval = 0;
    235                         break;
    236                 default:
    237                         retval = EINVAL;
    238228                }
    239                 async_answer_0(callid, retval);
    240         }       
     229        }
    241230}
    242231
    243232static kbd_dev_t *kbd_dev_new(void)
    244233{
    245         kbd_dev_t *kdev;
    246 
    247         kdev = calloc(1, sizeof(kbd_dev_t));
     234        kbd_dev_t *kdev = calloc(1, sizeof(kbd_dev_t));
    248235        if (kdev == NULL) {
    249                 printf(NAME ": Error allocating keyboard device. "
    250                     "Out of memory.\n");
     236                printf("%s: Error allocating keyboard device. "
     237                    "Out of memory.\n", NAME);
    251238                return NULL;
    252239        }
    253 
     240       
    254241        link_initialize(&kdev->kbd_devs);
    255 
     242       
    256243        kdev->mods = KM_NUM_LOCK;
    257244        kdev->lock_keys = 0;
    258245        kdev->active_layout = layout_create(layout[0]);
    259 
     246       
    260247        return kdev;
     248}
     249
     250static mouse_dev_t *mouse_dev_new(void)
     251{
     252        mouse_dev_t *mdev = calloc(1, sizeof(mouse_dev_t));
     253        if (mdev == NULL) {
     254                printf("%s: Error allocating keyboard device. "
     255                    "Out of memory.\n", NAME);
     256                return NULL;
     257        }
     258       
     259        link_initialize(&mdev->mouse_devs);
     260       
     261        return mdev;
    261262}
    262263
     
    264265static void kbd_add_dev(kbd_port_ops_t *port, kbd_ctl_ops_t *ctl)
    265266{
    266         kbd_dev_t *kdev;
    267 
    268         kdev = kbd_dev_new();
     267        kbd_dev_t *kdev = kbd_dev_new();
    269268        if (kdev == NULL)
    270269                return;
    271 
     270       
    272271        kdev->port_ops = port;
    273272        kdev->ctl_ops = ctl;
    274         kdev->dev_path = NULL;
    275 
     273        kdev->svc_id = 0;
     274       
    276275        /* Initialize port driver. */
    277276        if ((*kdev->port_ops->init)(kdev) != 0)
    278277                goto fail;
    279 
     278       
    280279        /* Initialize controller driver. */
    281280        if ((*kdev->ctl_ops->init)(kdev) != 0) {
     
    283282                goto fail;
    284283        }
    285 
     284       
    286285        list_append(&kdev->kbd_devs, &kbd_devs);
    287286        return;
     287       
    288288fail:
    289289        free(kdev);
    290290}
    291291
     292/** Add new legacy mouse device. */
     293static void mouse_add_dev(mouse_port_ops_t *port, mouse_proto_ops_t *proto)
     294{
     295        mouse_dev_t *mdev = mouse_dev_new();
     296        if (mdev == NULL)
     297                return;
     298       
     299        mdev->port_ops = port;
     300        mdev->proto_ops = proto;
     301        mdev->svc_id = 0;
     302       
     303        /* Initialize port driver. */
     304        if ((*mdev->port_ops->init)(mdev) != 0)
     305                goto fail;
     306       
     307        /* Initialize protocol driver. */
     308        if ((*mdev->proto_ops->init)(mdev) != 0) {
     309                /* XXX Uninit port */
     310                goto fail;
     311        }
     312       
     313        list_append(&mdev->mouse_devs, &mouse_devs);
     314        return;
     315       
     316fail:
     317        free(mdev);
     318}
     319
    292320/** Add new kbdev device.
    293321 *
    294  * @param dev_path      Filesystem path to the device (/dev/class/...)
     322 * @param service_id    Service ID of the keyboard device
     323 *
    295324 */
    296 static int kbd_add_kbdev(const char *dev_path)
    297 {
    298         kbd_dev_t *kdev;
    299 
    300         kdev = kbd_dev_new();
     325static int kbd_add_kbdev(service_id_t service_id, kbd_dev_t **kdevp)
     326{
     327        kbd_dev_t *kdev = kbd_dev_new();
    301328        if (kdev == NULL)
    302329                return -1;
    303 
    304         kdev->dev_path = dev_path;
     330       
     331        kdev->svc_id = service_id;
    305332        kdev->port_ops = NULL;
    306333        kdev->ctl_ops = &kbdev_ctl;
    307 
     334       
     335        int rc = loc_service_get_name(service_id, &kdev->svc_name);
     336        if (rc != EOK) {
     337                kdev->svc_name = NULL;
     338                goto fail;
     339        }
     340       
    308341        /* Initialize controller driver. */
    309342        if ((*kdev->ctl_ops->init)(kdev) != 0) {
    310343                goto fail;
    311344        }
    312 
     345       
    313346        list_append(&kdev->kbd_devs, &kbd_devs);
     347        *kdevp = kdev;
    314348        return EOK;
     349       
    315350fail:
     351        if (kdev->svc_name != NULL)
     352                free(kdev->svc_name);
    316353        free(kdev);
     354        return -1;
     355}
     356
     357/** Add new mousedev device.
     358 *
     359 * @param service_id    Service ID of the mouse device
     360 *
     361 */
     362static int mouse_add_mousedev(service_id_t service_id, mouse_dev_t **mdevp)
     363{
     364        mouse_dev_t *mdev = mouse_dev_new();
     365        if (mdev == NULL)
     366                return -1;
     367       
     368        mdev->svc_id = service_id;
     369        mdev->port_ops = NULL;
     370        mdev->proto_ops = &mousedev_proto;
     371       
     372        int rc = loc_service_get_name(service_id, &mdev->svc_name);
     373        if (rc != EOK) {
     374                mdev->svc_name = NULL;
     375                goto fail;
     376        }
     377       
     378        /* Initialize controller driver. */
     379        if ((*mdev->proto_ops->init)(mdev) != 0) {
     380                goto fail;
     381        }
     382       
     383        list_append(&mdev->mouse_devs, &mouse_devs);
     384        *mdevp = mdev;
     385        return EOK;
     386       
     387fail:
     388        free(mdev);
    317389        return -1;
    318390}
     
    350422#endif
    351423#if defined(MACHINE_msim)
    352         kbd_add_dev(&msim_port, &pc_ctl);
     424        kbd_add_dev(&msim_port, &stty_ctl);
    353425#endif
    354426#if (defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul)) && defined(CONFIG_FB)
     
    364436        kbd_add_dev(&niagara_port, &stty_ctl);
    365437#endif
    366 #if defined(UARCH_sparc64) && defined(MACHINE_serengeti)
    367         kbd_add_dev(&sgcn_port, &stty_ctl);
    368 #endif
    369438#if defined(UARCH_sparc64) && defined(MACHINE_generic)
    370         kbd_add_dev(&z8530_port, &sun_ctl);
    371439        kbd_add_dev(&ns16550_port, &sun_ctl);
    372440#endif
    373441        /* Silence warning on abs32le about kbd_add_dev() being unused */
    374442        (void) kbd_add_dev;
     443}
     444
     445/** Add legacy drivers/devices. */
     446static void mouse_add_legacy_devs(void)
     447{
     448        /*
     449         * Need to add these drivers based on config unless we can probe
     450         * them automatically.
     451         */
     452#if defined(UARCH_amd64)
     453        mouse_add_dev(&chardev_mouse_port, &ps2_proto);
     454#endif
     455#if defined(UARCH_ia32)
     456        mouse_add_dev(&chardev_mouse_port, &ps2_proto);
     457#endif
     458#if defined(MACHINE_i460GX)
     459        mouse_add_dev(&chardev_mouse_port, &ps2_proto);
     460#endif
     461#if defined(UARCH_ppc32)
     462        mouse_add_dev(&adb_mouse_port, &adb_proto);
     463#endif
     464        /* Silence warning on abs32le about mouse_add_dev() being unused */
     465        (void) mouse_add_dev;
    375466}
    376467
     
    381472                kbd_dev_t *kdev = list_get_instance(kdev_link, kbd_dev_t,
    382473                    kbd_devs);
    383 
     474               
    384475                /* Yield port */
    385476                if (kdev->port_ops != NULL)
     
    394485                kbd_dev_t *kdev = list_get_instance(kdev_link, kbd_dev_t,
    395486                    kbd_devs);
    396 
     487               
    397488                /* Reclaim port */
    398489                if (kdev->port_ops != NULL)
     
    401492}
    402493
    403 /** Periodically check for new input devices.
    404  *
    405  * Looks under /dev/class/keyboard and /dev/class/mouse.
    406  *
    407  * @param arg   Ignored
    408  */
    409 static int dev_discovery_fibril(void *arg)
    410 {
    411         char *dev_path;
    412         size_t kbd_id = 1;
    413         size_t mouse_id = 1;
     494static int dev_check_new_kbdevs(void)
     495{
     496        category_id_t keyboard_cat;
     497        service_id_t *svcs;
     498        size_t count, i;
     499        bool already_known;
    414500        int rc;
    415 
    416         while (true) {
    417                 async_usleep(DISCOVERY_POLL_INTERVAL);
    418 
    419                 /*
    420                  * Check for new keyboard device
    421                  */
    422                 rc = asprintf(&dev_path, "/dev/class/keyboard\\%zu", kbd_id);
    423                 if (rc < 0)
    424                         continue;
    425 
    426                 if (kbd_add_kbdev(dev_path) == EOK) {
    427                         printf(NAME ": Connected keyboard device '%s'\n",
    428                             dev_path);
    429 
    430                         /* XXX Handle device removal */
    431                         ++kbd_id;
     501       
     502        rc = loc_category_get_id("keyboard", &keyboard_cat, IPC_FLAG_BLOCKING);
     503        if (rc != EOK) {
     504                printf("%s: Failed resolving category 'keyboard'.\n", NAME);
     505                return ENOENT;
     506        }
     507       
     508        /*
     509         * Check for new keyboard devices
     510         */
     511        rc = loc_category_get_svcs(keyboard_cat, &svcs, &count);
     512        if (rc != EOK) {
     513                printf("%s: Failed getting list of keyboard devices.\n",
     514                    NAME);
     515                return EIO;
     516        }
     517
     518        for (i = 0; i < count; i++) {
     519                already_known = false;
     520               
     521                /* Determine whether we already know this device. */
     522                list_foreach(kbd_devs, kdev_link) {
     523                        kbd_dev_t *kdev = list_get_instance(kdev_link,
     524                            kbd_dev_t, kbd_devs);
     525                        if (kdev->svc_id == svcs[i]) {
     526                                already_known = true;
     527                                break;
     528                        }
    432529                }
    433 
    434                 free(dev_path);
    435 
    436                 /*
    437                  * Check for new mouse device
    438                  */
    439                 rc = asprintf(&dev_path, "/dev/class/mouse\\%zu", mouse_id);
    440                 if (rc < 0)
    441                         continue;
    442 
    443                 if (mouse_add_dev(dev_path) == EOK) {
    444                         printf(NAME ": Connected mouse device '%s'\n",
    445                             dev_path);
    446 
    447                         /* XXX Handle device removal */
    448                         ++mouse_id;
     530               
     531                if (!already_known) {
     532                        kbd_dev_t *kdev;
     533                        if (kbd_add_kbdev(svcs[i], &kdev) == EOK) {
     534                                printf("%s: Connected keyboard device '%s'\n",
     535                                    NAME, kdev->svc_name);
     536                        }
    449537                }
    450 
    451                 free(dev_path);
    452         }
    453 
     538        }
     539       
     540        free(svcs);
     541       
     542        /* XXX Handle device removal */
     543       
    454544        return EOK;
    455545}
    456546
    457 /** Start a fibril for discovering new devices. */
    458 static void input_start_dev_discovery(void)
    459 {
    460         fid_t fid;
    461 
    462         fid = fibril_create(dev_discovery_fibril, NULL);
    463         if (!fid) {
    464                 printf(NAME ": Failed to create device discovery fibril.\n");
    465                 return;
    466         }
    467 
    468         fibril_add_ready(fid);
     547static int dev_check_new_mousedevs(void)
     548{
     549        category_id_t mouse_cat;
     550        service_id_t *svcs;
     551        size_t count, i;
     552        bool already_known;
     553        int rc;
     554       
     555        rc = loc_category_get_id("mouse", &mouse_cat, IPC_FLAG_BLOCKING);
     556        if (rc != EOK) {
     557                printf("%s: Failed resolving category 'mouse'.\n", NAME);
     558                return ENOENT;
     559        }
     560       
     561        /*
     562         * Check for new mouse devices
     563         */
     564        rc = loc_category_get_svcs(mouse_cat, &svcs, &count);
     565        if (rc != EOK) {
     566                printf("%s: Failed getting list of mouse devices.\n",
     567                    NAME);
     568                return EIO;
     569        }
     570       
     571        for (i = 0; i < count; i++) {
     572                already_known = false;
     573               
     574                /* Determine whether we already know this device. */
     575                list_foreach(mouse_devs, mdev_link) {
     576                        mouse_dev_t *mdev = list_get_instance(mdev_link,
     577                            mouse_dev_t, mouse_devs);
     578                        if (mdev->svc_id == svcs[i]) {
     579                                already_known = true;
     580                                break;
     581                        }
     582                }
     583               
     584                if (!already_known) {
     585                        mouse_dev_t *mdev;
     586                        if (mouse_add_mousedev(svcs[i], &mdev) == EOK) {
     587                                printf("%s: Connected mouse device '%s'\n",
     588                                    NAME, mdev->svc_name);
     589                        }
     590                }
     591        }
     592       
     593        free(svcs);
     594       
     595        /* XXX Handle device removal */
     596       
     597        return EOK;
     598}
     599
     600static int dev_check_new(void)
     601{
     602        int rc;
     603       
     604        rc = dev_check_new_kbdevs();
     605        if (rc != EOK)
     606                return rc;
     607       
     608        rc = dev_check_new_mousedevs();
     609        if (rc != EOK)
     610                return rc;
     611
     612        return EOK;
     613}
     614
     615static void cat_change_cb(void)
     616{
     617        dev_check_new();
     618}
     619
     620/** Start listening for new devices. */
     621static int input_start_dev_discovery(void)
     622{
     623        int rc;
     624
     625        rc = loc_register_cat_change_cb(cat_change_cb);
     626        if (rc != EOK) {
     627                printf("%s: Failed registering callback for device discovery. "
     628                    "(%d)\n", NAME, rc);
     629                return rc;
     630        }
     631
     632        return dev_check_new();
    469633}
    470634
     
    473637        printf("%s: HelenOS input service\n", NAME);
    474638       
    475         sysarg_t fhc;
    476639        sysarg_t obio;
    477640       
     
    479642        list_initialize(&mouse_devs);
    480643       
    481         if (((sysinfo_get_value("kbd.cir.fhc", &fhc) == EOK) && (fhc))
    482             || ((sysinfo_get_value("kbd.cir.obio", &obio) == EOK) && (obio)))
     644        if ((sysinfo_get_value("kbd.cir.obio", &obio) == EOK) && (obio))
    483645                irc_service = true;
    484646       
    485647        if (irc_service) {
    486                 while (irc_phone < 0)
    487                         irc_phone = service_obsolete_connect_blocking(SERVICE_IRC, 0, 0);
     648                while (irc_sess == NULL)
     649                        irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
     650                            SERVICE_IRC, 0, 0);
    488651        }
    489652       
    490653        /* Add legacy keyboard devices. */
    491654        kbd_add_legacy_devs();
    492 
    493         /* Add legacy (devmap-style) mouse device. */
    494         (void) mouse_add_dev("/dev/hid_in/mouse");
     655       
     656        /* Add legacy mouse devices. */
     657        mouse_add_legacy_devs();
    495658       
    496659        /* Register driver */
    497         int rc = devmap_driver_register(NAME, client_connection);
     660        int rc = loc_server_register(NAME, client_connection);
    498661        if (rc < 0) {
    499                 printf("%s: Unable to register driver (%d)\n", NAME, rc);
     662                printf("%s: Unable to register server (%d)\n", NAME, rc);
    500663                return -1;
    501664        }
    502665       
    503         char kbd[DEVMAP_NAME_MAXLEN + 1];
    504         snprintf(kbd, DEVMAP_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME);
    505        
    506         devmap_handle_t devmap_handle;
    507         if (devmap_device_register(kbd, &devmap_handle) != EOK) {
    508                 printf("%s: Unable to register device %s\n", NAME, kbd);
     666        char kbd[LOC_NAME_MAXLEN + 1];
     667        snprintf(kbd, LOC_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME);
     668       
     669        service_id_t service_id;
     670        if (loc_service_register(kbd, &service_id) != EOK) {
     671                printf("%s: Unable to register service %s\n", NAME, kbd);
    509672                return -1;
    510673        }
    511 
     674       
    512675        /* Start looking for new input devices */
    513676        input_start_dev_discovery();
    514 
    515         printf(NAME ": Accepting connections\n");
     677       
     678        printf("%s: Accepting connections\n", NAME);
    516679        async_manager();
    517 
     680       
    518681        /* Not reached. */
    519682        return 0;
Note: See TracChangeset for help on using the changeset viewer.