Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/include/usb/dev/driver.h

    r87619045 r77ad86c  
    3737#define LIBUSBDEV_DRIVER_H_
    3838
    39 #include <usb/dev/device.h>
     39#include <usb/hc.h>
     40#include <usb/dev/usb_device_connection.h>
    4041#include <usb/dev/pipes.h>
     42
     43/** Descriptors for USB device. */
     44typedef struct {
     45        /** Standard device descriptor. */
     46        usb_standard_device_descriptor_t device;
     47        /** Full configuration descriptor of current configuration. */
     48        const uint8_t *configuration;
     49        size_t configuration_size;
     50} usb_device_descriptors_t;
     51
     52/** Wrapper for data related to alternate interface setting.
     53 * The pointers will typically point inside configuration descriptor and
     54 * thus you shall not deallocate them.
     55 */
     56typedef struct {
     57        /** Interface descriptor. */
     58        const usb_standard_interface_descriptor_t *interface;
     59        /** Pointer to start of descriptor tree bound with this interface. */
     60        const uint8_t *nested_descriptors;
     61        /** Size of data pointed by nested_descriptors in bytes. */
     62        size_t nested_descriptors_size;
     63} usb_alternate_interface_descriptors_t;
     64
     65/** Alternate interface settings. */
     66typedef struct {
     67        /** Array of alternate interfaces descriptions. */
     68        usb_alternate_interface_descriptors_t *alternatives;
     69        /** Size of @c alternatives array. */
     70        size_t alternative_count;
     71        /** Index of currently selected one. */
     72        size_t current;
     73} usb_alternate_interfaces_t;
     74
     75/** USB device structure. */
     76typedef struct {
     77        /** Connection to USB hc, used by wire and arbitrary requests. */
     78        usb_hc_connection_t hc_conn;
     79        /** Connection backing the pipes.
     80         * Typically, you will not need to use this attribute at all.
     81         */
     82        usb_device_connection_t wire;
     83        /** The default control pipe. */
     84        usb_pipe_t ctrl_pipe;
     85        /** Other endpoint pipes.
     86         * This is an array of other endpoint pipes in the same order as
     87         * in usb_driver_t.
     88         */
     89        usb_endpoint_mapping_t *pipes;
     90        /** Number of other endpoint pipes. */
     91        size_t pipes_count;
     92        /** Current interface.
     93         * Usually, drivers operate on single interface only.
     94         * This item contains the value of the interface or -1 for any.
     95         */
     96        int interface_no;
     97
     98        /** Alternative interfaces. */
     99        usb_alternate_interfaces_t alternate_interfaces;
     100
     101        /** Some useful descriptors. */
     102        usb_device_descriptors_t descriptors;
     103
     104        /** Generic DDF device backing this one. DO NOT TOUCH! */
     105        ddf_dev_t *ddf_dev;
     106        /** Custom driver data.
     107         * Do not use the entry in generic device, that is already used
     108         * by the framework.
     109         */
     110        void *driver_data;
     111} usb_device_t;
    41112
    42113/** USB driver ops. */
     
    93164int usb_driver_main(const usb_driver_t *);
    94165
     166int usb_device_init(usb_device_t *, ddf_dev_t *,
     167    const usb_endpoint_description_t **, const char **);
     168void usb_device_deinit(usb_device_t *);
     169
     170int usb_device_select_interface(usb_device_t *, uint8_t,
     171    const usb_endpoint_description_t **);
     172
     173int usb_device_retrieve_descriptors(usb_pipe_t *, usb_device_descriptors_t *);
     174void usb_device_release_descriptors(usb_device_descriptors_t *);
     175
     176int usb_device_create_pipes(usb_device_connection_t *,
     177    const usb_endpoint_description_t **, const uint8_t *, size_t, int, int,
     178    usb_endpoint_mapping_t **, size_t *);
     179void usb_device_destroy_pipes(usb_endpoint_mapping_t *, size_t);
     180
     181void * usb_device_data_alloc(usb_device_t *, size_t);
     182
     183size_t usb_interface_count_alternates(const uint8_t *, size_t, uint8_t);
     184int usb_alternate_interfaces_init(usb_alternate_interfaces_t *,
     185    const uint8_t *, size_t, int);
     186void usb_alternate_interfaces_deinit(usb_alternate_interfaces_t *);
    95187#endif
    96188/**
Note: See TracChangeset for help on using the changeset viewer.