2016-04-28 3 views
25

Я только что начал проект, который потребует от меня подключения планшета Windows 10 с другим устройством Bluetooth.Bluetooth Pairing (SSP) в Windows 10 с 32feet.NET

Я решил начать с простого приложения Windows Forms, чтобы ознакомиться с процессом. Я добавил пакет 32feet.NET NuGet к моему решению и быстро добился успеха в поиске устройств и заполнении списка.

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

Затем я добавил обработчик событий, чтобы я мог выбрать обнаруженное устройство и попытаться выполнить сопряжение с ним.

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!"); 
      } 
     } 
    } 

На моем Windows7 настольного ПК с дешевым адаптером Bluetooth 2.0 это вызывает всплывающее окно, чтобы появиться на моем телефоне запрашивающим я ввожу пин-код. Когда я вхожу в «123456», спаривание выполняется успешно.

Однако здесь проблема начинается. Затем я беру свое приложение и запускаю его на своем планшете Windows 10, и теперь, когда я выбираю свой телефон, он вызывает всплывающее окно на моем телефоне со случайным 6-разрядным пинкодом и сообщение о том, что оно должно соответствовать тому, что отображается на экране планшета , с кнопками pair/cancel в качестве параметров. При нажатии любой из этих кнопок происходит сбой.

Это что-то я делаю неправильно? Драйвер не поддерживается 32feet.NET?

Любой совет будет очень благодарен.

UPDATE: Комментарий от bare_metal помог мне получить немного дальше

Я добавил обработчик события BluetoothWin32Authentication и добавил кнопку, чтобы инициировать сопряжение 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; 

     } 
    } 

Когда я начать спаривание с моего телефона это прекрасно работает, событие срабатывает, всплывающие окна сообщений и спаривание успешны.

Однако, когда я начинаю спаривание с планшета, обработчик события никогда не запускается, поэтому спаривание не выполняется.

+1

Первое спаривание с Pincode называется наследием спаривание и один со случайным 6 цифр Безопасен Простое сопряжение. в SSP для аутентификации инициатора и ответчика кнопка «пар/прием» должна быть нажата с обеих сторон. вы видите кнопку accept/reject в Windows10? , если вы так согласились с обоими устройствами? Сколько времени потребуется, чтобы заметить спаривание (20s)? –

+0

Нет, я не вижу вариант accept/reject или pincode на планшете Windows10. Попытайтесь изменить подход и посмотрите на пространство имен Windows.Devices.Bluetooth, а не на 32feet.NET. –

+0

У меня тоже такая же проблема, любая помощь! –

ответ

4

Я считаю, что проблема заключается в том, что библиотека 32feet построена вокруг старого сопряжения, так что вам либо нужно знать контакт устройства, к которому вы подключаетесь, либо вы предоставляете ему нуль, чтобы получить всплывающее окно для введите штырь. Этот диалог, возможно, не прошел через новую версию Windows - Не уверен в этом, но документация для собственной функции, которую обтекает библиотека 32feet, говорит, чтобы вызвать другой метод при разработке для более новой версии, чем Vista.

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

С моей исследовательской просмотра через декомпилированных источников 32feet, это может выглядеть как 32feet не поддерживает SSP, только другие - но это может быть только то, что поставляемые реализации стека Bluetooth нуждаются в обновлении - или нужно создать свой собственный - снова я не уверен.

Возможно, вы захотите ознакомиться с библиотеками, поставляемыми Майкрософт для .NET вместо этого третьего лица, и я смог использовать их пример из Github для успешного подключения и сопряжения со всеми моими устройствами.

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

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

Смежные вопросы