コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }