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)); }
// 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; }