24 { &CollectingDescriptors,
"ReadingConfigDescriptor", 0,
34 {
NULL,
"RemainingDescriptors", 0,
38 { &CollectingDescriptors,
"ReadingBos", 0,
42 { &CollectingDescriptors,
"ReadingMsOs", 0,
46 { &CollectingDescriptors,
"ReadingLanguages", 0,
50 { &CollectingDescriptors,
"ReadingProductName", 0,
54 { &CollectingDescriptors,
"ReadingQualifier", 0,
65 case DsmEvent::PortDetached:
66 case DsmEvent::HubSuspending:
67 case DsmEvent::HubStopping:
94 case DsmEvent::TransferFailed:
95 return EndWith(DsmEvent::Failed);
97 case DsmEvent::TransferDone:
99 return EndWith(DsmEvent::Failed);
113 return EndWith(DsmEvent::Failed);
134 case DsmEvent::TransferDone:
137 case DsmEvent::TransferFailed:
138 return EndWith(DsmEvent::Failed);
169 case DsmEvent::TransferFailed:
170 return EndWith(DsmEvent::Failed);
172 case DsmEvent::TransferDone:
180 return EndWith(DsmEvent::Failed);
201 case DsmEvent::Failed:
202 case DsmEvent::Succeeded:
203 case DsmEvent::HubStopping:
204 case DsmEvent::HubSuspending:
205 case DsmEvent::PortDetached:
230 case DsmEvent::Succeeded:
233 case DsmEvent::Failed:
234 return EndWith(DsmEvent::Failed);
245 return EndWith(DsmEvent::Succeeded);
257 case DsmEvent::TransferDone:
267 case DsmEvent::TransferFailed:
280 return EndWith(DsmEvent::Succeeded);
282 return EndWith(DsmEvent::Failed);
291 case DsmEvent::TransferDone:
294 case DsmEvent::TransferFailed:
323 case DsmEvent::TransferDone:
326 case DsmEvent::TransferFailed:
355 case DsmEvent::TransferDone:
361 case DsmEvent::TransferFailed:
387 case DsmEvent::TransferDone:
393 case DsmEvent::TransferFailed:
422 return EndWith(DsmEvent::Succeeded);
431 case DsmEvent::TransferDone:
434 case DsmEvent::TransferFailed:
446 return EndWith(DsmEvent::Succeeded);
458 case DsmEvent::TransferDone:
462 case DsmEvent::TransferFailed:
476 case DsmEvent::TransferDone:
478 return EndWith(DsmEvent::Failed);
483 case DsmEvent::TransferFailed:
484 return EndWith(DsmEvent::Failed);
495 return EndWith(DsmEvent::Failed);
508 case DsmEvent::TransferDone:
515 case DsmEvent::TransferFailed:
516 return EndWith(DsmEvent::Failed);
529 case DsmEvent::TransferDone:
532 case DsmEvent::TransferFailed:
533 return EndWith(DsmEvent::Failed);
544 return EndWith(DsmEvent::Failed);
547 return EndWith(DsmEvent::Succeeded);
559 case DsmEvent::TransferDone:
561 return EndWith(DsmEvent::Failed);
569 case DsmEvent::TransferFailed:
570 return EndWith(DsmEvent::Failed);
583 case DsmEvent::TransferDone:
586 case DsmEvent::TransferFailed:
587 return EndWith(DsmEvent::Failed);
598 return EndWith(DsmEvent::Failed);
617 case DsmEvent::Succeeded:
623 case DsmEvent::Failed:
624 return EndWith(DsmEvent::Failed);
649 case DsmEvent::TransferFailed:
652 case DsmEvent::TransferDone:
696 case DsmEvent::TransferFailed:
699 case DsmEvent::TransferDone:
716 return (this->*GoOn)();
718 return EndWith(DsmEvent::Failed);
739 case DsmEvent::TransferDone:
746 case DsmEvent::TransferFailed:
760 case DsmEvent::TransferDone:
766 case DsmEvent::TransferFailed:
783 return EndWith(DsmEvent::Succeeded);
792 case DsmEvent::TransferDone:
799 case DsmEvent::TransferFailed:
813 case DsmEvent::TransferDone:
815 return EndWith(DsmEvent::Succeeded);
819 case DsmEvent::TransferFailed:
837 return EndWith(DsmEvent::Succeeded);
855 case DsmEvent::TransferFailed:
858 case DsmEvent::TransferDone:
878 return EndWith(DsmEvent::Failed);
894 case DsmEvent::TransferDone:
900 case DsmEvent::TransferFailed:
917 return EndWith(DsmEvent::Succeeded);
926 case DsmEvent::Failed:
927 case DsmEvent::FailEnumeration:
928 return EndWith(DsmEvent::Failed);
930 case DsmEvent::Succeeded:
931 return EndWith(DsmEvent::Succeeded);
945 case DsmEvent::TransferDone:
947 return EndWith(DsmEvent::Succeeded);
950 return EndWith(DsmEvent::Succeeded);
952 return EndWith(DsmEvent::FailEnumeration);
954 case DsmEvent::TransferFailed:
955 return EndWith(DsmEvent::Succeeded);
978 if ((
Event != DsmEvent::TransferDone) && (
Event != DsmEvent::TransferFailed))
999 case DsmEvent::TransferDone:
1000 case DsmEvent::TransferStalled:
1003 case DsmEvent::TransferFailed:
1004 return EndWith(DsmEvent::Failed);
1017 return EndWith(DsmEvent::Succeeded);
1026 case DsmEvent::TransferFailed:
1027 return EndWith(DsmEvent::Failed);
1029 case DsmEvent::TransferDone:
1030 case DsmEvent::TransferStalled:
1031 return EndWith(DsmEvent::Succeeded);
SM_RESULT MsOsContainerRead(_In_ DsmEvent Event)
SM_RESULT AltBosValidate()
BOOLEAN QueryRegistryValues()
BOOLEAN BosQuerySkipped()
SM_RESULT DescriptorsAltEnumSent(_In_ DsmEvent Event)
SM_RESULT MsOsMarkUnsupported()
VOID ReadFullConfigDescriptor()
BOOLEAN MsOsQueryWanted()
static const State Requesting
SM_RESULT EnterDisablingSuperSpeed()
BOOLEAN MsOsDescriptorValid()
VOID ReadBillboardString()
SM_RESULT MsOsNoContainerId()
SM_RESULT MsOsRead(_In_ DsmEvent Event)
VOID SendAltEnumCommand()
SM_RESULT LinkLatencyTolerance()
BOOLEAN IgnoreDescriptorError()
SM_RESULT BosRead(_In_ DsmEvent Event)
SM_RESULT AltConfigRead(_In_ DsmEvent Event)
SM_RESULT AltBosRead(_In_ DsmEvent Event)
SM_RESULT OnReadingBos(_In_ DsmEvent Event)
BOOLEAN ProductNameValid()
SM_RESULT EnterReadingDescriptors()
SM_RESULT MsOsStoreVendorCode()
static const State ReadingDeviceDescriptor
SM_RESULT OnReadingLanguages(_In_ DsmEvent Event)
VOID StoreMsOsVendorCode()
SM_RESULT EnterRemainingDescriptors()
SM_RESULT OnReadingProductName(_In_ DsmEvent Event)
BOOLEAN AltEnumNeededAfterBos()
BOOLEAN AltModeStringWanted()
BOOLEAN SerialNumberValid()
SM_RESULT AltQueryRegistry()
BOOLEAN BillboardStringWanted()
static const State ReadingConfigDescriptor
BOOLEAN ContainerIdKnown()
SM_RESULT OnReadingDeviceDescriptor(_In_ DsmEvent Event)
VOID ReadMsOsDescriptor()
BOOLEAN ConfigLongerThanRead()
VOID ReadExtendedConfig()
SM_RESULT EnterReadingConfigDescriptor()
SM_RESULT EnterReadingQualifier()
static const State ReadingBos
static const State RequestingYielding
VOID RequestSuperSpeedDisable()
BOOLEAN ContainerIdHeaderValid()
BOOLEAN KindWithin(_In_ ULONG Allowed)
A device with no version or speed known yet passes for any version or speed.
SM_RESULT MsOsContainerHeaderRead(_In_ DsmEvent Event)
SM_RESULT LinkSelSet(_In_ DsmEvent Event)
SM_RESULT BosFeaturesSent(_In_ DsmEvent Event)
SM_RESULT AltConfigHeaderRead(_In_ DsmEvent Event)
VOID ReadConfigDescriptorHeader()
SM_RESULT EndWith(_In_ DsmEvent Result)
SM_RESULT CancelTransferAndEnd(_In_ DsmEvent Event)
BOOLEAN SerialNumberIndexZero()
SM_RESULT MsOsSerialRead(_In_ DsmEvent Event)
SM_RESULT BosAltModeRead(_In_ DsmEvent Event)
SM_RESULT MsOsContainerId()
BOOLEAN MsOsExtendedConfigSupported()
SM_RESULT CallStep(_In_ DSM_THEN Then)
SM_RESULT QualifierRead(_In_ DsmEvent Event)
BOOLEAN ProductStringIndexZero()
static const State ReadingMsOs
SM_RESULT OnReadingQualifier(_In_ DsmEvent Event)
SM_RESULT MsOsExtendedConfig()
BOOLEAN IsochDelaySkipped()
SM_RESULT AltDeviceDescriptorRead(_In_ DsmEvent Event)
SM_RESULT MsOsExtendedRead(_In_ DsmEvent Event)
SM_RESULT EnterReadingMsOs()
static const State ReadingLanguages
SM_RESULT BosMsOs20Validate()
BOOLEAN m_ConfigFullLength
SM_RESULT BosBillboardRead(_In_ DsmEvent Event)
BOOLEAN ExtendedConfigHeaderValid()
VOID ReadDeviceDescriptor()
static const State ReadingProductName
BOOLEAN DualRoleSupported()
BOOLEAN ProductNameWanted()
VOID ReadExtendedConfigHeader()
SM_RESULT OnReadingMsOs(_In_ DsmEvent Event)
VOID MarkContainerIdUnsupported()
SM_RESULT EnterReadingLanguages()
BOOLEAN AltEnumNeededInEnum()
SM_RESULT LinkExitLatency()
SM_RESULT DescriptorsQueryRegistry()
SM_RESULT LinkIsochDelaySet(_In_ DsmEvent Event)
static const State DisablingSuperSpeed
SM_RESULT EnterReadingBos()
SM_RESULT MsOsExtendedHeaderRead(_In_ DsmEvent Event)
SM_RESULT EnterReadingProductName()
static const State ReadingQualifier
static const State CollectingDescriptors
SM_RESULT OnReadingConfigDescriptor(_In_ DsmEvent Event)
BOOLEAN BillboardStringValid()
SM_RESULT AtPassive(_In_ DSM_THEN Then)
BOOLEAN ExtendedConfigValid()
SM_RESULT CallRequest(_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
BOOLEAN SuperSpeedMustBeDisabled()
SM_RESULT AltBosHeaderRead(_In_ DsmEvent Event)
static const State RequestingCritical
SM_RESULT BosMsOs20Read(_In_ DsmEvent Event)
SM_RESULT AltValidateConfig()
BOOLEAN MsOsContainerIdSupported()
VOID MarkMsOsUnsupported()
SM_RESULT LinkLtmSet(_In_ DsmEvent Event)
static const State RemainingDescriptors
BOOLEAN MsOs20Supported()
VOID ReadContainerIdHeader()
SM_RESULT MsOsError(_In_ DSM_THEN GoOn)
VOID RecordDeviceVersion()
BOOLEAN DeviceDescriptorValid()
SM_RESULT OnCollectingDescriptors(_In_ DsmEvent Event)
BOOLEAN IgnoreSerialNumber()
BOOLEAN ContainerIdWanted()
BOOLEAN AltModeStringValid()
SM_RESULT BosAltEnumSent(_In_ DsmEvent Event)
BOOLEAN LanguageIdsValid()
BOOLEAN ConfigDescriptorValid()
SM_RESULT OnRemainingDescriptors(_In_ DsmEvent Event)
SM_RESULT BosHeaderRead(_In_ DsmEvent Event)
SM_RESULT MsOsMarkNoContainerId()
SM_RESULT EnterReadingDeviceDescriptor()
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmCall(_In_ const State *Start)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
#define DSM_KIND_ANY_SPEED
#define DSM_KIND_FULL_SPEED
#define DSM_KIND_ANY_PORT
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define SM_STATE_TAKES_REQUESTS
#define SM_STATE_YIELDS_TO_CALLER
One state. Handler gets every event the state sees.
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request