listusb: generate class code table from usb.ids, and use it

Change-Id: I43b79c5abc74306aba9a69991aeb5e110b2d790b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5737
Reviewed-by: Fredrik Holmqvist <[email protected]>
This commit is contained in:
Jérôme Duval
2022-10-10 21:28:37 +00:00
committed by waddlesplash
parent e6ce95c5ab
commit edeaa9c0c7
3 changed files with 127 additions and 180 deletions
+24
View File
@@ -12,6 +12,30 @@
#include "usbhdr.h"
static void
usb_get_class_info(uint8 usb_class_base_id, uint8 usb_class_sub_id, uint8 usb_class_proto_id,
char *classInfo, size_t size)
{
USB_CLASSCODETABLE *foundItem = NULL;
int i;
for (i = 0; i < (int)USB_CLASSCODETABLE_LEN; i++) {
if ((usb_class_base_id == UsbClassCodeTable[i].BaseClass)
&& (usb_class_sub_id == UsbClassCodeTable[i].SubClass)) {
foundItem = &UsbClassCodeTable[i];
if (usb_class_proto_id == UsbClassCodeTable[i].Protocol)
break;
}
}
if (foundItem) {
snprintf(classInfo, size, "%s (%s%s%s)", foundItem->BaseDesc, foundItem->SubDesc,
(foundItem->ProtocolDesc && strcmp("", foundItem->ProtocolDesc)) ? ", " : "",
foundItem->ProtocolDesc);
} else
snprintf(classInfo, size, "%s (%u:%u:%u)", "(Unknown)",
usb_class_base_id, usb_class_sub_id, usb_class_proto_id);
}
void
usb_get_vendor_info(uint16 vendorID, const char **vendorName)
{