Ignore:
Timestamp:
2011-06-22T01:59:39Z (14 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
41e2118
Parents:
79506d6 (diff), f1fae414 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge libposix changes.

File:
1 moved

Legend:

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

    r79506d6 rcac458f  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2011 Martin Decky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup mouse
     29/** @addtogroup mouse_port
     30 * @ingroup mouse
    3031 * @{
    31  */ 
     32 */
    3233/** @file
    33  * @brief
     34 * @brief ADB mouse port driver.
    3435 */
    3536
    36 #include <ipc/char.h>
     37#include <ipc/adb.h>
    3738#include <async.h>
    38 #include <async_obsolete.h>
    39 #include <vfs/vfs.h>
    40 #include <fcntl.h>
     39#include <input.h>
     40#include <mouse_port.h>
     41#include <mouse.h>
    4142#include <errno.h>
    4243#include <devmap.h>
    43 #include <devmap_obsolete.h>
    44 #include <char_mouse.h>
    45 #include <mouse_port.h>
    4644
    47 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg);
     45static mouse_dev_t *mouse_dev;
     46static async_sess_t *dev_sess;
    4847
    49 static int dev_phone;
    50 
    51 #define NAME "char_mouse"
    52 
    53 int mouse_port_init(void)
    54 {
    55         devmap_handle_t handle;
    56         int rc = devmap_device_get_handle("char/ps2b", &handle,
    57             IPC_FLAG_BLOCKING);
    58        
    59         if (rc != EOK) {
    60                 printf("%s: Failed resolving PS/2\n", NAME);
    61                 return rc;
    62         }
    63        
    64         dev_phone = devmap_obsolete_device_connect(handle, IPC_FLAG_BLOCKING);
    65         if (dev_phone < 0) {
    66                 printf("%s: Failed connecting to PS/2\n", NAME);
    67                 return ENOENT;
    68         }
    69        
    70         /* NB: The callback connection is slotted for removal */
    71         if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, chardev_events,
    72             NULL) != 0) {
    73                 printf(NAME ": Failed to create callback from device\n");
    74                 return false;
    75         }
    76        
    77         return 0;
    78 }
    79 
    80 void mouse_port_yield(void)
    81 {
    82 }
    83 
    84 void mouse_port_reclaim(void)
    85 {
    86 }
    87 
    88 void mouse_port_write(uint8_t data)
    89 {
    90         async_obsolete_msg_1(dev_phone, CHAR_WRITE_BYTE, data);
    91 }
    92 
    93 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     48static void mouse_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    9449{
    9550        /* Ignore parameters, the connection is already opened */
    9651        while (true) {
    97 
    9852                ipc_call_t call;
    9953                ipc_callid_t callid = async_get_call(&call);
    100 
     54               
    10155                int retval;
    10256               
     
    10559                        return;
    10660                }
    107 
     61               
    10862                switch (IPC_GET_IMETHOD(call)) {
    109                 case IPC_FIRST_USER_METHOD:
    110                         mouse_handle_byte(IPC_GET_ARG1(call));
     63                case ADB_REG_NOTIF:
     64                        mouse_push_data(mouse_dev, IPC_GET_ARG1(call));
    11165                        break;
    11266                default:
    11367                        retval = ENOENT;
    11468                }
     69               
    11570                async_answer_0(callid, retval);
    11671        }
    11772}
    11873
     74static int adb_port_init(mouse_dev_t *mdev)
     75{
     76        const char *dev = "adb/mouse";
     77       
     78        mouse_dev = mdev;
     79       
     80        devmap_handle_t handle;
     81        int rc = devmap_device_get_handle(dev, &handle, 0);
     82        if (rc != EOK)
     83                return rc;
     84       
     85        dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 0);
     86        if (dev_sess == NULL) {
     87                printf("%s: Failed to connect to device\n", NAME);
     88                return ENOENT;
     89        }
     90       
     91        async_exch_t *exch = async_exchange_begin(dev_sess);
     92        if (exch == NULL) {
     93                printf("%s: Failed starting exchange with device\n", NAME);
     94                async_hangup(dev_sess);
     95                return ENOMEM;
     96        }
     97       
     98        /* NB: The callback connection is slotted for removal */
     99        rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL);
     100        async_exchange_end(exch);
     101        if (rc != EOK) {
     102                printf("%s: Failed to create callback from device\n", NAME);
     103                async_hangup(dev_sess);
     104                return rc;
     105        }
     106       
     107        return EOK;
     108}
     109
     110static void adb_port_yield(void)
     111{
     112}
     113
     114static void adb_port_reclaim(void)
     115{
     116}
     117
     118static void adb_port_write(uint8_t data)
     119{
     120}
     121
     122mouse_port_ops_t adb_mouse_port = {
     123        .init = adb_port_init,
     124        .yield = adb_port_yield,
     125        .reclaim = adb_port_reclaim,
     126        .write = adb_port_write
     127};
     128
    119129/**
    120130 * @}
Note: See TracChangeset for help on using the changeset viewer.