Changeset c867a216 in mainline
- Timestamp:
- 2011-03-07T17:45:47Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f16a76b
- Parents:
- d4beec3 (diff), 3b271e3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 2 deleted
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
rd4beec3 rc867a216 77 77 ./uspace/dist/srv/* 78 78 ./uspace/drv/root/root 79 ./uspace/drv/ehci-hcd/ehci-hcd 79 80 ./uspace/drv/isa/isa 80 81 ./uspace/drv/ns8250/ns8250 -
uspace/drv/usbmid/main.c
rd4beec3 rc867a216 44 44 #include "usbmid.h" 45 45 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 */ 46 51 static int usbmid_add_device(ddf_dev_t *gen_dev) 47 52 { … … 86 91 } 87 92 93 /** USB MID driver ops. */ 88 94 static driver_ops_t mid_driver_ops = { 89 95 .add_device = usbmid_add_device, 90 96 }; 91 97 98 /** USB MID driver. */ 92 99 static driver_t mid_driver = { 93 100 .name = NAME, -
uspace/drv/usbmid/usbmid.c
rd4beec3 rc867a216 67 67 } 68 68 69 /** DDF interface of the child - interface function. */ 69 70 static usb_iface_t child_usb_iface = { 70 71 .get_hc_handle = usb_iface_get_hc_handle_hub_child_impl, … … 73 74 }; 74 75 75 76 /** Operations for children - interface functions. */ 76 77 static ddf_dev_ops_t child_device_ops = { 77 78 .interfaces[USB_DEV_IFACE] = &child_usb_iface 78 79 }; 79 80 81 /** Operations of the device itself. */ 80 82 static ddf_dev_ops_t mid_device_ops = { 81 83 .interfaces[USB_DEV_IFACE] = &usb_iface_hub_impl -
uspace/drv/usbmid/usbmid.h
rd4beec3 rc867a216 44 44 #define NAME "usbmid" 45 45 46 /** USB MID device container. */ 46 47 typedef struct { 47 48 /** Device container. */ … … 54 55 } usbmid_device_t; 55 56 57 58 /** Container for single interface in a MID device. */ 56 59 typedef struct { 57 60 /** Function container. */ -
uspace/drv/usbmouse/init.c
rd4beec3 rc867a216 101 101 102 102 static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); 103 /** Device ops for USB mouse. */ 103 104 static ddf_dev_ops_t mouse_ops = { 104 105 .default_handler = default_connection_handler … … 135 136 } 136 137 137 138 /** Create USB mouse device. 139 * 140 * The mouse device is stored into <code>dev->driver_data</code>. 141 * 142 * @param dev Generic device. 143 * @return Error code. 144 */ 138 145 int usb_mouse_create(ddf_dev_t *dev) 139 146 { -
uspace/drv/usbmouse/main.c
rd4beec3 rc867a216 39 39 #include <str_error.h> 40 40 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 */ 41 46 static int usbmouse_add_device(ddf_dev_t *dev) 42 47 { … … 63 68 } 64 69 70 /** USB mouse driver ops. */ 65 71 static driver_ops_t mouse_driver_ops = { 66 72 .add_device = usbmouse_add_device, 67 73 }; 68 74 75 /** USB mouse driver. */ 69 76 static driver_t mouse_driver = { 70 77 .name = NAME, … … 74 81 int main(int argc, char *argv[]) 75 82 { 76 usb_log_enable(USB_LOG_LEVEL_DEBUG 2, NAME);83 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 77 84 78 85 return ddf_driver_main(&mouse_driver); -
uspace/drv/usbmouse/mouse.c
rd4beec3 rc867a216 40 40 #include <ipc/mouse.h> 41 41 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 */ 42 50 int usb_mouse_polling_fibril(void *arg) 43 51 { -
uspace/drv/usbmouse/mouse.h
rd4beec3 rc867a216 43 43 #define NAME "usbmouse" 44 44 45 /** Container for USB mouse device. */ 45 46 typedef struct { 47 /** Generic device container. */ 46 48 ddf_dev_t *device; 49 /** Function representing the device. */ 47 50 ddf_fun_t *mouse_fun; 51 /** Representation of connection to the device. */ 48 52 usb_device_connection_t wire; 53 /** Default (zero) control pipe. */ 49 54 usb_endpoint_pipe_t ctrl_pipe; 55 /** Polling (in) pipe. */ 50 56 usb_endpoint_pipe_t poll_pipe; 57 /** Polling interval in microseconds. */ 51 58 suseconds_t poll_interval_us; 59 /** IPC phone to console (consumer). */ 52 60 int console_phone; 53 61 } usb_mouse_t; -
uspace/lib/usb/include/usb/classes/classes.h
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @brief USB device classes and subclasses.33 * USB device classes (generic constants and functions). 34 34 */ 35 35 #ifndef LIBUSB_CLASSES_H_ -
uspace/lib/usb/include/usb/debug.h
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @briefDebugging related functions.33 * Debugging related functions. 34 34 */ 35 35 #ifndef LIBUSB_DEBUG_H_ … … 39 39 #include <assert.h> 40 40 41 void usb_dprintf(const char *tag, int level, const char *format, ...);42 void usb_dprintf_enable(const char *tag, int level);43 44 41 void usb_dump_standard_descriptor(FILE *, const char *, const char *, 45 42 const uint8_t *, size_t); … … 47 44 /** Logging level. */ 48 45 typedef enum { 46 /** Fatal, unrecoverable, error. 47 * Such error prevents the driver from working at all. 48 */ 49 49 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 */ 50 55 USB_LOG_LEVEL_ERROR, 56 57 /** Warning. 58 * Problems from which the driver is able to recover gracefully. 59 */ 51 60 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 */ 52 69 USB_LOG_LEVEL_INFO, 70 71 /** Debugging message. */ 53 72 USB_LOG_LEVEL_DEBUG, 73 74 /** More detailed debugging message. */ 54 75 USB_LOG_LEVEL_DEBUG2, 76 77 /** Terminating constant for logging levels. */ 55 78 USB_LOG_LEVEL_MAX 56 79 } usb_log_level_t; … … 61 84 void usb_log_printf(usb_log_level_t, const char *, ...); 62 85 86 /** Log fatal error. */ 63 87 #define usb_log_fatal(format, ...) \ 64 88 usb_log_printf(USB_LOG_LEVEL_FATAL, format, ##__VA_ARGS__) 65 89 90 /** Log normal (recoverable) error. */ 66 91 #define usb_log_error(format, ...) \ 67 92 usb_log_printf(USB_LOG_LEVEL_ERROR, format, ##__VA_ARGS__) 68 93 94 /** Log warning. */ 69 95 #define usb_log_warning(format, ...) \ 70 96 usb_log_printf(USB_LOG_LEVEL_WARNING, format, ##__VA_ARGS__) 71 97 98 /** Log informational message. */ 72 99 #define usb_log_info(format, ...) \ 73 100 usb_log_printf(USB_LOG_LEVEL_INFO, format, ##__VA_ARGS__) 74 101 102 /** Log debugging message. */ 75 103 #define usb_log_debug(format, ...) \ 76 104 usb_log_printf(USB_LOG_LEVEL_DEBUG, format, ##__VA_ARGS__) 77 105 106 /** Log verbose debugging message. */ 78 107 #define usb_log_debug2(format, ...) \ 79 108 usb_log_printf(USB_LOG_LEVEL_DEBUG2, format, ##__VA_ARGS__) -
uspace/lib/usb/include/usb/descriptor.h
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @briefStandard USB descriptors.33 * Standard USB descriptors. 34 34 */ 35 35 #ifndef LIBUSB_DESCRIPTOR_H_ … … 83 83 /** Product descriptor index. */ 84 84 uint8_t str_product; 85 /** Device serial number des riptor index. */85 /** Device serial number descriptor index. */ 86 86 uint8_t str_serial_number; 87 87 /** Number of possible configurations. */ … … 167 167 } __attribute__ ((packed)) usb_standard_endpoint_descriptor_t; 168 168 169 170 /* TODO: string descriptors. */171 172 169 #endif 173 170 /** -
uspace/lib/usb/include/usb/dp.h
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @briefUSB descriptor parser.33 * USB descriptor parser. 34 34 */ 35 35 #ifndef LIBUSB_DP_H_ … … 40 40 #include <usb/descriptor.h> 41 41 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 */ 42 49 typedef struct { 50 /** Child descriptor id. */ 43 51 int child; 52 /** Parent descriptor id. */ 44 53 int parent; 45 54 } usb_dp_descriptor_nesting_t; … … 47 56 extern usb_dp_descriptor_nesting_t usb_dp_standard_descriptor_nesting[]; 48 57 58 /** Descriptor parser structure. */ 49 59 typedef struct { 60 /** Used descriptor nesting. */ 50 61 usb_dp_descriptor_nesting_t *nesting; 51 62 } usb_dp_parser_t; 52 63 64 /** Descriptor parser data. */ 53 65 typedef struct { 66 /** Data to be parsed. */ 54 67 uint8_t *data; 68 /** Size of input data in bytes. */ 55 69 size_t size; 70 /** Custom argument. */ 56 71 void *arg; 57 72 } usb_dp_parser_data_t; -
uspace/lib/usb/include/usb/hub.h
rd4beec3 rc867a216 32 32 /** @file 33 33 * Functions needed by hub drivers. 34 * 35 * For class specific requests, see usb/classes/hub.h. 34 36 */ 35 37 #ifndef LIBUSB_HUB_H_ -
uspace/lib/usb/include/usb/pipes.h
rd4beec3 rc867a216 43 43 #include <ddf/driver.h> 44 44 45 /** 46 * Abstraction of a physical connection to the device. 45 /** Abstraction of a physical connection to the device. 47 46 * This type is an abstraction of the USB wire that connects the host and 48 47 * the function (device). … … 55 54 } usb_device_connection_t; 56 55 57 /** 58 * Abstraction of a logical connection to USB device endpoint. 56 /** Abstraction of a logical connection to USB device endpoint. 59 57 * It encapsulates endpoint attributes (transfer type etc.) as well 60 58 * as information about currently running sessions. … … 111 109 /** Found descriptor fitting the description. */ 112 110 usb_standard_endpoint_descriptor_t *descriptor; 113 /** Interface the endpoint belongs to. */111 /** Interface descriptor the endpoint belongs to. */ 114 112 usb_standard_interface_descriptor_t *interface; 115 113 /** Whether the endpoint was actually found. */ -
uspace/lib/usb/include/usb/request.h
rd4beec3 rc867a216 72 72 union { 73 73 uint16_t value; 74 /* FIXME: add #ifdefs according to host endian ess */74 /* FIXME: add #ifdefs according to host endianness */ 75 75 struct { 76 76 uint8_t value_low; -
uspace/lib/usb/include/usb/usb.h
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @brief Base USB types.33 * Common USB types and functions. 34 34 */ 35 35 #ifndef LIBUSB_USB_H_ … … 121 121 } usb_target_t; 122 122 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 */ 123 129 static inline int usb_target_same(usb_target_t a, usb_target_t b) 124 130 { -
uspace/lib/usb/src/ddfiface.c
rd4beec3 rc867a216 88 88 IPC_M_USB_GET_HOST_CONTROLLER_HANDLE, &hc_handle); 89 89 90 async_hangup(parent_phone); 91 90 92 if (rc != EOK) { 91 93 return rc; -
uspace/lib/usb/src/debug.c
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @brief Debugging support.33 * Debugging and logging support. 34 34 */ 35 35 #include <adt/list.h> … … 40 40 #include <usb/debug.h> 41 41 42 /** Debugging tag. */43 typedef 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. */59 static LIST_INITIALIZE(tag_list);60 /** Mutex guard for the list of all tags. */61 static FIBRIL_MUTEX_INITIALIZE(tag_list_guard);62 63 42 /** Level of logging messages. */ 64 43 static usb_log_level_t log_level = USB_LOG_LEVEL_WARNING; 44 65 45 /** Prefix for logging messages. */ 66 46 static const char *log_prefix = "usb"; 47 67 48 /** Serialization mutex for logging functions. */ 68 49 static FIBRIL_MUTEX_INITIALIZE(log_serializer); 50 51 /** File where to store the log. */ 69 52 static FILE *log_stream = NULL; 70 53 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 */77 static 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 automatically111 * 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 */117 void 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 138 leave: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 messages145 * with level lower or equal to <i>n</i> will be printed.146 *147 * @param tagname Tag name.148 * @param level Enabled level.149 */150 void 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 161 leave:162 fibril_mutex_unlock(&tag_list_guard);163 }164 54 165 55 /** Enable logging. … … 182 72 } 183 73 184 74 /** Get log level name prefix. 75 * 76 * @param level Log level. 77 * @return String prefix for the message. 78 */ 185 79 static const char *log_level_name(usb_log_level_t level) 186 80 { … … 256 150 /* string + terminator + number width (enough for 4GB)*/ 257 151 #define REMAINDER_STR_LEN (5 + 1 + 10) 152 153 /** How many bytes to group together. */ 258 154 #define BUFFER_DUMP_GROUP_SIZE 4 155 156 /** Size of the string for buffer dumps. */ 259 157 #define BUFFER_DUMP_LEN 240 /* Ought to be enough for everybody ;-). */ 158 159 /** Fibril local storage for the dumped buffer. */ 260 160 static fibril_local char buffer_dump[BUFFER_DUMP_LEN]; 261 161 … … 265 165 * in a static fibril local string. 266 166 * That means that you do not have to deallocate the string (actually, you 267 * can not do that) and you do not have to save it againsconcurrent167 * can not do that) and you do not have to guard it against concurrent 268 168 * calls to it. 269 169 * The only limitation is that each call rewrites the buffer again. -
uspace/lib/usb/src/dp.c
rd4beec3 rc867a216 32 32 /** 33 33 * @file 34 * @brief USB descriptor parser (implementation). 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. 35 42 */ 36 43 #include <stdio.h> -
uspace/lib/usb/src/dump.c
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @briefDescriptor dumping.33 * Descriptor dumping. 34 34 */ 35 35 #include <adt/list.h> … … 43 43 #include <usb/classes/hid.h> 44 44 45 /** Mapping between descriptor id and dumping function. */ 45 46 typedef struct { 47 /** Descriptor id. */ 46 48 int id; 49 /** Dumping function. */ 47 50 void (*dump)(FILE *, const char *, const char *, 48 51 const uint8_t *, size_t); … … 66 69 const uint8_t *, size_t); 67 70 71 /** Descriptor dumpers mapping. */ 68 72 static descriptor_dump_t descriptor_dumpers[] = { 69 73 { USB_DESCTYPE_DEVICE, usb_dump_descriptor_device }, … … 273 277 const uint8_t *descriptor, size_t descriptor_length) 274 278 { 279 /* TODO */ 275 280 } 276 281 … … 279 284 const uint8_t *descriptor, size_t descriptor_length) 280 285 { 286 /* TODO */ 281 287 } 282 288 -
uspace/lib/usb/src/hub.c
rd4beec3 rc867a216 144 144 /** Wrapper for registering attached device to the hub. 145 145 * 146 * The @p enable_port function is expected to enable si ngalling on given146 * The @p enable_port function is expected to enable signaling on given 147 147 * port. 148 148 * The two arguments to it can have arbitrary meaning … … 152 152 * 153 153 * If the @p enable_port fails (i.e. does not return EOK), the device 154 * addition is cancel led.154 * addition is canceled. 155 155 * The return value is then returned (it is good idea to use different 156 156 * error codes than those listed as return codes by this function itself). … … 159 159 * @param connection Opened connection to host controller. 160 160 * @param dev_speed New device speed. 161 * @param enable_port Function for enabling signal ling through the port the161 * @param enable_port Function for enabling signaling through the port the 162 162 * device is attached to. 163 163 * @param port_no Port number (passed through to @p enable_port). … … 201 201 202 202 /* 203 * Enable the port (i.e. allow signal ling through this port).203 * Enable the port (i.e. allow signaling through this port). 204 204 */ 205 205 rc = enable_port(port_no, arg); -
uspace/lib/usb/src/pipesio.c
rd4beec3 rc867a216 115 115 116 116 if (data_request_rc != EOK) { 117 return (int) data_request_rc; 117 /* Prefer the return code of the opening request. */ 118 if (opening_request_rc != EOK) { 119 return (int) opening_request_rc; 120 } else { 121 return (int) data_request_rc; 122 } 118 123 } 119 124 if (opening_request_rc != EOK) { … … 331 336 332 337 if (data_request_rc != EOK) { 333 return (int) data_request_rc; 338 /* Prefer the return code of the opening request. */ 339 if (opening_request_rc != EOK) { 340 return (int) opening_request_rc; 341 } else { 342 return (int) data_request_rc; 343 } 334 344 } 335 345 if (opening_request_rc != EOK) { -
uspace/lib/usb/src/recognise.c
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @brief Functions for recognising kindof attached devices.33 * Functions for recognition of attached devices. 34 34 */ 35 35 #include <sys/types.h> … … 44 44 #include <assert.h> 45 45 46 /** Index to append after device name for uniqueness. */ 46 47 static size_t device_name_index = 0; 48 /** Mutex guard for device_name_index. */ 47 49 static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex); 48 50 51 /** DDF operations of child devices. */ 49 52 ddf_dev_ops_t child_ops = { 50 53 .interfaces[USB_DEV_IFACE] = &usb_iface_hub_child_impl 51 54 }; 52 55 56 /** Get integer part from BCD coded number. */ 53 57 #define BCD_INT(a) (((unsigned int)(a)) / 256) 58 /** Get fraction part from BCD coded number (as an integer, no less). */ 54 59 #define BCD_FRAC(a) (((unsigned int)(a)) % 256) 55 60 61 /** Format for BCD coded number to be used in printf. */ 56 62 #define BCD_FMT "%x.%x" 63 /** Arguments to printf for BCD coded number. */ 57 64 #define BCD_ARGS(a) BCD_INT((a)), BCD_FRAC((a)) 58 65 … … 113 120 } 114 121 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 */ 115 129 #define ADD_MATCHID_OR_RETURN(match_ids, score, format, ...) \ 116 130 do { \ -
uspace/lib/usb/src/request.c
rd4beec3 rc867a216 110 110 * (must be in USB endianness). 111 111 * @param data Buffer where to store data accepted during the DATA stage. 112 * (they will come in USB endian ess).112 * (they will come in USB endianness). 113 113 * @param data_size Size of the @p data buffer 114 114 * (in native endianness). … … 161 161 * the new address. 162 162 * 163 * @see usb_drv_reserve_default_address164 * @see usb_drv_release_default_address165 * @see usb_drv_request_address166 * @see usb_drv_release_address167 * @see usb_drv_bind_address168 *169 163 * @param pipe Control endpoint pipe (session must be already started). 170 164 * @param new_address New USB address to be set (in native endianness). … … 528 522 return EEMPTY; 529 523 } 530 /* Sub stract first 2 bytes (length and descriptor type). */524 /* Subtract first 2 bytes (length and descriptor type). */ 531 525 string_descriptor_size -= 2; 532 526 … … 548 542 size_t i; 549 543 for (i = 0; i < langs_count; i++) { 550 /* Language code from the descriptor is in USB endian ess. */544 /* Language code from the descriptor is in USB endianness. */ 551 545 /* FIXME: is this really correct? */ 552 546 uint16_t lang_code = (string_descriptor[2 + 2 * i + 1] << 8) … … 569 563 * 570 564 * @param[in] pipe Control endpoint pipe (session must be already started). 571 * @param[in] index String index (in native endian ess),565 * @param[in] index String index (in native endianness), 572 566 * first index has number 1 (index from descriptors can be used directly). 573 * @param[in] lang String language (in native endian ess).567 * @param[in] lang String language (in native endianness). 574 568 * @param[out] string_ptr Where to store allocated string in native encoding. 575 569 * @return Error code. … … 613 607 goto leave; 614 608 } 615 /* Sub stract first 2 bytes (length and descriptor type). */609 /* Subtract first 2 bytes (length and descriptor type). */ 616 610 string_size -= 2; 617 611 -
uspace/lib/usb/src/usb.c
rd4beec3 rc867a216 31 31 */ 32 32 /** @file 33 * @brief Base USB types.33 * Common USB functions. 34 34 */ 35 35 #include <usb/usb.h> … … 37 37 38 38 39 /** String representation for USB transfer type. */ 39 /** String representation for USB transfer type. 40 * 41 * @param t Transfer type. 42 * @return Transfer type as a string (in English). 43 */ 40 44 const char * usb_str_transfer_type(usb_transfer_type_t t) 41 45 {
Note:
See TracChangeset
for help on using the changeset viewer.