private static UsbStdSetupPacket GetPartialDescriptorRequest() { // request 8 bytes initially, to find out the length of the descriptor var package = new UsbStdSetupPacket { bmRequestType = (byte)(UsbConstants.UsbSetupDataStageIn | UsbConstants.UsbReqRecipientDevice | UsbConstants.UsbReqTypeStandard), bRequest = 6, // GET_DESCRIPTOR wLength = 8, wIndex = 0, wValue = 1 << 8 // Device }; return(package); }
private string GetStringDescriptor(ushort stringDescriptorIndex) { var packet = new UsbStdSetupPacket { bmRequestType = 0x80, bRequest = 6, // GET_DESCRIPTOR wValue = (ushort)((3 << 8) + stringDescriptorIndex), // 3 => STRING wIndex = 0x0409, wLength = 256 }; var buffer = _usbControlPipe.ControlTransferIn(packet.bmRequestType, packet.bRequest, packet.wValue, packet.wIndex, packet.wLength); // this is required due to an issue in WinUSB.NET 1.0.3; // should be fixed in WinUSB.NET 2.0.0 var realLength = Math.Max(Math.Min(buffer[0], buffer.Length) - 2, 0); return(Encoding.Unicode.GetString(buffer, 2, realLength)); }