Changes in uspace/app/usbinfo/dump.c [5ccb15c:03e02248] in mainline
- File:
-
- 1 edited
-
uspace/app/usbinfo/dump.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/usbinfo/dump.c
r5ccb15c r03e02248 45 45 46 46 #include "usbinfo.h" 47 #include <usb/dp.h>48 47 49 48 #define INDENT " " … … 126 125 } 127 126 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; break142 _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 _TYPE152 }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_NESTING191 };192 193 static usb_dp_parser_t parser = {194 .nesting = descriptor_nesting195 };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 = NULL203 };204 205 dump_tree(&parser, &data);206 }207 127 208 128 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.
