Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

During runtime you can remove or re-enumerate USB Class drivers. Note that this interface is a non standard
API. Keith & Koep extended the OHCI driver with that interface to help customers with problems on different
USB devices with unspecified problems.

#define FILE_DEVICE_USB          0x0000B001
#define IOCTL_DISCONNECT_PORT    CTL_CODE(FILE_DEVICE_USB, 0x401, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_RECONNECT_PORT     CTL_CODE(FILE_DEVICE_USB, 0x402, METHOD_BUFFERED, FILE_ANY_ACCESS)


void Disconnect_USB_Port(int portno)   // 0,1 
{
  HANDLE hDeviceUSB = CreateFile( TEXT("HCD1:"), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 
  unsigned long ReEnumeratePorts = 1 << portno;  // 1 = Port 1  2 = Port 2  3=both
  DeviceIoControl( hDeviceUSB, IOCTL_DISCONNECT_PORT, &ReEnumeratePorts, sizeo(ReEnumeratePorts), NULL, 0, &returned, NULL);
  CloseHandle(hDeviceUSB);
}

void Reconnect_USB_Port(int portno)   // 0,1 
{
  HANDLE hDeviceUSB = CreateFile( TEXT("HCD1:"), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 
  unsigned long ReEnumeratePorts = 1 << portno;  // 1 = Port 1  2 = Port 2  3=both
  DeviceIoControl( hDeviceUSB, IOCTL_RECONNECT_PORT, &ReEnumeratePorts, sizeo(ReEnumeratePorts), NULL, 0, &returned, NULL);
  CloseHandle(hDeviceUSB);
}

  • No labels