Ignore:
File:
1 edited

Legend:

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

    rd5c1051 r7aa94304  
    3737 */
    3838
     39#include <adt/list.h>
     40#include <stdbool.h>
     41#include <fibril_synch.h>
     42#include <ipc/services.h>
     43#include <ipc/input.h>
     44#include <config.h>
     45#include <stdio.h>
     46#include <stdlib.h>
     47#include <ns.h>
     48#include <async.h>
     49#include <errno.h>
    3950#include <adt/fifo.h>
    40 #include <adt/list.h>
    41 #include <async.h>
    42 #include <config.h>
    43 #include <errno.h>
    44 #include <fibril.h>
    45 #include <fibril_synch.h>
    46 #include <io/chardev.h>
    4751#include <io/console.h>
    4852#include <io/keycode.h>
    49 #include <ipc/services.h>
    50 #include <ipc/input.h>
    5153#include <loc.h>
    52 #include <ns.h>
    53 #include <stdbool.h>
    54 #include <stdio.h>
    55 #include <stdlib.h>
    5654#include <str_error.h>
    57 
    58 #include "input.h"
     55#include <char_dev_iface.h>
     56#include <fibril.h>
     57#include "layout.h"
    5958#include "kbd.h"
    6059#include "kbd_port.h"
    6160#include "kbd_ctl.h"
    62 #include "layout.h"
    6361#include "mouse.h"
    6462#include "mouse_proto.h"
    6563#include "serial.h"
     64#include "input.h"
    6665
    6766#define NUM_LAYOUTS  4
     
    365364}
    366365
    367 static void kconsole_event_handler(ipc_call_t *call, void *arg)
     366static void kconsole_event_handler(ipc_callid_t callid, ipc_call_t *call,
     367    void *arg)
    368368{
    369369        if (IPC_GET_ARG1(*call)) {
     
    458458}
    459459
     460/** Add new legacy mouse device. */
     461static void mouse_add_dev(mouse_port_ops_t *port, mouse_proto_ops_t *proto)
     462{
     463        mouse_dev_t *mdev = mouse_dev_new();
     464        if (mdev == NULL)
     465                return;
     466       
     467        mdev->port_ops = port;
     468        mdev->proto_ops = proto;
     469        mdev->svc_id = 0;
     470       
     471        /* Initialize port driver. */
     472        if ((*mdev->port_ops->init)(mdev) != 0)
     473                goto fail;
     474       
     475        /* Initialize protocol driver. */
     476        if ((*mdev->proto_ops->init)(mdev) != 0) {
     477                /* XXX Uninit port */
     478                goto fail;
     479        }
     480       
     481        list_append(&mdev->link, &mouse_devs);
     482        return;
     483       
     484fail:
     485        free(mdev);
     486}
     487
    460488/** Add new kbdev device.
    461489 *
     
    486514        list_append(&kdev->link, &kbd_devs);
    487515        *kdevp = kdev;
    488         return 0;
     516        return EOK;
    489517       
    490518fail:
     
    523551        list_append(&mdev->link, &mouse_devs);
    524552        *mdevp = mdev;
    525         return 0;
     553        return EOK;
    526554       
    527555fail:
     
    536564        while (true) {
    537565                uint8_t data;
    538                 size_t nread;
    539 
    540                 chardev_read(sdev->chardev, &data, sizeof(data), &nread);
    541                 /* XXX Handle error */
     566
     567                char_dev_read(sdev->sess, &data, sizeof(data));
    542568                kbd_push_data(sdev->kdev, data);
    543569        }
     
    554580{
    555581        bool match = false;
    556         int rc;
    557582
    558583        serial_dev_t *sdev = serial_dev_new();
     
    562587        sdev->kdev->svc_id = service_id;
    563588       
    564         rc = loc_service_get_name(service_id, &sdev->kdev->svc_name);
     589        int rc = loc_service_get_name(service_id, &sdev->kdev->svc_name);
    565590        if (rc != EOK)
    566591                goto fail;
     
    586611                    IPC_FLAG_BLOCKING);
    587612
    588                 rc = chardev_open(sdev->sess, &sdev->chardev);
    589                 if (rc != EOK) {
    590                         async_hangup(sdev->sess);
    591                         sdev->sess = NULL;
    592                         list_remove(&sdev->link);
    593                         goto fail;
    594                 }
    595 
    596613                fid_t fid = fibril_create(serial_consumer, sdev);
    597614                fibril_add_ready(fid);
     
    599616       
    600617        *sdevp = sdev;
    601         return 0;
     618        return EOK;
    602619       
    603620fail:
     
    626643        kbd_add_dev(&chardev_port, &stty_ctl);
    627644#endif
     645#if defined(UARCH_ppc32)
     646        kbd_add_dev(&adb_port, &apple_ctl);
     647#endif
    628648#if defined(UARCH_sparc64) && defined(PROCESSOR_sun4v)
    629649        kbd_add_dev(&chardev_port, &stty_ctl);
     
    631651        /* Silence warning on abs32le about kbd_add_dev() being unused */
    632652        (void) kbd_add_dev;
     653}
     654
     655/** Add legacy drivers/devices. */
     656static void mouse_add_legacy_devs(void)
     657{
     658        /*
     659         * Need to add these drivers based on config unless we can probe
     660         * them automatically.
     661         */
     662#if defined(UARCH_ppc32)
     663        mouse_add_dev(&adb_mouse_port, &adb_proto);
     664#endif
     665        /* Silence warning on abs32le about mouse_add_dev() being unused */
     666        (void) mouse_add_dev;
    633667}
    634668
     
    670704                if (!already_known) {
    671705                        kbd_dev_t *kdev;
    672                         if (kbd_add_kbdev(svcs[i], &kdev) == 0) {
     706                        if (kbd_add_kbdev(svcs[i], &kdev) == EOK) {
    673707                                printf("%s: Connected keyboard device '%s'\n",
    674708                                    NAME, kdev->svc_name);
     
    721755                if (!already_known) {
    722756                        mouse_dev_t *mdev;
    723                         if (mouse_add_mousedev(svcs[i], &mdev) == 0) {
     757                        if (mouse_add_mousedev(svcs[i], &mdev) == EOK) {
    724758                                printf("%s: Connected mouse device '%s'\n",
    725759                                    NAME, mdev->svc_name);
     
    772806                if (!already_known) {
    773807                        serial_dev_t *sdev;
    774                         if (serial_add_srldev(svcs[i], &sdev) == 0) {
     808                        if (serial_add_srldev(svcs[i], &sdev) == EOK) {
    775809                                printf("%s: Connected serial device '%s'\n",
    776810                                    NAME, sdev->kdev->svc_name);
     
    827861        int rc = loc_register_cat_change_cb(cat_change_cb);
    828862        if (rc != EOK) {
    829                 printf("%s: Failed registering callback for device discovery: "
    830                     "%s\n", NAME, str_error(rc));
     863                printf("%s: Failed registering callback for device discovery. "
     864                    "(%d)\n", NAME, rc);
    831865                return rc;
    832866        }
     
    860894        /* Add legacy keyboard devices. */
    861895        kbd_add_legacy_devs();
     896       
     897        /* Add legacy mouse devices. */
     898        mouse_add_legacy_devs();
    862899       
    863900        /* Register driver */
Note: See TracChangeset for help on using the changeset viewer.