Changes in / [8426912a:d450964] in mainline
- Location:
- uspace
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/usbinfo/dump.c
r8426912a rd450964 45 45 46 46 #include "usbinfo.h" 47 #include <usb/dp.h> 47 48 48 49 #define INDENT " " … … 125 126 } 126 127 128 static void dump_tree_descriptor(uint8_t *descriptor, size_t depth) 129 { 130 if (descriptor == NULL) { 131 return; 132 } 133 while (depth > 0) { 134 printf(" "); 135 depth--; 136 } 137 int type = (int) *(descriptor + 1); 138 const char *name = "unknown"; 139 switch (type) { 140 #define _TYPE(descriptor_type) \ 141 case USB_DESCTYPE_##descriptor_type: name = #descriptor_type; break 142 _TYPE(DEVICE); 143 _TYPE(CONFIGURATION); 144 _TYPE(STRING); 145 _TYPE(INTERFACE); 146 _TYPE(ENDPOINT); 147 _TYPE(HID); 148 _TYPE(HID_REPORT); 149 _TYPE(HID_PHYSICAL); 150 _TYPE(HUB); 151 #undef _TYPE 152 } 153 printf("0x%02x (%s)\n", type, name); 154 } 155 156 static void dump_tree_internal(usb_dp_parser_t *parser, usb_dp_parser_data_t *data, 157 uint8_t *root, size_t depth) 158 { 159 if (root == NULL) { 160 return; 161 } 162 dump_tree_descriptor(root, depth); 163 uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root); 164 do { 165 dump_tree_internal(parser, data, child, depth + 1); 166 child = usb_dp_get_sibling_descriptor(parser, data, root, child); 167 } while (child != NULL); 168 } 169 170 static void dump_tree(usb_dp_parser_t *parser, usb_dp_parser_data_t *data) 171 { 172 uint8_t *ptr = data->data; 173 printf("Descriptor tree:\n"); 174 dump_tree_internal(parser, data, ptr, 1); 175 } 176 177 #define NESTING(parentname, childname) \ 178 { \ 179 .child = USB_DESCTYPE_##childname, \ 180 .parent = USB_DESCTYPE_##parentname, \ 181 } 182 #define LAST_NESTING { -1, -1 } 183 184 static usb_dp_descriptor_nesting_t descriptor_nesting[] = { 185 NESTING(CONFIGURATION, INTERFACE), 186 NESTING(INTERFACE, ENDPOINT), 187 NESTING(INTERFACE, HUB), 188 NESTING(INTERFACE, HID), 189 NESTING(HID, HID_REPORT), 190 LAST_NESTING 191 }; 192 193 static usb_dp_parser_t parser = { 194 .nesting = descriptor_nesting 195 }; 196 197 void dump_descriptor_tree(uint8_t *descriptors, size_t length) 198 { 199 usb_dp_parser_data_t data = { 200 .data = descriptors, 201 .size = length, 202 .arg = NULL 203 }; 204 205 dump_tree(&parser, &data); 206 } 127 207 128 208 /** @} -
uspace/app/usbinfo/info.c
r8426912a rd450964 112 112 full_config_descriptor, config_descriptor.total_length); 113 113 114 dump_descriptor_tree(full_config_descriptor, 115 config_descriptor.total_length); 116 114 117 return EOK; 115 118 } -
uspace/app/usbinfo/usbinfo.h
r8426912a rd450964 50 50 usb_standard_configuration_descriptor_t *); 51 51 int dump_device(int, usb_address_t); 52 void dump_descriptor_tree(uint8_t *, size_t); 52 53 53 54 static inline void internal_error(int err) -
uspace/lib/usb/Makefile
r8426912a rd450964 36 36 src/class.c \ 37 37 src/debug.c \ 38 src/dp.c \ 38 39 src/drvpsync.c \ 39 40 src/hcdhubd.c \ -
uspace/lib/usb/src/recognise.c
r8426912a rd450964 346 346 usb_address_t address, devman_handle_t *child_handle) 347 347 { 348 static size_t device_name_index = 0; 349 348 350 device_t *child = NULL; 349 351 char *child_name = NULL; … … 357 359 358 360 /* 359 * TODO: some better child naming 360 */ 361 rc = asprintf(&child_name, "usb%p", child); 361 * TODO: Once the device driver framework support persistent 362 * naming etc., something more descriptive could be created. 363 */ 364 rc = asprintf(&child_name, "usbdev%02zu", device_name_index); 362 365 if (rc < 0) { 363 366 goto failure; … … 381 384 } 382 385 386 device_name_index++; 387 383 388 return EOK; 384 389
Note:
See TracChangeset
for help on using the changeset viewer.