public static unsafe UsbInterfaceInfo FromUsbInterfaceDescriptor(LibUsb.UsbDevice device, InterfaceDescriptor descriptor) { Debug.Assert(descriptor.DescriptorType == (int)DescriptorType.Interface, "A config descriptor was expected"); UsbInterfaceInfo value = new UsbInterfaceInfo(); value.AlternateSetting = descriptor.AlternateSetting; var endpoints = (EndpointDescriptor *)descriptor.Endpoint; for (int i = 0; i < descriptor.NumEndpoints; i++) { if (endpoints[i].DescriptorType != 0) { value.endpoints.Add(UsbEndpointInfo.FromUsbEndpointDescriptor(endpoints[i])); } } value.RawDescriptors = new byte[descriptor.ExtraLength]; if (descriptor.ExtraLength > 0) { Span <byte> extra = new Span <byte>(descriptor.Extra, descriptor.ExtraLength); extra.CopyTo(value.RawDescriptors); } value.Interface = device.GetStringDescriptor(descriptor.Interface, failSilently: true); value.Class = (ClassCode)descriptor.InterfaceClass; value.Number = descriptor.InterfaceNumber; value.Protocol = descriptor.InterfaceProtocol; value.SubClass = descriptor.InterfaceSubClass; return(value); }
public static UsbDeviceInfo FromUsbDeviceDescriptor(LibUsb.UsbDevice device, DeviceDescriptor descriptor) { Debug.Assert(descriptor.DescriptorType == (int)DescriptorType.Device, "A config descriptor was expected"); var value = new UsbDeviceInfo(); value.Device = descriptor.Device; value.DeviceClass = descriptor.DeviceClass; value.DeviceProtocol = descriptor.DeviceProtocol; value.DeviceSubClass = descriptor.DeviceSubClass; value.ProductId = descriptor.IdProduct; value.VendorId = descriptor.IdVendor; value.Manufacturer = device.GetStringDescriptor(descriptor.Manufacturer, failSilently: true); value.MaxPacketSize0 = descriptor.MaxPacketSize0; for (byte i = 0; i < descriptor.NumConfigurations; i++) { if (device.TryGetConfigDescriptor(i, out var configDescriptor)) { value.configurations.Add(configDescriptor); } } value.Product = device.GetStringDescriptor(descriptor.Product, failSilently: true); value.SerialNumber = device.GetStringDescriptor(descriptor.SerialNumber, failSilently: true); value.Usb = descriptor.USB; return(value); }
public static unsafe Collection <UsbInterfaceInfo> FromUsbInterface(LibUsb.UsbDevice device, Interface @interface) { var interfaces = (InterfaceDescriptor *)@interface.Altsetting; Collection <UsbInterfaceInfo> value = new Collection <UsbInterfaceInfo>(); for (int i = 0; i < @interface.NumAltsetting; i++) { value.Add(FromUsbInterfaceDescriptor(device, interfaces[i])); } return(value); }