comparison USBLib/Communication/USBIO/USBIODevice.cs @ 44:5a2b51b0d71b

USBLib: Fixed initialization of multi-interface USBIO devices
author Ivo Smits <Ivo@UCIS.nl>
date Wed, 12 Jun 2013 23:08:48 +0200
parents a9c4fed19e99
children 053cc617af54
comparison
equal deleted inserted replaced
43:29cf42a12c34 44:5a2b51b0d71b
103 } 103 }
104 104
105 public override Byte Configuration { 105 public override Byte Configuration {
106 get { return base.Configuration; } 106 get { return base.Configuration; }
107 set { 107 set {
108 if (value == Configuration) return;
109 IList<LibUsbDotNet.Info.UsbConfigInfo> configs = (new LibUsbDotNet.UsbDevice(this)).Configs; 108 IList<LibUsbDotNet.Info.UsbConfigInfo> configs = (new LibUsbDotNet.UsbDevice(this)).Configs;
110 for (int i = 0; i < configs.Count; i++) { 109 for (int i = 0; i < configs.Count; i++) {
111 LibUsbDotNet.Info.UsbConfigInfo config = configs[i]; 110 LibUsbDotNet.Info.UsbConfigInfo config = configs[i];
112 if (config.Descriptor.ConfigID == value) { 111 if (config.Descriptor.ConfigID == value) {
113 unsafe { 112 unsafe {
117 for (int j = 0; j < req.NbOfInterfaces; j++) { 116 for (int j = 0; j < req.NbOfInterfaces; j++) {
118 LibUsbDotNet.Info.UsbInterfaceInfo intf = config.InterfaceInfoList[j]; 117 LibUsbDotNet.Info.UsbInterfaceInfo intf = config.InterfaceInfoList[j];
119 *((USBIO_INTERFACE_SETTING*)(req.InterfaceList + sizeof(USBIO_INTERFACE_SETTING) * j)) = 118 *((USBIO_INTERFACE_SETTING*)(req.InterfaceList + sizeof(USBIO_INTERFACE_SETTING) * j)) =
120 new USBIO_INTERFACE_SETTING() { InterfaceIndex = intf.Descriptor.InterfaceID, AlternateSettingIndex = 0, MaximumTransferSize = UInt16.MaxValue }; 119 new USBIO_INTERFACE_SETTING() { InterfaceIndex = intf.Descriptor.InterfaceID, AlternateSettingIndex = 0, MaximumTransferSize = UInt16.MaxValue };
121 } 120 }
122 DeviceIoControl(DeviceHandle, IOCTL_USBIO_SET_CONFIGURATION, (IntPtr)(&req), sizeof(USBIO_SET_CONFIGURATION), IntPtr.Zero, 0); 121 try {
122 DeviceIoControl(DeviceHandle, IOCTL_USBIO_SET_CONFIGURATION, (IntPtr)(&req), sizeof(USBIO_SET_CONFIGURATION), IntPtr.Zero, 0);
123 } catch (Win32Exception ex) {
124 if (ex.NativeErrorCode == unchecked((int)0xE0001005L)) return;
125 throw;
126 }
123 } 127 }
124 return; 128 return;
125 } 129 }
126 } 130 }
127 throw new InvalidOperationException("Requested configuration ID not found"); 131 throw new InvalidOperationException("Requested configuration ID not found");