Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbmid/usbmid.c

    rb7fd2a0 re0a5d4c  
    11/*
    22 * Copyright (c) 2011 Vojtech Horky
     3 * Copyright (c) 2018 Ondrej Hlavaty
    34 * All rights reserved.
    45 *
     
    4546#include "usbmid.h"
    4647
    47 /** Get USB device handle by calling the parent usb_device_t.
     48/**
     49 * Get USB device description by calling HC and altering the interface field.
    4850 *
    4951 * @param[in] fun Device function the operation is running on.
    50  * @param[out] handle Device handle.
     52 * @param[out] desc Device descriptor.
    5153 * @return Error code.
    5254 */
    53 static errno_t usb_iface_device_handle(ddf_fun_t *fun, devman_handle_t *handle)
    54 {
    55         assert(fun);
    56         assert(handle);
    57         usb_device_t *usb_dev = usb_device_get(ddf_fun_get_dev(fun));
    58         *handle = usb_device_get_devman_handle(usb_dev);
    59         return EOK;
    60 }
    61 
    62 /** Callback for DDF USB get interface. */
    63 static errno_t usb_iface_iface_no(ddf_fun_t *fun, int *iface_no)
     55static errno_t usb_iface_description(ddf_fun_t *fun, usb_device_desc_t *desc)
    6456{
    6557        usbmid_interface_t *iface = ddf_fun_data_get(fun);
    6658        assert(iface);
     59        usb_device_t *usb_dev = ddf_dev_data_get(ddf_fun_get_dev(fun));
     60        assert(usb_dev);
    6761
    68         if (iface_no)
    69                 *iface_no = iface->interface_no;
     62        async_exch_t *exch = usb_device_bus_exchange_begin(usb_dev);
     63        if (!exch)
     64                return EPARTY;
     65
     66        usb_device_desc_t tmp_desc;
     67        const errno_t ret = usb_get_my_description(exch, &tmp_desc);
     68
     69        if (ret == EOK && desc) {
     70                *desc = tmp_desc;
     71                desc->iface = iface->interface_no;
     72        }
     73
     74        usb_device_bus_exchange_end(exch);
    7075
    7176        return EOK;
     
    7479/** DDF interface of the child - USB functions. */
    7580static usb_iface_t child_usb_iface = {
    76         .get_my_device_handle = usb_iface_device_handle,
    77         .get_my_interface = usb_iface_iface_no,
     81        .get_my_description = usb_iface_description,
    7882};
    7983
     
    117121         * class name something humanly understandable.
    118122         */
    119         int ret = asprintf(&child_name, "%s%hhu",
     123        errno_t ret = asprintf(&child_name, "%s%hhu",
    120124            usb_str_class(interface_descriptor->interface_class),
    121125            interface_descriptor->interface_number);
Note: See TracChangeset for help on using the changeset viewer.