Mercurial > hg > ucis.core
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"); |