Re-Enumerate

A short description of how to perform a Re-Enumeration.

Introduction

If any interface settings have been changed then a re-enumeration must be forced by calling RDevUsbcScClient::ReEnumerate(). A re-enumeration involves the device initiating a bus disconnection and re-connection.

Re-enumerate

ReEnumerate() is an asynchronous operation that completes when the controller is successfully configured by the host. Because it is not known if the operation has failed, set up a timer to complete after approximately 5 seconds. It can be assumed that if the operation has not completed in this time then it will not complete. When the request is completed status contains the result of the re-enumeration. See TRequestStatus.

TRequestStatus status;
gPort.ReEnumerate(status);
User::WaitForRequest(status);

If the re-enumeration has not completed within the expected time period then use RDevUsbcClient::ReEnumerateCancel() to cancel the request. Note: this function does not undo the re-enumeration.

If alternate interface settings have been set up enquire which interface has been selected following a re-enumeration by using RDevUsbcScClient::GetAlternateSetting().

After you have forced a re-enumeration you can use your USB class driver to Read Data from USB using Shared Chunks or Write Data to USB using Shared Chunks or if you wish to use the Buffer Interface Layer (recommended) then go to Using the BIL Interface.