Ignore:
File:
1 edited

Legend:

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

    rfcafa04 r3954a63b  
    7979};
    8080
     81/** Operations of the device itself. */
     82static ddf_dev_ops_t mid_device_ops = {
     83        .interfaces[USB_DEV_IFACE] = &usb_iface_hub_impl
     84};
     85
     86/** Create new USB multi interface device.
     87 *
     88 * @param dev Backing generic DDF device.
     89 * @return New USB MID device.
     90 * @retval NULL Error occured.
     91 */
     92usbmid_device_t *usbmid_device_create(ddf_dev_t *dev)
     93{
     94        usbmid_device_t *mid = malloc(sizeof(usbmid_device_t));
     95        if (mid == NULL) {
     96                usb_log_error("Out of memory (wanted %zu bytes).\n",
     97                    sizeof(usbmid_device_t));
     98                return NULL;
     99        }
     100
     101        int rc;
     102        rc = usb_device_connection_initialize_from_device(&mid->wire, dev);
     103        if (rc != EOK) {
     104                usb_log_error("Failed to initialize `USB wire': %s.\n",
     105                    str_error(rc));
     106                free(mid);
     107                return NULL;
     108        }
     109
     110        rc = usb_pipe_initialize_default_control(&mid->ctrl_pipe,
     111            &mid->wire);
     112        if (rc != EOK) {
     113                usb_log_error("Failed to initialize control pipe: %s.\n",
     114                    str_error(rc));
     115                free(mid);
     116                return NULL;
     117        }
     118        rc = usb_pipe_probe_default_control(&mid->ctrl_pipe);
     119        if (rc != EOK) {
     120                usb_log_error("Probing default control pipe failed: %s.\n",
     121                    str_error(rc));
     122                free(mid);
     123                return NULL;
     124        }
     125
     126        mid->dev = dev;
     127        (void) &mid_device_ops;
     128
     129        return mid;
     130}
     131
    81132/** Create new interface for USB MID device.
    82133 *
     
    109160 * @return Error code.
    110161 */
    111 int usbmid_spawn_interface_child(usb_device_t *parent,
     162int usbmid_spawn_interface_child(usbmid_device_t *parent,
    112163    const usb_standard_device_descriptor_t *device_descriptor,
    113164    const usb_standard_interface_descriptor_t *interface_descriptor)
     
    131182
    132183        /* Create the device. */
    133         child = ddf_fun_create(parent->ddf_dev, fun_inner, child_name);
     184        child = ddf_fun_create(parent->dev, fun_inner, child_name);
    134185        if (child == NULL) {
    135186                rc = ENOMEM;
Note: See TracChangeset for help on using the changeset viewer.