Changeset 489c3e7 in mainline


Ignore:
Timestamp:
2011-03-12T11:59:52Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
69334af
Parents:
6105fc0
Message:

USB mouse driver uses the new framework

The implementation was adjusted very roughly, but it looks that it
still works.

Location:
uspace/drv/usbmouse
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbmouse/init.c

    r6105fc0 r489c3e7  
    4242
    4343/** Mouse polling endpoint description for boot protocol subclass. */
    44 static usb_endpoint_description_t poll_endpoint_description = {
     44usb_endpoint_description_t poll_endpoint_description = {
    4545        .transfer_type = USB_TRANSFER_INTERRUPT,
    4646        .direction = USB_DIRECTION_IN,
     
    5050        .flags = 0
    5151};
    52 
    53 /** Initialize poll pipe.
    54  *
    55  * Expects that session is already started on control pipe zero.
    56  *
    57  * @param mouse Mouse device.
    58  * @param my_interface Interface number.
    59  * @return Error code.
    60  */
    61 static int intialize_poll_pipe(usb_mouse_t *mouse, int my_interface)
    62 {
    63         assert(usb_endpoint_pipe_is_session_started(&mouse->ctrl_pipe));
    64 
    65         int rc;
    66 
    67         void *config_descriptor;
    68         size_t config_descriptor_size;
    69 
    70         rc = usb_request_get_full_configuration_descriptor_alloc(
    71             &mouse->ctrl_pipe, 0, &config_descriptor, &config_descriptor_size);
    72         if (rc != EOK) {
    73                 return rc;
    74         }
    75 
    76         usb_endpoint_mapping_t endpoint_mapping[1] = {
    77                 {
    78                         .pipe = &mouse->poll_pipe,
    79                         .description = &poll_endpoint_description,
    80                         .interface_no = my_interface
    81                 }
    82         };
    83 
    84         rc = usb_endpoint_pipe_initialize_from_configuration(endpoint_mapping,
    85             1, config_descriptor, config_descriptor_size, &mouse->wire);
    86         if (rc != EOK) {
    87                 return rc;
    88         }
    89 
    90         if (!endpoint_mapping[0].present) {
    91                 return ENOENT;
    92         }
    93 
    94         mouse->poll_interval_us = 1000 * endpoint_mapping[0].descriptor->poll_interval;
    95 
    96         usb_log_debug("prepared polling endpoint %d (interval %zu).\n",
    97             mouse->poll_pipe.endpoint_no, mouse->poll_interval_us);
    98 
    99         return EOK;
    100 }
    10152
    10253static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *);
     
    14394 * @return Error code.
    14495 */
    145 int usb_mouse_create(ddf_dev_t *dev)
     96int usb_mouse_create(usb_device_t *dev)
    14697{
    14798        usb_mouse_t *mouse = malloc(sizeof(usb_mouse_t));
     
    149100                return ENOMEM;
    150101        }
    151         mouse->device = dev;
     102        mouse->dev = dev;
    152103        mouse->console_phone = -1;
    153104
    154105        int rc;
    155106
    156         /* Initialize the backing connection. */
    157         rc = usb_device_connection_initialize_from_device(&mouse->wire, dev);
    158         if (rc != EOK) {
    159                 goto leave;
    160         }
    161 
    162         /* Initialize the default control pipe. */
    163         rc = usb_endpoint_pipe_initialize_default_control(&mouse->ctrl_pipe,
    164             &mouse->wire);
    165         if (rc != EOK) {
    166                 goto leave;
    167         }
    168 
    169         rc = usb_endpoint_pipe_start_session(&mouse->ctrl_pipe);
    170         if (rc != EOK) {
    171                 goto leave;
    172         }
    173 
    174         rc = intialize_poll_pipe(mouse, usb_device_get_assigned_interface(dev));
    175 
    176         /* We can ignore error here. */
    177         usb_endpoint_pipe_end_session(&mouse->ctrl_pipe);
    178 
    179         if (rc != EOK) {
    180                 goto leave;
    181         }
    182 
    183107        /* Create DDF function. */
    184         mouse->mouse_fun = ddf_fun_create(dev, fun_exposed, "mouse");
     108        mouse->mouse_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "mouse");
    185109        if (mouse->mouse_fun == NULL) {
    186110                rc = ENOMEM;
  • uspace/drv/usbmouse/main.c

    r6105fc0 r489c3e7  
    4444 * @return Error code.
    4545 */
    46 static int usbmouse_add_device(ddf_dev_t *dev)
     46static int usbmouse_add_device(usb_device_t *dev)
    4747{
    4848        int rc = usb_mouse_create(dev);
     
    5252                return rc;
    5353        }
     54
     55        usb_log_debug("Polling pipe at endpoint %d.\n", dev->pipes[0].pipe->endpoint_no);
    5456
    5557        fid_t poll_fibril = fibril_create(usb_mouse_polling_fibril, dev);
     
    6365
    6466        usb_log_info("controlling new mouse (handle %llu).\n",
    65             dev->handle);
     67            dev->ddf_dev->handle);
    6668
    6769        return EOK;
     
    6971
    7072/** USB mouse driver ops. */
    71 static driver_ops_t mouse_driver_ops = {
     73static usb_driver_ops_t mouse_driver_ops = {
    7274        .add_device = usbmouse_add_device,
    7375};
    7476
     77static usb_endpoint_description_t *endpoints[] = {
     78        &poll_endpoint_description,
     79        NULL
     80};
     81
    7582/** USB mouse driver. */
    76 static driver_t mouse_driver = {
     83static usb_driver_t mouse_driver = {
    7784        .name = NAME,
    78         .driver_ops = &mouse_driver_ops
     85        .ops = &mouse_driver_ops,
     86        .endpoints = endpoints
    7987};
    8088
     
    8391        usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
    8492
    85         return ddf_driver_main(&mouse_driver);
     93        return usb_driver_main(&mouse_driver);
    8694}
    8795
  • uspace/drv/usbmouse/mouse.c

    r6105fc0 r489c3e7  
    5151{
    5252        assert(arg != NULL);
    53         ddf_dev_t *dev = (ddf_dev_t *) arg;
     53        usb_device_t *dev = (usb_device_t *) arg;
    5454        usb_mouse_t *mouse = (usb_mouse_t *) dev->driver_data;
    5555
    5656        assert(mouse);
    5757
    58         size_t buffer_size = mouse->poll_pipe.max_packet_size;
     58        size_t buffer_size = POLL_PIPE(dev)->max_packet_size;
    5959
    6060        if (buffer_size < 4) {
     
    8484                 */
    8585
    86                 rc = usb_endpoint_pipe_start_session(&mouse->poll_pipe);
     86                rc = usb_endpoint_pipe_start_session(POLL_PIPE(dev));
    8787                if (rc != EOK) {
    8888                        usb_log_warning("Failed to start session, will try again: %s.\n",
     
    9191                }
    9292
    93                 rc = usb_endpoint_pipe_read(&mouse->poll_pipe,
     93                rc = usb_endpoint_pipe_read(POLL_PIPE(dev),
    9494                    buffer, buffer_size, &actual_size);
    9595
    96                 usb_endpoint_pipe_end_session(&mouse->poll_pipe);
     96                usb_endpoint_pipe_end_session(POLL_PIPE(dev));
    9797
    9898                if (rc != EOK) {
  • uspace/drv/usbmouse/mouse.h

    r6105fc0 r489c3e7  
    3737#define USBMOUSE_MOUSE_H_
    3838
    39 #include <ddf/driver.h>
     39#include <usb/devdrv.h>
    4040#include <usb/pipes.h>
    4141#include <time.h>
     
    4646typedef struct {
    4747        /** Generic device container. */
    48         ddf_dev_t *device;
     48        usb_device_t *dev;
    4949        /** Function representing the device. */
    5050        ddf_fun_t *mouse_fun;
    51         /** Representation of connection to the device. */
    52         usb_device_connection_t wire;
    53         /** Default (zero) control pipe. */
    54         usb_endpoint_pipe_t ctrl_pipe;
    55         /** Polling (in) pipe. */
    56         usb_endpoint_pipe_t poll_pipe;
    5751        /** Polling interval in microseconds. */
    5852        suseconds_t poll_interval_us;
     
    6155} usb_mouse_t;
    6256
    63 int usb_mouse_create(ddf_dev_t *);
     57#define POLL_PIPE(dev) ((dev)->pipes[0].pipe)
     58
     59extern usb_endpoint_description_t poll_endpoint_description;
     60
     61int usb_mouse_create(usb_device_t *);
    6462
    6563int usb_mouse_polling_fibril(void *);
Note: See TracChangeset for help on using the changeset viewer.