2016-04-28 18 views
25

Właśnie rozpocząłem projekt, który wymagałby sparowania tabletu z systemem Windows 10 z innym urządzeniem Bluetooth.Parowanie Bluetooth (SSP) w systemie Windows 10 z 32feet.NET

Postanowiłem zacząć od prostej aplikacji formularzy okien, aby zapoznać się z procesem. Dodałem pakiet 32feet.NET NuGet do mojego rozwiązania i szybko odniosłem sukces przy wyszukiwaniu urządzeń i zapełnianiu listy.

client = new BluetoothClient(); 
devices = client.DiscoverDevices(); 
if (devices.Length > 0) 
{ 
    foreach (var device in devices) 
    { 
     lstBTDevices.Items.Add(device.DeviceName); 
    } 
} 
else 
{ 
    MessageBox.Show("Unable to detect any bluetooth devices"); 
} 

Dodałem następnie obsługę zdarzeń, dzięki czemu mogłem wybrać wykryte urządzenie i spróbować sparować z nim.

private void LstBTDevices_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex]; 
     if (MessageBox.Show(String.Format("Would you like to attempt to pair with {0}?", selectedDevice.DeviceName), "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      if (BluetoothSecurity.PairRequest(selectedDevice.DeviceAddress, "123456")) 
      { 
       MessageBox.Show("We paired!"); 
      } 
      else 
      { 
       MessageBox.Show("Failed to pair!"); 
      } 
     } 
    } 

Na moim komputerze stacjonarnym z Windows7 tani adapter Bluetooth 2.0 powoduje to okienko, aby pojawić się na moim telefonie zainteresowanie wprowadzić kod PIN. Po wpisaniu "123456" parowanie zakończy się powodzeniem.

Jednak tutaj zaczyna się problem. Następnie biorę swoją aplikację i uruchamiam ją na moim tablecie z Windows10, a teraz, kiedy wybieram swój telefon, powoduje pojawienie się w moim telefonie wyskakującego 6-cyfrowego kodu PIN i wiadomości, która powinna pasować do tego, co jest wyświetlane na moim ekranie tabletu , z przyciskami parowania/anulowania jako opcjami. Naciśnięcie przycisku powoduje niepowodzenie.

Czy to coś, co robię źle? Sterownik nie obsługiwany przez 32feet.NET?

Każda rada byłaby mile widziana.

UPDATE: Komentarz od bare_metal pomógł mi dostać kawałek dalej

Dodałem obsługi zdarzeń BluetoothWin32Authentication i dodano przycisk do wszczęcia parowanie SSP:

EventHandler<BluetoothWin32AuthenticationEventArgs> authHandler = new EventHandler<BluetoothWin32AuthenticationEventArgs>(handleAuthRequests); 
BluetoothWin32Authentication authenticator = new BluetoothWin32Authentication(authHandler); 

    private void btnPairSSP_Click(object sender, EventArgs e) 
    { 
     BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex]; 
     if (MessageBox.Show(String.Format("Would you like to attempt to pair with {0}?", selectedDevice.DeviceName), "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      Task t = new Task(PairBluetoothTask); 
      t.Start(); 
     } 
    } 

    private void PairBluetoothTask() 
    { 
     BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex]; 
     if (BluetoothSecurity.PairRequest(selectedDevice.DeviceAddress, null)) 
     { 
      MessageBox.Show("We paired!"); 
     } 
     else 
     { 
      MessageBox.Show("Failed to pair!"); 
     } 

    } 

    private void handleAuthRequests(object sender, BluetoothWin32AuthenticationEventArgs e) 
    { 
     switch (e.AuthenticationMethod) 
     { 
      case BluetoothAuthenticationMethod.Legacy: 
       MessageBox.Show("Legacy Authentication"); 
       break; 

      case BluetoothAuthenticationMethod.OutOfBand: 
       MessageBox.Show("Out of Band Authentication"); 
       break; 

      case BluetoothAuthenticationMethod.NumericComparison: 
       if(e.JustWorksNumericComparison == true) 
       { 
        MessageBox.Show("Just Works Numeric Comparison"); 
       } 
       else 
       { 
        MessageBox.Show("Show User Numeric Comparison"); 
        if (MessageBox.Show(e.NumberOrPasskeyAsString, "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes) 
        { 
         e.Confirm = true; 
        } 
        else 
        { 
         e.Confirm = false; 
        }       
       } 
       break; 

      case BluetoothAuthenticationMethod.PasskeyNotification: 
       MessageBox.Show("Passkey Notification"); 
       break; 

      case BluetoothAuthenticationMethod.Passkey: 
       MessageBox.Show("Passkey"); 
       break; 

      default: 
       MessageBox.Show("Event handled in some unknown way"); 
       break; 

     } 
    } 

Kiedy rozpocząć parowanie z mojego telefonu działa to dobrze, zdarzenie jest uruchamiane, okno komunikatu pojawia się i proces parowania się powiódł.

Jednak po zainicjowaniu parowania z tabletu procedura obsługi zdarzenia nigdy nie jest wyzwalana, więc parowanie nie powiedzie się.

+1

Pierwsze parowanie z PINCODE nazywamy dziedzictwem parowanie i jeden z losowych 6 cyfrach jest Secure Simple Pairing. w SSP w celu uwierzytelnienia inicjatora i respondenta przycisk pary/akceptacji musi zostać naciśnięty po obu stronach. czy widzisz przycisk akceptacji/odrzucania również w Windows10? , jeśli tak, to czy akceptujesz z obu urządzeń ?, jak długo trzeba czekać na niepowodzenie parowania (20s)? –

+0

Nie, nie widzę opcji akceptacji/odrzucania ani kodu PIN na tablecie z Windows10. Próbuję zmienić podejście i spojrzeć na obszar nazw Windows.Devices.Bluetooth zamiast na 32feet.NET. –

+0

Mam również ten sam problem, każdą pomoc! –

Odpowiedz

4

Uważam, że problem polega na tym, że biblioteka 32feet została zbudowana na zasadzie parowania ze starszymi wersjami, więc albo musisz znać pin urządzenia, z którym się łączysz, albo podać go null, aby otworzyć okno wyskakujące wprowadź pinezkę. To okno dialogowe mogło nie przejść do nowej wersji systemu Windows - Nie jestem pewien na tym, ale dokumentacja dla natywnej funkcji, którą owija biblioteka 32feet, mówi, aby wywołać inną metodę, jeśli rozwija się na nowszą wersję niż Vista.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa362770(v=vs.85).aspx

Z mojego przeglądania badawczego przez dekompilowana źródeł 32feet może wyglądać 32feet nie obsługuje SSP, tylko innych - ale to może być tylko, że dostarczone implementacje stosu Bluetooth wymagają aktualizacji - albo trzeba stworzyć własne - znowu nie jestem pewien.

Możesz zajrzeć do bibliotek dostarczonych przez Microsoft dla .NET zamiast tej trzeciej strony, udało mi się wykorzystać ich przykład z Github do pomyślnego połączenia i sparowania ze wszystkimi moimi urządzeniami.

https://msdn.microsoft.com/en-us/library/windows/apps/mt168401.aspx

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DeviceEnumerationAndPairing/cs

Powiązane problemy