Windows 10 1909 BLE Подключение без сопряжения - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь разработать приложение Windows UWP, и я пытаюсь подключиться к устройству BLE без необходимости явного сопряжения.

Чтобы убедиться, что проблема не на стороне устройства BLE, я подтвердил, что могу подключиться к устройству BLE с опцией «Just Works» через приложение NRF connect на Android и iOS.

Некоторая информация о моей настройке и о том, что я сделал до сих пор :

У меня в манифесте включены возможности Bluetooth. Я проверил, что Bluetooth работает при непосредственном сопряжении с отдельным устройством, использующим BLE, например, с некоторыми наушниками. Я убедился, что Bluetooth включен. Я могу подключиться к своему устройству BLE, когда использую опцию сопряжения, однако он каждый раз отображает всплывающее окно, и мне не нужно это всплывающее окно, я хочу, чтобы оно просто работало без какого-либо взаимодействия. Если PairAsyn c не используется, результатом FromBluetoothAddressAsyn c или FromIdAsyn c будет «Отключено». Я использую Windows 10 1909 18363.900. Я должен отметить, что раньше это работало на 1803. Все мои драйверы bluetooth обновлены. Я попробовал это на другом ноутбуке, и он не работал без всплывающего окна сопряжения.

Вот мой код:

        private string DEVICE_ADDRESS_TEST = "C7:9C:0C:EE:EA:D1";
        // Create BLE watcher
        var bleWatcher = new BluetoothLEAdvertisementWatcher() { ScanningMode = BluetoothLEScanningMode.Active };

        // add received callback
        bleWatcher.Received += async (BluetoothLEAdvertisementWatcher w, BluetoothLEAdvertisementReceivedEventArgs btAdv) => {
            try
            {
                /// SCAN FIND DEVICE
                ulong longAgain = ulong.Parse(this.DEVICE_ADDRESS_TEST.Replace(":", ""), System.Globalization.NumberStyles.HexNumber);
                if (btAdv.BluetoothAddress != longAgain)
                {
                    Logging.info($"Found device: {btAdv.BluetoothAddress}");
                    return;
                }
                else
                {
                    Logging.info($"Found BLE device [{DEVICE_ADDRESS_TEST}]");
                    bleWatcher.Stop();
                }

                // This causes a popup to appear! I don't want this.
                //DevicePairingResult result = await di.Pairing.PairAsync(DevicePairingProtectionLevel.Encryption); 
                // This causes a popup to appear! I don't want this.
                //DevicePairingResult result = await di.Pairing.PairAsync(DevicePairingProtectionLevel.None); 

                /// CONNECT TO DEVICE
                Logging.info("Connecting...");
                var device = await BluetoothLEDevice.FromBluetoothAddressAsync(longAgain);


                var log1 = $"Connection state: [{device.ConnectionStatus}]";
                Logging.info(log1);
                if (device.ConnectionStatus != BluetoothConnectionStatus.Connected)
                {
                    throw new Exception("FromBluetoothAddressAsync did not connect successfully.");
                }

                /// GET ALL SERVICES
                Logging.info("Getting services..");
                // 2) SERVICES!!
                var result = await device.GetGattServicesAsync();

                if (result.Status != GattCommunicationStatus.Success)
                {
                    throw new Exception($"GetGattServicesAsync failed with result: status[{result.Status}], error[{result.ProtocolError}]");
                }

                Logging.info($"[{result.Services.Count}] services found");
            }
            catch (Exception e)
            {
                Logging.error(e.Message);
            }

        };
        bleWatcher.Start();

Что я делаю не так? Должен быть способ подключаться к устройствам без необходимости взаимодействия с всплывающими окнами. Мне не хватает нового API? Пожалуйста, помогите!

ОБНОВЛЕНИЕ:

Я обнаружил, что выполнение GetGattServicesForUuidAsyn c или GetGattServicesAsyn c приводит к подключению устройства, однако оба они возвращают статус «Недоступен. '. Это странно, потому что я вижу свет, который показывает, подключено устройство или нет. Опять же, я должен повторить, что такое поведение наблюдается только на оконной платформе, поскольку я могу легко подключаться и получать услуги, используя «просто работающие» на android и ios.

ОБНОВЛЕНИЕ:

Вот сопряжение SS: введите описание изображения здесь

...