Changes in / [960bee9:d4beec3] in mainline


Ignore:
Location:
uspace
Files:
3 added
3 deleted
23 edited

Legend:

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

    r960bee9 rd4beec3  
    4444#include "usbmid.h"
    4545
    46 /** Callback when new MID device is attached to the host.
    47  *
    48  * @param gen_dev Generic DDF device representing the new device.
    49  * @return Error code.
    50  */
    5146static int usbmid_add_device(ddf_dev_t *gen_dev)
    5247{
     
    9186}
    9287
    93 /** USB MID driver ops. */
    9488static driver_ops_t mid_driver_ops = {
    9589        .add_device = usbmid_add_device,
    9690};
    9791
    98 /** USB MID driver. */
    9992static driver_t mid_driver = {
    10093        .name = NAME,
  • uspace/drv/usbmid/usbmid.c

    r960bee9 rd4beec3  
    6767}
    6868
    69 /** DDF interface of the child - interface function. */
    7069static usb_iface_t child_usb_iface = {
    7170        .get_hc_handle = usb_iface_get_hc_handle_hub_child_impl,
     
    7473};
    7574
    76 /** Operations for children - interface functions. */
     75
    7776static ddf_dev_ops_t child_device_ops = {
    7877        .interfaces[USB_DEV_IFACE] = &child_usb_iface
    7978};
    8079
    81 /** Operations of the device itself. */
    8280static ddf_dev_ops_t mid_device_ops = {
    8381        .interfaces[USB_DEV_IFACE] = &usb_iface_hub_impl
  • uspace/drv/usbmid/usbmid.h

    r960bee9 rd4beec3  
    4444#define NAME "usbmid"
    4545
    46 /** USB MID device container. */
    4746typedef struct {
    4847        /** Device container. */
     
    5554} usbmid_device_t;
    5655
    57 
    58 /** Container for single interface in a MID device. */
    5956typedef struct {
    6057        /** Function container. */
  • uspace/drv/usbmouse/init.c

    r960bee9 rd4beec3  
    101101
    102102static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *);
    103 /** Device ops for USB mouse. */
    104103static ddf_dev_ops_t mouse_ops = {
    105104        .default_handler = default_connection_handler
     
    136135}
    137136
    138 /** Create USB mouse device.
    139  *
    140  * The mouse device is stored into <code>dev-&gt;driver_data</code>.
    141  *
    142  * @param dev Generic device.
    143  * @return Error code.
    144  */
     137
    145138int usb_mouse_create(ddf_dev_t *dev)
    146139{
  • uspace/drv/usbmouse/main.c

    r960bee9 rd4beec3  
    3939#include <str_error.h>
    4040
    41 /** Callback when new mouse device is attached and recognised by DDF.
    42  *
    43  * @param dev Representation of a generic DDF device.
    44  * @return Error code.
    45  */
    4641static int usbmouse_add_device(ddf_dev_t *dev)
    4742{
     
    6863}
    6964
    70 /** USB mouse driver ops. */
    7165static driver_ops_t mouse_driver_ops = {
    7266        .add_device = usbmouse_add_device,
    7367};
    7468
    75 /** USB mouse driver. */
    7669static driver_t mouse_driver = {
    7770        .name = NAME,
     
    8174int main(int argc, char *argv[])
    8275{
    83         usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
     76        usb_log_enable(USB_LOG_LEVEL_DEBUG2, NAME);
    8477
    8578        return ddf_driver_main(&mouse_driver);
  • uspace/drv/usbmouse/mouse.c

    r960bee9 rd4beec3  
    4040#include <ipc/mouse.h>
    4141
    42 /** Fibril function for polling the mouse device.
    43  *
    44  * This function shall not terminate unless the device breaks and fails
    45  * to send data (e.g. stalls on data request).
    46  *
    47  * @param arg ddf_dev_t type representing the mouse device.
    48  * @return EOK Always.
    49  */
    5042int usb_mouse_polling_fibril(void *arg)
    5143{
  • uspace/drv/usbmouse/mouse.h

    r960bee9 rd4beec3  
    4343#define NAME "usbmouse"
    4444
    45 /** Container for USB mouse device. */
    4645typedef struct {
    47         /** Generic device container. */
    4846        ddf_dev_t *device;
    49         /** Function representing the device. */
    5047        ddf_fun_t *mouse_fun;
    51         /** Representation of connection to the device. */
    5248        usb_device_connection_t wire;
    53         /** Default (zero) control pipe. */
    5449        usb_endpoint_pipe_t ctrl_pipe;
    55         /** Polling (in) pipe. */
    5650        usb_endpoint_pipe_t poll_pipe;
    57         /** Polling interval in microseconds. */
    5851        suseconds_t poll_interval_us;
    59         /** IPC phone to console (consumer). */
    6052        int console_phone;
    6153} usb_mouse_t;
  • uspace/lib/usb/include/usb/classes/classes.h

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * USB device classes (generic constants and functions).
     33 * @brief USB device classes and subclasses.
    3434 */
    3535#ifndef LIBUSB_CLASSES_H_
  • uspace/lib/usb/include/usb/debug.h

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Debugging related functions.
     33 * @brief Debugging related functions.
    3434 */
    3535#ifndef LIBUSB_DEBUG_H_
     
    3939#include <assert.h>
    4040
     41void usb_dprintf(const char *tag, int level, const char *format, ...);
     42void usb_dprintf_enable(const char *tag, int level);
     43
    4144void usb_dump_standard_descriptor(FILE *, const char *, const char *,
    4245    const uint8_t *, size_t);
     
    4447/** Logging level. */
    4548typedef enum {
    46         /** Fatal, unrecoverable, error.
    47          * Such error prevents the driver from working at all.
    48          */
    4949        USB_LOG_LEVEL_FATAL,
    50 
    51         /** Serious but recoverable error
    52          * Shall be used for errors fatal for single device but not for
    53          * driver itself.
    54          */
    5550        USB_LOG_LEVEL_ERROR,
    56 
    57         /** Warning.
    58          * Problems from which the driver is able to recover gracefully.
    59          */
    6051        USB_LOG_LEVEL_WARNING,
    61 
    62         /** Information message.
    63          * This should be the last level that is printed by default to
    64          * the screen.
    65          * Typical usage is to inform that new device was found and what
    66          * are its capabilities.
    67          * Do not use for repetitive actions (such as device polling).
    68          */
    6952        USB_LOG_LEVEL_INFO,
    70 
    71         /** Debugging message. */
    7253        USB_LOG_LEVEL_DEBUG,
    73 
    74         /** More detailed debugging message. */
    7554        USB_LOG_LEVEL_DEBUG2,
    76 
    77         /** Terminating constant for logging levels. */
    7855        USB_LOG_LEVEL_MAX
    7956} usb_log_level_t;
     
    8461void usb_log_printf(usb_log_level_t, const char *, ...);
    8562
    86 /** Log fatal error. */
    8763#define usb_log_fatal(format, ...) \
    8864        usb_log_printf(USB_LOG_LEVEL_FATAL, format, ##__VA_ARGS__)
    8965
    90 /** Log normal (recoverable) error. */
    9166#define usb_log_error(format, ...) \
    9267        usb_log_printf(USB_LOG_LEVEL_ERROR, format, ##__VA_ARGS__)
    9368
    94 /** Log warning. */
    9569#define usb_log_warning(format, ...) \
    9670        usb_log_printf(USB_LOG_LEVEL_WARNING, format, ##__VA_ARGS__)
    9771
    98 /** Log informational message. */
    9972#define usb_log_info(format, ...) \
    10073        usb_log_printf(USB_LOG_LEVEL_INFO, format, ##__VA_ARGS__)
    10174
    102 /** Log debugging message. */
    10375#define usb_log_debug(format, ...) \
    10476        usb_log_printf(USB_LOG_LEVEL_DEBUG, format, ##__VA_ARGS__)
    10577
    106 /** Log verbose debugging message. */
    10778#define usb_log_debug2(format, ...) \
    10879        usb_log_printf(USB_LOG_LEVEL_DEBUG2, format, ##__VA_ARGS__)
  • uspace/lib/usb/include/usb/descriptor.h

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Standard USB descriptors.
     33 * @brief Standard USB descriptors.
    3434 */
    3535#ifndef LIBUSB_DESCRIPTOR_H_
     
    8383        /** Product descriptor index. */
    8484        uint8_t str_product;
    85         /** Device serial number descriptor index. */
     85        /** Device serial number desriptor index. */
    8686        uint8_t str_serial_number;
    8787        /** Number of possible configurations. */
     
    167167} __attribute__ ((packed)) usb_standard_endpoint_descriptor_t;
    168168
     169
     170/* TODO: string descriptors. */
     171
    169172#endif
    170173/**
  • uspace/lib/usb/include/usb/dp.h

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * USB descriptor parser.
     33 * @brief USB descriptor parser.
    3434 */
    3535#ifndef LIBUSB_DP_H_
     
    4040#include <usb/descriptor.h>
    4141
    42 /** USB descriptors nesting.
    43  * The nesting describes the logical tree USB descriptors form
    44  * (e.g. that endpoint descriptor belongs to interface or that
    45  * interface belongs to configuration).
    46  *
    47  * See usb_descriptor_type_t for descriptor constants.
    48  */
    4942typedef struct {
    50         /** Child descriptor id. */
    5143        int child;
    52         /** Parent descriptor id. */
    5344        int parent;
    5445} usb_dp_descriptor_nesting_t;
     
    5647extern usb_dp_descriptor_nesting_t usb_dp_standard_descriptor_nesting[];
    5748
    58 /** Descriptor parser structure. */
    5949typedef struct {
    60         /** Used descriptor nesting. */
    6150        usb_dp_descriptor_nesting_t *nesting;
    6251} usb_dp_parser_t;
    6352
    64 /** Descriptor parser data. */
    6553typedef struct {
    66         /** Data to be parsed. */
    6754        uint8_t *data;
    68         /** Size of input data in bytes. */
    6955        size_t size;
    70         /** Custom argument. */
    7156        void *arg;
    7257} usb_dp_parser_data_t;
  • uspace/lib/usb/include/usb/hub.h

    r960bee9 rd4beec3  
    3232/** @file
    3333 * Functions needed by hub drivers.
    34  *
    35  * For class specific requests, see usb/classes/hub.h.
    3634 */
    3735#ifndef LIBUSB_HUB_H_
  • uspace/lib/usb/include/usb/pipes.h

    r960bee9 rd4beec3  
    4343#include <ddf/driver.h>
    4444
    45 /** Abstraction of a physical connection to the device.
     45/**
     46 * Abstraction of a physical connection to the device.
    4647 * This type is an abstraction of the USB wire that connects the host and
    4748 * the function (device).
     
    5455} usb_device_connection_t;
    5556
    56 /** Abstraction of a logical connection to USB device endpoint.
     57/**
     58 * Abstraction of a logical connection to USB device endpoint.
    5759 * It encapsulates endpoint attributes (transfer type etc.) as well
    5860 * as information about currently running sessions.
     
    109111        /** Found descriptor fitting the description. */
    110112        usb_standard_endpoint_descriptor_t *descriptor;
    111         /** Interface descriptor the endpoint belongs to. */
     113        /** Interface the endpoint belongs to. */
    112114        usb_standard_interface_descriptor_t *interface;
    113115        /** Whether the endpoint was actually found. */
  • uspace/lib/usb/include/usb/request.h

    r960bee9 rd4beec3  
    7272        union {
    7373                uint16_t value;
    74                 /* FIXME: add #ifdefs according to host endianness */
     74                /* FIXME: add #ifdefs according to host endianess */
    7575                struct {
    7676                        uint8_t value_low;
  • uspace/lib/usb/include/usb/usb.h

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Common USB types and functions.
     33 * @brief Base USB types.
    3434 */
    3535#ifndef LIBUSB_USB_H_
     
    121121} usb_target_t;
    122122
    123 /** Compare USB targets (addresses and endpoints).
    124  *
    125  * @param a First target.
    126  * @param b Second target.
    127  * @return Whether @p a and @p b points to the same pipe on the same device.
    128  */
    129123static inline int usb_target_same(usb_target_t a, usb_target_t b)
    130124{
  • uspace/lib/usb/src/debug.c

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Debugging and logging support.
     33 * @brief Debugging support.
    3434 */
    3535#include <adt/list.h>
     
    4040#include <usb/debug.h>
    4141
     42/** Debugging tag. */
     43typedef struct {
     44        /** Linked list member. */
     45        link_t link;
     46        /** Tag name.
     47         * We always have a private copy of the name.
     48         */
     49        char *tag;
     50        /** Enabled level of debugging. */
     51        int level;
     52} usb_debug_tag_t;
     53
     54/** Get instance of usb_debug_tag_t from link_t. */
     55#define USB_DEBUG_TAG_INSTANCE(iterator) \
     56        list_get_instance(iterator, usb_debug_tag_t, link)
     57
     58/** List of all known tags. */
     59static LIST_INITIALIZE(tag_list);
     60/** Mutex guard for the list of all tags. */
     61static FIBRIL_MUTEX_INITIALIZE(tag_list_guard);
     62
    4263/** Level of logging messages. */
    4364static usb_log_level_t log_level = USB_LOG_LEVEL_WARNING;
    44 
    4565/** Prefix for logging messages. */
    4666static const char *log_prefix = "usb";
    47 
    4867/** Serialization mutex for logging functions. */
    4968static FIBRIL_MUTEX_INITIALIZE(log_serializer);
    50 
    51 /** File where to store the log. */
    5269static FILE *log_stream = NULL;
    5370
     71/** Find or create new tag with given name.
     72 *
     73 * @param tagname Tag name.
     74 * @return Debug tag structure.
     75 * @retval NULL Out of memory.
     76 */
     77static usb_debug_tag_t *get_tag(const char *tagname)
     78{
     79        link_t *link;
     80        for (link = tag_list.next; \
     81            link != &tag_list; \
     82            link = link->next) {
     83                usb_debug_tag_t *tag = USB_DEBUG_TAG_INSTANCE(link);
     84                if (str_cmp(tag->tag, tagname) == 0) {
     85                        return tag;
     86                }
     87        }
     88
     89        /*
     90         * Tag not found, we will create a new one.
     91         */
     92        usb_debug_tag_t *new_tag = malloc(sizeof(usb_debug_tag_t));
     93        int rc = asprintf(&new_tag->tag, "%s", tagname);
     94        if (rc < 0) {
     95                free(new_tag);
     96                return NULL;
     97        }
     98        list_initialize(&new_tag->link);
     99        new_tag->level = 1;
     100
     101        /*
     102         * Append it to the end of known tags.
     103         */
     104        list_append(&new_tag->link, &tag_list);
     105
     106        return new_tag;
     107}
     108
     109/** Print debugging information.
     110 * If the tag is used for the first time, its structures are automatically
     111 * created and initial verbosity level is set to 1.
     112 *
     113 * @param tagname Tag name.
     114 * @param level Level (verbosity) of the message.
     115 * @param format Formatting string for printf().
     116 */
     117void usb_dprintf(const char *tagname, int level, const char *format, ...)
     118{
     119        fibril_mutex_lock(&tag_list_guard);
     120        usb_debug_tag_t *tag = get_tag(tagname);
     121        if (tag == NULL) {
     122                printf("USB debug: FATAL ERROR - failed to create tag.\n");
     123                goto leave;
     124        }
     125
     126        if (tag->level < level) {
     127                goto leave;
     128        }
     129
     130        va_list args;
     131        va_start(args, format);
     132
     133        printf("[%s:%d]: ", tagname, level);
     134        vprintf(format, args);
     135
     136        va_end(args);
     137
     138leave:
     139        fibril_mutex_unlock(&tag_list_guard);
     140}
     141
     142/** Enable debugging prints for given tag.
     143 *
     144 * Setting level to <i>n</i> will cause that only printing messages
     145 * with level lower or equal to <i>n</i> will be printed.
     146 *
     147 * @param tagname Tag name.
     148 * @param level Enabled level.
     149 */
     150void usb_dprintf_enable(const char *tagname, int level)
     151{
     152        fibril_mutex_lock(&tag_list_guard);
     153        usb_debug_tag_t *tag = get_tag(tagname);
     154        if (tag == NULL) {
     155                printf("USB debug: FATAL ERROR - failed to create tag.\n");
     156                goto leave;
     157        }
     158
     159        tag->level = level;
     160
     161leave:
     162        fibril_mutex_unlock(&tag_list_guard);
     163}
    54164
    55165/** Enable logging.
     
    72182}
    73183
    74 /** Get log level name prefix.
    75  *
    76  * @param level Log level.
    77  * @return String prefix for the message.
    78  */
     184
    79185static const char *log_level_name(usb_log_level_t level)
    80186{
     
    150256/* string + terminator + number width (enough for 4GB)*/
    151257#define REMAINDER_STR_LEN (5 + 1 + 10)
    152 
    153 /** How many bytes to group together. */
    154258#define BUFFER_DUMP_GROUP_SIZE 4
    155 
    156 /** Size of the string for buffer dumps. */
    157259#define BUFFER_DUMP_LEN 240 /* Ought to be enough for everybody ;-). */
    158 
    159 /** Fibril local storage for the dumped buffer. */
    160260static fibril_local char buffer_dump[BUFFER_DUMP_LEN];
    161261
     
    165265 * in a static fibril local string.
    166266 * That means that you do not have to deallocate the string (actually, you
    167  * can not do that) and you do not have to guard it against concurrent
     267 * can not do that) and you do not have to save it agains concurrent
    168268 * calls to it.
    169269 * The only limitation is that each call rewrites the buffer again.
  • uspace/lib/usb/src/dp.c

    r960bee9 rd4beec3  
    3232/**
    3333 * @file
    34  * USB descriptor parser (implementation).
    35  *
    36  * The descriptor parser is a generic parser for structure, where individual
    37  * items are stored in single buffer and each item begins with length followed
    38  * by type. These types are organized into tree hierarchy.
    39  *
    40  * The parser is able of only two actions: find first child and find next
    41  * sibling.
     34 * @brief USB descriptor parser (implementation).
    4235 */
    4336#include <stdio.h>
  • uspace/lib/usb/src/dump.c

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Descriptor dumping.
     33 * @brief Descriptor dumping.
    3434 */
    3535#include <adt/list.h>
     
    4343#include <usb/classes/hid.h>
    4444
    45 /** Mapping between descriptor id and dumping function. */
    4645typedef struct {
    47         /** Descriptor id. */
    4846        int id;
    49         /** Dumping function. */
    5047        void (*dump)(FILE *, const char *, const char *,
    5148            const uint8_t *, size_t);
     
    6966    const uint8_t *, size_t);
    7067
    71 /** Descriptor dumpers mapping. */
    7268static descriptor_dump_t descriptor_dumpers[] = {
    7369        { USB_DESCTYPE_DEVICE, usb_dump_descriptor_device },
     
    277273    const uint8_t *descriptor, size_t descriptor_length)
    278274{
    279         /* TODO */
    280275}
    281276
     
    284279    const uint8_t *descriptor, size_t descriptor_length)
    285280{
    286         /* TODO */
    287281}
    288282
  • uspace/lib/usb/src/hub.c

    r960bee9 rd4beec3  
    144144/** Wrapper for registering attached device to the hub.
    145145 *
    146  * The @p enable_port function is expected to enable signaling on given
     146 * The @p enable_port function is expected to enable singalling on given
    147147 * port.
    148148 * The two arguments to it can have arbitrary meaning
     
    152152 *
    153153 * If the @p enable_port fails (i.e. does not return EOK), the device
    154  * addition is canceled.
     154 * addition is cancelled.
    155155 * The return value is then returned (it is good idea to use different
    156156 * error codes than those listed as return codes by this function itself).
     
    159159 * @param connection Opened connection to host controller.
    160160 * @param dev_speed New device speed.
    161  * @param enable_port Function for enabling signaling through the port the
     161 * @param enable_port Function for enabling signalling through the port the
    162162 *      device is attached to.
    163163 * @param port_no Port number (passed through to @p enable_port).
     
    201201
    202202        /*
    203          * Enable the port (i.e. allow signaling through this port).
     203         * Enable the port (i.e. allow signalling through this port).
    204204         */
    205205        rc = enable_port(port_no, arg);
  • uspace/lib/usb/src/recognise.c

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Functions for recognition of attached devices.
     33 * @brief Functions for recognising kind of attached devices.
    3434 */
    3535#include <sys/types.h>
     
    4444#include <assert.h>
    4545
    46 /** Index to append after device name for uniqueness. */
    4746static size_t device_name_index = 0;
    48 /** Mutex guard for device_name_index. */
    4947static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex);
    5048
    51 /** DDF operations of child devices. */
    5249ddf_dev_ops_t child_ops = {
    5350        .interfaces[USB_DEV_IFACE] = &usb_iface_hub_child_impl
    5451};
    5552
    56 /** Get integer part from BCD coded number. */
    5753#define BCD_INT(a) (((unsigned int)(a)) / 256)
    58 /** Get fraction part from BCD coded number (as an integer, no less). */
    5954#define BCD_FRAC(a) (((unsigned int)(a)) % 256)
    6055
    61 /** Format for BCD coded number to be used in printf. */
    6256#define BCD_FMT "%x.%x"
    63 /** Arguments to printf for BCD coded number. */
    6457#define BCD_ARGS(a) BCD_INT((a)), BCD_FRAC((a))
    6558
     
    120113}
    121114
    122 /** Add match id to list or return with error code.
    123  *
    124  * @param match_ids List of match ids.
    125  * @param score Match id score.
    126  * @param format Format of the matching string
    127  * @param ... Arguments for the format.
    128  */
    129115#define ADD_MATCHID_OR_RETURN(match_ids, score, format, ...) \
    130116        do { \
  • uspace/lib/usb/src/request.c

    r960bee9 rd4beec3  
    110110  *     (must be in USB endianness).
    111111  * @param data Buffer where to store data accepted during the DATA stage.
    112   *     (they will come in USB endianness).
     112  *     (they will come in USB endianess).
    113113  * @param data_size Size of the @p data buffer
    114114  *     (in native endianness).
     
    161161 * the new address.
    162162 *
     163 * @see usb_drv_reserve_default_address
     164 * @see usb_drv_release_default_address
     165 * @see usb_drv_request_address
     166 * @see usb_drv_release_address
     167 * @see usb_drv_bind_address
     168 *
    163169 * @param pipe Control endpoint pipe (session must be already started).
    164170 * @param new_address New USB address to be set (in native endianness).
     
    522528                return EEMPTY;
    523529        }
    524         /* Subtract first 2 bytes (length and descriptor type). */
     530        /* Substract first 2 bytes (length and descriptor type). */
    525531        string_descriptor_size -= 2;
    526532
     
    542548        size_t i;
    543549        for (i = 0; i < langs_count; i++) {
    544                 /* Language code from the descriptor is in USB endianness. */
     550                /* Language code from the descriptor is in USB endianess. */
    545551                /* FIXME: is this really correct? */
    546552                uint16_t lang_code = (string_descriptor[2 + 2 * i + 1] << 8)
     
    563569 *
    564570 * @param[in] pipe Control endpoint pipe (session must be already started).
    565  * @param[in] index String index (in native endianness),
     571 * @param[in] index String index (in native endianess),
    566572 *      first index has number 1 (index from descriptors can be used directly).
    567  * @param[in] lang String language (in native endianness).
     573 * @param[in] lang String language (in native endianess).
    568574 * @param[out] string_ptr Where to store allocated string in native encoding.
    569575 * @return Error code.
     
    607613                goto leave;
    608614        }
    609         /* Subtract first 2 bytes (length and descriptor type). */
     615        /* Substract first 2 bytes (length and descriptor type). */
    610616        string_size -= 2;
    611617
  • uspace/lib/usb/src/usb.c

    r960bee9 rd4beec3  
    3131 */
    3232/** @file
    33  * Common USB functions.
     33 * @brief Base USB types.
    3434 */
    3535#include <usb/usb.h>
     
    3737
    3838
    39 /** String representation for USB transfer type.
    40  *
    41  * @param t Transfer type.
    42  * @return Transfer type as a string (in English).
    43  */
     39/** String representation for USB transfer type. */
    4440const char * usb_str_transfer_type(usb_transfer_type_t t)
    4541{
Note: See TracChangeset for help on using the changeset viewer.