Ignore:
File:
1 edited

Legend:

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

    rcc574511 rc0699467  
    3838
    3939#include <adt/list.h>
    40 #include <bool.h>
    4140#include <ipc/services.h>
    4241#include <ipc/input.h>
     
    5453#include <io/console.h>
    5554#include <io/keycode.h>
    56 #include <loc.h>
     55#include <devmap.h>
    5756#include <input.h>
    5857#include <kbd.h>
     
    6463
    6564// FIXME: remove this header
    66 #include <kernel/ipc/ipc_methods.h>
     65#include <abi/ipc/methods.h>
    6766
    6867/* In microseconds */
     
    276275        kdev->port_ops = port;
    277276        kdev->ctl_ops = ctl;
    278         kdev->service_id = 0;
     277        kdev->dev_path = NULL;
    279278       
    280279        /* Initialize port driver. */
     
    304303        mdev->port_ops = port;
    305304        mdev->proto_ops = proto;
    306         mdev->service_id = 0;
     305        mdev->dev_path = NULL;
    307306       
    308307        /* Initialize port driver. */
     
    325324/** Add new kbdev device.
    326325 *
    327  * @param service_id    Service ID of the keyboard device
     326 * @param dev_path Filesystem path to the device (/dev/class/...)
    328327 *
    329328 */
    330 static int kbd_add_kbdev(service_id_t service_id)
     329static int kbd_add_kbdev(const char *dev_path)
    331330{
    332331        kbd_dev_t *kdev = kbd_dev_new();
     
    334333                return -1;
    335334       
    336         kdev->service_id = service_id;
     335        kdev->dev_path = dev_path;
    337336        kdev->port_ops = NULL;
    338337        kdev->ctl_ops = &kbdev_ctl;
     
    353352/** Add new mousedev device.
    354353 *
    355  * @param service_id    Service ID of the mouse device
     354 * @param dev_path Filesystem path to the device (/dev/class/...)
    356355 *
    357356 */
    358 static int mouse_add_mousedev(service_id_t service_id)
     357static int mouse_add_mousedev(const char *dev_path)
    359358{
    360359        mouse_dev_t *mdev = mouse_dev_new();
     
    362361                return -1;
    363362       
    364         mdev->service_id = service_id;
     363        mdev->dev_path = dev_path;
    365364        mdev->port_ops = NULL;
    366365        mdev->proto_ops = &mousedev_proto;
     
    483482/** Periodically check for new input devices.
    484483 *
    485  * Looks under /loc/class/keyboard and /loc/class/mouse.
     484 * Looks under /dev/class/keyboard and /dev/class/mouse.
    486485 *
    487486 * @param arg Ignored
    488487 *
    489488 */
    490 #include <sys/typefmt.h>
    491489static int dev_discovery_fibril(void *arg)
    492490{
    493         category_id_t keyboard_cat, mouse_cat;
    494         service_id_t *svcs;
    495         size_t count, i;
    496         bool already_known;
    497         const char *dev_name = "todo";
     491        char *dev_path;
     492        size_t kbd_id = 1;
     493        size_t mouse_id = 1;
    498494        int rc;
    499        
    500         rc = loc_category_get_id("keyboard", &keyboard_cat, IPC_FLAG_BLOCKING);
    501         if (rc != EOK) {
    502                 printf("%s: Failed resolving category 'keyboard'.\n", NAME);
    503                 return ENOENT;
    504         }
    505        
    506         rc = loc_category_get_id("mouse", &mouse_cat, IPC_FLAG_BLOCKING);
    507         if (rc != EOK) {
    508                 printf("%s: Failed resolving category 'mouse'.\n", NAME);
    509                 return ENOENT;
    510         }
    511495       
    512496        while (true) {
     
    514498               
    515499                /*
    516                  * Check for new keyboard devices
     500                 * Check for new keyboard device
    517501                 */
    518                 rc = loc_category_get_svcs(keyboard_cat, &svcs, &count);
    519                 if (rc != EOK) {
    520                         printf("%s: Failed getting list of keyboard devices.\n",
    521                             NAME);
     502                rc = asprintf(&dev_path, "/dev/class/keyboard\\%zu", kbd_id);
     503                if (rc < 0)
    522504                        continue;
     505               
     506                if (kbd_add_kbdev(dev_path) == EOK) {
     507                        printf("%s: Connected keyboard device '%s'\n",
     508                            NAME, dev_path);
     509                       
     510                        /* XXX Handle device removal */
     511                        ++kbd_id;
    523512                }
    524 
    525                 for (i = 0; i < count; i++) {
    526                         already_known = false;
     513               
     514                free(dev_path);
     515               
     516                /*
     517                 * Check for new mouse device
     518                 */
     519                rc = asprintf(&dev_path, "/dev/class/mouse\\%zu", mouse_id);
     520                if (rc < 0)
     521                        continue;
     522               
     523                if (mouse_add_mousedev(dev_path) == EOK) {
     524                        printf("%s: Connected mouse device '%s'\n",
     525                            NAME, dev_path);
    527526                       
    528                         /* Determine whether we already know this device. */
    529                         list_foreach(kbd_devs, kdev_link) {
    530                                 kbd_dev_t *kdev = list_get_instance(kdev_link,
    531                                     kbd_dev_t, kbd_devs);
    532                                 if (kdev->service_id == svcs[i]) {
    533                                         already_known = true;
    534                                         break;
    535                                 }
    536                         }
    537 
    538                         if (!already_known) {
    539                                 if (kbd_add_kbdev(svcs[i]) == EOK) {
    540                                         printf("%s: Connected keyboard device '%s'\n",
    541                                             NAME, dev_name);
    542                                 }
    543                         }
     527                        /* XXX Handle device removal */
     528                        ++mouse_id;
    544529                }
    545530               
    546                 /* XXX Handle device removal */
    547                
    548                 /*
    549                  * Check for new mouse devices
    550                  */
    551                 rc = loc_category_get_svcs(mouse_cat, &svcs, &count);
    552                 if (rc != EOK) {
    553                         printf("%s: Failed getting list of mouse devices.\n",
    554                             NAME);
    555                         continue;
    556                 }
    557 
    558                 for (i = 0; i < count; i++) {
    559                         already_known = false;
    560                        
    561                         /* Determine whether we already know this device. */
    562                         list_foreach(mouse_devs, mdev_link) {
    563                                 mouse_dev_t *mdev = list_get_instance(mdev_link,
    564                                     mouse_dev_t, mouse_devs);
    565                                 if (mdev->service_id == svcs[i]) {
    566                                         already_known = true;
    567                                         break;
    568                                 }
    569                         }
    570 
    571                         if (!already_known) {
    572                                 if (mouse_add_mousedev(svcs[i]) == EOK) {
    573                                         printf("%s: Connected mouse device '%s'\n",
    574                                             NAME, dev_name);
    575                                 }
    576                         }
    577                 }
    578                
    579                 /* XXX Handle device removal */
     531                free(dev_path);
    580532        }
    581533       
     
    615567        /* Add legacy keyboard devices. */
    616568        kbd_add_legacy_devs();
    617 
     569       
    618570        /* Add legacy mouse devices. */
    619571        mouse_add_legacy_devs();
    620572       
    621573        /* Register driver */
    622         int rc = loc_server_register(NAME, client_connection);
     574        int rc = devmap_driver_register(NAME, client_connection);
    623575        if (rc < 0) {
    624                 printf("%s: Unable to register server (%d)\n", NAME, rc);
     576                printf("%s: Unable to register driver (%d)\n", NAME, rc);
    625577                return -1;
    626578        }
    627579       
    628         char kbd[LOC_NAME_MAXLEN + 1];
    629         snprintf(kbd, LOC_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME);
    630        
    631         service_id_t service_id;
    632         if (loc_service_register(kbd, &service_id) != EOK) {
    633                 printf("%s: Unable to register service %s\n", NAME, kbd);
     580        char kbd[DEVMAP_NAME_MAXLEN + 1];
     581        snprintf(kbd, DEVMAP_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME);
     582       
     583        devmap_handle_t devmap_handle;
     584        if (devmap_device_register(kbd, &devmap_handle) != EOK) {
     585                printf("%s: Unable to register device %s\n", NAME, kbd);
    634586                return -1;
    635587        }
Note: See TracChangeset for help on using the changeset viewer.