Author: mjmartin Date: Thu May 12 12:58:07 2011 New Revision: 51683
URL: http://svn.reactos.org/svn/reactos?rev=51683&view=rev Log: [USBHUB_NEW] - Implement IOCTL_INTERNAL_USB_GET_PORT_STATUS. - Fixes to comments
Modified: branches/usb-bringup/drivers/usb/usbhub_new/fdo.c branches/usb-bringup/drivers/usb/usbhub_new/pdo.c branches/usb-bringup/drivers/usb/usbhub_new/usbhub.c branches/usb-bringup/drivers/usb/usbhub_new/usbhub.h
Modified: branches/usb-bringup/drivers/usb/usbhub_new/fdo.c URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbhub_n... ============================================================================== --- branches/usb-bringup/drivers/usb/usbhub_new/fdo.c [iso-8859-1] (original) +++ branches/usb-bringup/drivers/usb/usbhub_new/fdo.c [iso-8859-1] Thu May 12 12:58:07 2011 @@ -112,7 +112,7 @@ RtlZeroMemory(Urb, sizeof(URB));
// - // Create URB for getting Port Status + // Initialize URB for getting Port Status // UsbBuildVendorRequest(Urb, URB_FUNCTION_CLASS_OTHER, @@ -165,7 +165,7 @@ RtlZeroMemory(Urb, sizeof(URB));
// - // Create URB for Clearing Port Reset + // Initialize URB for Clearing Port Reset // UsbBuildVendorRequest(Urb, URB_FUNCTION_CLASS_OTHER, @@ -217,7 +217,7 @@ RtlZeroMemory(Urb, sizeof(URB));
// - // Create URB for Clearing Port Reset + // Initialize URB for Clearing Port Reset // UsbBuildVendorRequest(Urb, URB_FUNCTION_CLASS_OTHER, @@ -655,7 +655,7 @@ RtlZeroMemory(Urb, sizeof(URB));
// - // Create URB for getting device descriptor + // Initialize URB for getting device descriptor // UsbBuildGetDescriptorRequest(Urb, sizeof(Urb->UrbControlDescriptorRequest),
Modified: branches/usb-bringup/drivers/usb/usbhub_new/pdo.c URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbhub_n... ============================================================================== --- branches/usb-bringup/drivers/usb/usbhub_new/pdo.c [iso-8859-1] (original) +++ branches/usb-bringup/drivers/usb/usbhub_new/pdo.c [iso-8859-1] Thu May 12 12:58:07 2011 @@ -26,7 +26,7 @@ // Get the original Irp // OriginalIrp = (PIRP)Context; - + // // Update it to match what was returned for the IRP that was passed to RootHub // @@ -137,7 +137,15 @@
//DPRINT1("UsbhubInternalDeviceControlPdo(%x) called\n", DeviceObject);
+ // + // get current stack location + // Stack = IoGetCurrentIrpStackLocation(Irp); + ASSERT(Stack); + + // + // Set default status + // Status = Irp->IoStatus.Status;
ChildDeviceExtension = (PHUB_CHILDDEVICE_EXTENSION)DeviceObject->DeviceExtension; @@ -173,18 +181,13 @@ case IOCTL_INTERNAL_USB_SUBMIT_URB: { //DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_URB\n"); - // - // get current stack location - // - Stack = IoGetCurrentIrpStackLocation(Irp); - ASSERT(Stack);
// // Get the Urb // Urb = (PURB)Stack->Parameters.Others.Argument1; ASSERT(Urb); - + // // Set the real device handle // @@ -229,8 +232,12 @@ DPRINT1("Length %x\n", Urb->UrbBulkOrInterruptTransfer.TransferBufferLength); DPRINT1("UrbLink %x\n", Urb->UrbBulkOrInterruptTransfer.UrbLink); DPRINT1("hca %x\n", Urb->UrbBulkOrInterruptTransfer.hca); + if (Urb->UrbBulkOrInterruptTransfer.TransferFlags == USBD_SHORT_TRANSFER_OK) + { + } */ break; + } case URB_FUNCTION_CLASS_INTERFACE: DPRINT1("URB_FUNCTION_CLASS_INTERFACE\n"); @@ -255,8 +262,39 @@ DPRINT1("IOCTL_INTERNAL_USB_RESET_PORT\n"); break; case IOCTL_INTERNAL_USB_GET_PORT_STATUS: + { + PORT_STATUS_CHANGE PortStatus; + LONG PortId; + PUCHAR PortStatusBits; + + PortStatusBits = (PUCHAR)Stack->Parameters.Others.Argument1; + // + // USBD_PORT_ENABLED (bit 0) or USBD_PORT_CONNECTED (bit 1) + // DPRINT1("IOCTL_INTERNAL_USB_GET_PORT_STATUS\n"); - break; + DPRINT1("Arg1 %x\n", *PortStatusBits); + *PortStatusBits = 0; + if (Stack->Parameters.Others.Argument1) + { + for (PortId = 1; PortId <= HubDeviceExtension->UsbExtHubInfo.NumberOfPorts; PortId++) + { + Status = GetPortStatusAndChange(RootHubDeviceObject, PortId, &PortStatus); + if (NT_SUCCESS(Status)) + { + DPRINT1("Connect %x\n", ((PortStatus.Status & USB_PORT_STATUS_CONNECT) << 1) << ((PortId - 1) * 2)); + DPRINT1("Enable %x\n", ((PortStatus.Status & USB_PORT_STATUS_ENABLE) >> 1) << ((PortId - 1) * 2)); + *PortStatusBits += + ((PortStatus.Status & USB_PORT_STATUS_CONNECT) << 1) << ((PortId - 1) * 2) + + ((PortStatus.Status & USB_PORT_STATUS_ENABLE) >> 1) << ((PortId - 1) * 2); + + } + } + } + + DPRINT1("Arg1 %x\n", *PortStatusBits); + Status = STATUS_SUCCESS; + break; + } case IOCTL_INTERNAL_USB_ENABLE_PORT: DPRINT1("IOCTL_INTERNAL_USB_ENABLE_PORT\n"); break;
Modified: branches/usb-bringup/drivers/usb/usbhub_new/usbhub.c URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbhub_n... ============================================================================== --- branches/usb-bringup/drivers/usb/usbhub_new/usbhub.c [iso-8859-1] (original) +++ branches/usb-bringup/drivers/usb/usbhub_new/usbhub.c [iso-8859-1] Thu May 12 12:58:07 2011 @@ -9,8 +9,6 @@ * Johannes Anderwald (johannes.anderwald@reactos.org) */
- -//#define NDEBUG #include "usbhub.h"
NTSTATUS NTAPI @@ -61,7 +59,7 @@ PDEVICE_OBJECT DeviceObject; PHUB_DEVICE_EXTENSION HubDeviceExtension; NTSTATUS Status; - + DPRINT1("USBHUB: AddDevice\n"); // // Create the Device Object //
Modified: branches/usb-bringup/drivers/usb/usbhub_new/usbhub.h URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbhub_n... ============================================================================== --- branches/usb-bringup/drivers/usb/usbhub_new/usbhub.h [iso-8859-1] (original) +++ branches/usb-bringup/drivers/usb/usbhub_new/usbhub.h [iso-8859-1] Thu May 12 12:58:07 2011 @@ -158,7 +158,13 @@ VOID DumpConfigurationDescriptor( PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor); - + VOID DumpFullConfigurationDescriptor( PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor); + +NTSTATUS +GetPortStatusAndChange( + IN PDEVICE_OBJECT RootHubDeviceObject, + IN ULONG PortId, + OUT PPORT_STATUS_CHANGE StatusChange);