[USBHUB_NEW]

- Implement IOCTL_INTERNAL_USB_GET_PORT_STATUS.
- Fixes to comments




svn path=/branches/usb-bringup/; revision=51683
This commit is contained in:
Michael Martin 2011-05-12 12:58:07 +00:00
parent b0b03bfdd1
commit 8d98341ac8
4 changed files with 57 additions and 15 deletions

View file

@ -112,7 +112,7 @@ GetPortStatusAndChange(
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 @@ SetPortFeature(
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 @@ ClearPortFeature(
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 @@ GetUsbDeviceDescriptor(
RtlZeroMemory(Urb, sizeof(URB));
//
// Create URB for getting device descriptor
// Initialize URB for getting device descriptor
//
UsbBuildGetDescriptorRequest(Urb,
sizeof(Urb->UrbControlDescriptorRequest),

View file

@ -137,7 +137,15 @@ USBHUB_PdoHandleInternalDeviceControl(
//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,11 +181,6 @@ USBHUB_PdoHandleInternalDeviceControl(
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
@ -229,8 +232,12 @@ USBHUB_PdoHandleInternalDeviceControl(
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 @@ USBHUB_PdoHandleInternalDeviceControl(
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");
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;

View file

@ -9,8 +9,6 @@
* Johannes Anderwald (johannes.anderwald@reactos.org)
*/
//#define NDEBUG
#include "usbhub.h"
NTSTATUS NTAPI
@ -61,7 +59,7 @@ USBHUB_AddDevice(
PDEVICE_OBJECT DeviceObject;
PHUB_DEVICE_EXTENSION HubDeviceExtension;
NTSTATUS Status;
DPRINT1("USBHUB: AddDevice\n");
//
// Create the Device Object
//

View file

@ -162,3 +162,9 @@ DumpConfigurationDescriptor(
VOID
DumpFullConfigurationDescriptor(
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
NTSTATUS
GetPortStatusAndChange(
IN PDEVICE_OBJECT RootHubDeviceObject,
IN ULONG PortId,
OUT PPORT_STATUS_CHANGE StatusChange);