private WfdDeviceDescriptor PerformWildcardDiscovery()
        {
            WfdDeviceDescriptor discoveredDeviceDescriptor = null;

            //
            // Perform the discovery
            //

            WiFiDirectTestLogger.Log("Performing wildcard discovery for device {0} ({1}) as {2}, Timeout: {3} ms, Discovery Type: {4}",
                                     remoteWFDController.DeviceAddress,
                                     remoteWFDController.MachineName,
                                     GetFriendlyStringForDiscoveryScenarioType(discoveryScenarioType),
                                     searchTimeoutMs,
                                     GetFriendlyStringForDiscoverType(discoverType)
                                     );

            List <WfdDeviceDescriptor> discoveryResults = localWFDController.DiscoverDevices(searchTimeoutMs, discoverType);

            WiFiDirectTestLogger.Log("Discovery returned {0} results.", discoveryResults == null ? 0 : discoveryResults.Count);

            if (discoveryResults != null)
            {
                foreach (WfdDeviceDescriptor discoveryResult in discoveryResults)
                {
                    if (discoveryResult.DeviceAddress == remoteWFDController.DeviceAddress)
                    {
                        WiFiDirectTestLogger.Log("Target device {0} ({1}) found in discovery results", remoteWFDController.DeviceAddress, remoteWFDController.MachineName);

                        if (discoveryScenarioType == DiscoveryScenarioType.DiscoverAsGo &&
                            !discoveryResult.GroupCapabilities.GroupOwner)
                        {
                            WiFiDirectTestLogger.Error("Expected to find device {0} ({1}) as a group owner, but there's no GO running on the device.", remoteWFDController.DeviceAddress, remoteWFDController.MachineName);
                        }
                        else
                        {
                            discoveredDeviceDescriptor = discoveryResult;
                        }

                        break;
                    }
                }
            }

            if (discoveredDeviceDescriptor == null)
            {
                WiFiDirectTestLogger.Error("Target device {0} ({1}) not found.", remoteWFDController.DeviceAddress, remoteWFDController.MachineName);
            }

            return(discoveredDeviceDescriptor);
        }
        private WfdDeviceDescriptor PerformTargetedDiscovery()
        {
            DOT11_WFD_DISCOVER_DEVICE_FILTER_BITMASK deviceFilterBitmask;

            switch (discoveryScenarioType)
            {
            case DiscoveryScenarioType.DiscoverAsDevice:
                deviceFilterBitmask = DOT11_WFD_DISCOVER_DEVICE_FILTER_BITMASK.Device;
                break;

            case DiscoveryScenarioType.DiscoverAsGo:
                deviceFilterBitmask = DOT11_WFD_DISCOVER_DEVICE_FILTER_BITMASK.GO;
                break;

            default:
                throw new Exception("Unable to map from discovery scenario type to discovery filter bitmask");
            }

            //
            // Perform the discovery
            //

            WiFiDirectTestLogger.Log("Performing targetted discovery for device {0} ({1}) as {2}, Timeout: {3} ms, Discovery Type: {4}",
                                     remoteWFDController.DeviceAddress,
                                     remoteWFDController.MachineName,
                                     GetFriendlyStringForDiscoveryScenarioType(discoveryScenarioType),
                                     searchTimeoutMs,
                                     GetFriendlyStringForDiscoverType(discoverType)
                                     );

            WfdDeviceDescriptor discoveredDeviceDescriptor = localWFDController.PerformTargetedDiscovery(
                remoteWFDController.DeviceAddress,
                deviceFilterBitmask,
                searchTimeoutMs,
                discoverType
                );

            if (discoveredDeviceDescriptor == null)
            {
                WiFiDirectTestLogger.Error("Target device {0} ({1}) not found.", remoteWFDController.DeviceAddress, remoteWFDController.MachineName);
            }

            return(discoveredDeviceDescriptor);
        }