Невозможно прочитать пользовательские характеристики в службах Bluetooth (BLE) с помощью приложения iOS - PullRequest
0 голосов
/ 01 апреля 2019

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

Пожалуйста, проверьте код следующим образом

Для сканирования периферийного устройства

     var centralManager: CBCentralManager!
     centralManager = CBCentralManager(delegate: self, queue: nil)

После обнаружения подключения периферийного устройства к определенному устройству с использованием следующих методов делегирования

    func centralManager(_ central: CBCentralManager, didDiscover          peripheral: CBPeripheral,
                    advertisementData: [String : Any], rssi RSSI: NSNumber)

    {
         if(peripheral.name == "myBLE")
        {
            centralManager.stopScan()
            centralManager.connect(myPeripheral)
        }
    }

После подключения устройства Bluetooth откройте сервис

    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
    {

        //centralManager.stopScan()
        peripheral.discoverServices(nil)   // For all services

    }

Мы получаем услуги по следующим методам делегирования

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?)
    {
        guard let services = peripheral.services else { return }

        for service in services
        {

            peripheral.discoverCharacteristics(nil, for: service)               
        }

    }

Мы получаем характеристики в следующих методах делегата

    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?)
    {
        guard let characteristics = service.characteristics else { return }

        for characteristic in characteristics
        {
            print(characteristic)

            //Here we get only default characteristics, but not getting newly added characteristics

            if characteristic.properties.contains(.read)
            {
                peripheral.readValue(for: characteristic)
            }

            if characteristic.properties.contains(.notify)
            {
                peripheral.setNotifyValue(true, for: characteristic)
            }

        }

    }

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

...