public async Task <AsyncProvisioningInfoResult> GetProvisioningInfoAsync(
            DiscoveredService discovered,
            WiFiDirectServiceConfigurationMethod configMethod
            )
        {
            WiFiDirectServiceProvisioningInfo provisioningInfo    = null;
            ProvisioningInfoWrapper           provisioningWrapper = null;
            Exception error   = null;
            bool      success = false;

            try
            {
                ThrowIfDisposed();

                WiFiDirectTestLogger.Log(
                    "GetProvisioningInfoAsync... (config method={0}) (Discovery={1})",
                    configMethod.ToString(),
                    discovered.Handle
                    );

                provisioningInfo = await discovered.GetProvisioningInfoAsync(configMethod);

                provisioningWrapper = new ProvisioningInfoWrapper(provisioningInfo);

                success = true;
            }
            catch (Exception ex)
            {
                WiFiDirectTestLogger.Log("Exception in GetProvisioningInfoAsync (this may be expected)");
                error = ex;
            }

            return(new AsyncProvisioningInfoResult(provisioningWrapper, success, error));
        }
Exemplo n.º 2
0
            // An application has two ways to connect over Wi-Fi Direct services
            // 1) First call GetProvisioningInfoAsync to begin connecting,
            //        a) if a PIN is required (group formation is required and selected config method is PinEntry or PinDisplay) then call ConnectAsync with the PIN
            //        b) else if no PIN is required then call ConnectAsync with no PIN
            // 2) Call ConnectAsync to connect without a PIN and prefer the Wi-Fi Direct Default config method, if possible

            private async void GetProvisioningInfo_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                if (DiscoveredServices.Items.Count > 0)
                {
                    int index = DiscoveredServices.SelectedIndex;
                    if (index >= 0)
                    {
                        DiscoveredDeviceWrapper service = (DiscoveredDeviceWrapper)DiscoveredServices.Items[index];

                        WiFiDirectServiceConfigurationMethod configMethod = WiFiDirectServiceConfigurationMethod.Default;
                        if (((ComboBoxItem)SelectedConfigMethod.SelectedItem).Content.ToString() == "WFDS Default")
                        {
                            configMethod = WiFiDirectServiceConfigurationMethod.Default;
                        }
                        else if (((ComboBoxItem)SelectedConfigMethod.SelectedItem).Content.ToString() == "PIN Keypad")
                        {
                            configMethod = WiFiDirectServiceConfigurationMethod.PinEntry;
                        }
                        else if (((ComboBoxItem)SelectedConfigMethod.SelectedItem).Content.ToString() == "PIN Display")
                        {
                            configMethod = WiFiDirectServiceConfigurationMethod.PinDisplay;
                        }

                        await service.OpenSessionAsync();

                        await service.SetServiceOptionsAsync(PreferGO.IsChecked ?? false, SessionInfo.Text);

                        provisioningInfo = await service.GetProvisioningInfoAsync(configMethod);
                    }
                }
            }
 public ServicesConnectOptions(
     bool callGetProvisioningInfo = false,
     bool preferGO = false,
     WiFiDirectServiceConfigurationMethod preferredConfigMethod = WiFiDirectServiceConfigurationMethod.Default,
     bool expectDeferred = false,
     bool expectGetProvisioningSuccess   = true,
     bool expectGroupFormationNeeded     = true,
     bool expectConnectSuccess           = true,
     bool expectAdvertiserConnectSuccess = true,
     bool declineConnect         = false,
     bool validateData           = false,
     string sessionInfo          = "",
     bool delaySeekerConnectCall = false
     )
 {
     CallGetProvisioningInfo = callGetProvisioningInfo;
     PreferGO = preferGO;
     PreferredConfigMethod          = preferredConfigMethod;
     ExpectDeferred                 = expectDeferred;
     ExpectGetProvisioningSuccess   = expectGetProvisioningSuccess;
     ExpectGroupFormationNeeded     = expectGroupFormationNeeded;
     ExpectConnectSuccess           = expectConnectSuccess;
     ExpectAdvertiserConnectSuccess = expectAdvertiserConnectSuccess;
     DeclineConnect                 = declineConnect;
     ValidateData           = validateData;
     SessionInfo            = sessionInfo;
     DelaySeekerConnectCall = delaySeekerConnectCall;
 }
            /// <summary>
            /// Calls service.GetProvisioningInfoAsync to begin provision discovery and
            /// determine if a PIN will be needed to connect
            /// </summary>
            /// <param name="configMethod">Selected Config Method to use, based on supported config methods of discovered device</param>
            public async Task<WiFiDirectServiceProvisioningInfo> GetProvisioningInfoAsync(
                WiFiDirectServiceConfigurationMethod configMethod
                )
            {
                WiFiDirectServiceProvisioningInfo provisioningInfo = null;
                ThrowIfDisposed();

                // Must call FromIdAsync first
                if (service == null)
                {
                    await OpenSessionAsync();
                }

                manager.NotifyUser("Get provisioning info...", NotifyType.StatusMessage);

                try
                {
                    provisioningInfo = await service.GetProvisioningInfoAsync(configMethod);
                    
                    if (provisioningInfo.IsGroupFormationNeeded)
                    {
                        if (provisioningInfo.SelectedConfigurationMethod == WiFiDirectServiceConfigurationMethod.PinDisplay)
                        {
                            // UI should display the PIN and pass it into the call to Connect
                            manager.NotifyUser("Group Formation is needed, should DISPLAY PIN", NotifyType.StatusMessage);
                        }
                        else if (provisioningInfo.SelectedConfigurationMethod == WiFiDirectServiceConfigurationMethod.PinEntry)
                        {
                            // UI should take PIN as input and pass it into the call to Connect
                            manager.NotifyUser("Group Formation is needed, should ENTER PIN", NotifyType.StatusMessage);
                        }
                        else
                        {
                            manager.NotifyUser("Group Formation is needed, no PIN required", NotifyType.StatusMessage);
                        }
                    }
                    else
                    {
                        manager.NotifyUser("Group Formation is not needed", NotifyType.StatusMessage);
                    }
                }
                catch (Exception ex)
                {
                    // This could fail due to driver or network issues
                    manager.NotifyUser("GetProvisioningInfoAsync Failed: " + ex.Message, NotifyType.ErrorMessage);
                }

                return provisioningInfo;
            }