diff USBLib/Windows/USB/UsbDevice.cs @ 62:edc41c861d96

Updates and cleanup in Windows USB enumeration code
author Ivo Smits <Ivo@UCIS.nl>
date Sun, 13 Oct 2013 02:47:08 +0200
parents 2b24666cd759
children 309c705d7460
line wrap: on
line diff
--- a/USBLib/Windows/USB/UsbDevice.cs	Sun Oct 13 00:48:28 2013 +0200
+++ b/USBLib/Windows/USB/UsbDevice.cs	Sun Oct 13 02:47:08 2013 +0200
@@ -39,9 +39,9 @@
 			int szRequest = Marshal.SizeOf(typeof(USB_DESCRIPTOR_REQUEST));
 			USB_DESCRIPTOR_REQUEST request = new USB_DESCRIPTOR_REQUEST();
 			request.ConnectionIndex = port;
-			request.SetupPacket.wValue = (ushort)((descriptorType << 8) + index);
-			request.SetupPacket.wIndex = (ushort)langId;
-			request.SetupPacket.wLength = (ushort)length;
+			request.SetupPacket.Value = (short)((descriptorType << 8) + index);
+			request.SetupPacket.Index = (short)langId;
+			request.SetupPacket.Length = (short)length;
 			int nBytes = length + szRequest;
 			Byte[] bigbuffer = new Byte[nBytes];
 			if (!Kernel32.DeviceIoControl(handle, UsbApi.IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, ref request, Marshal.SizeOf(typeof(USB_DESCRIPTOR_REQUEST)), bigbuffer, nBytes, out nBytes, IntPtr.Zero)) {
@@ -76,20 +76,23 @@
 		public String DevicePath { get; private set; }
 		public UInt32 AdapterNumber { get; private set; }
 		internal USB_NODE_CONNECTION_INFORMATION_EX NodeConnectionInfo { get; set; }
-		private USB_DEVICE_DESCRIPTOR DeviceDescriptor { get { return NodeConnectionInfo.DeviceDescriptor; } }
+		public UsbDeviceDescriptor DeviceDescriptor { get { return NodeConnectionInfo.DeviceDescriptor; } }
 
 		public bool IsHub { get { return NodeConnectionInfo.DeviceIsHub != 0; } }
 		public bool IsConnected { get { return NodeConnectionInfo.ConnectionStatus == USB_CONNECTION_STATUS.DeviceConnected; } }
 		public string Status { get { return NodeConnectionInfo.ConnectionStatus.ToString(); } }
 		public string Speed { get { return NodeConnectionInfo.Speed.ToString(); } }
+		public Byte CurrentConfigurationValue { get { return NodeConnectionInfo.CurrentConfigurationValue; } }
+		public UInt16 DeviceAddress { get { return NodeConnectionInfo.DeviceAddress; } }
+		public UInt32 NumberOfOpenPipes { get { return NodeConnectionInfo.NumberOfOpenPipes; } }
 
 		SafeFileHandle OpenHandle() {
 			return OpenHandle(DevicePath);
 		}
 
-		public int NumConfigurations { get { return DeviceDescriptor == null ? 0 : DeviceDescriptor.bNumConfigurations; } }
-		public int VendorID { get { return DeviceDescriptor == null ? 0 : DeviceDescriptor.idVendor; } }
-		public int ProductID { get { return DeviceDescriptor == null ? 0 : DeviceDescriptor.idProduct; } }
+		public int NumConfigurations { get { return DeviceDescriptor.NumConfigurations; } }
+		public int VendorID { get { return DeviceDescriptor.VendorID; } }
+		public int ProductID { get { return DeviceDescriptor.ProductID; } }
 
 		private String GetStringSafe(Byte id) {
 			if (id == 0) return null;
@@ -98,9 +101,9 @@
 			return s.Trim(' ', '\0');
 		}
 
-		public string Manufacturer { get { return DeviceDescriptor == null ? null : GetStringSafe(DeviceDescriptor.iManufacturer); } }
-		public string Product { get { return DeviceDescriptor == null ? null : GetStringSafe(DeviceDescriptor.iProduct); } }
-		public string SerialNumber { get { return DeviceDescriptor == null ? null : GetStringSafe(DeviceDescriptor.iSerialNumber); } }
+		public string Manufacturer { get { return GetStringSafe(DeviceDescriptor.ManufacturerStringID); } }
+		public string Product { get { return GetStringSafe(DeviceDescriptor.ProductStringID); } }
+		public string SerialNumber { get { return GetStringSafe(DeviceDescriptor.SerialNumberStringID); } }
 		public virtual string DriverKey { get { using (SafeFileHandle handle = OpenHandle(DevicePath)) return UsbHub.GetNodeConnectionDriverKey(handle, AdapterNumber); } }
 
 		public virtual string DeviceDescription { get { return DeviceNode == null ? null : DeviceNode.DeviceDescription; } }