CoreBluetooth / CBATTErrorDomain Code = 6 "Запрос не поддерживается." - PullRequest
0 голосов
/ 20 января 2019

При работе с CoreBluetooth, читая значение признака, я обнаружил ошибку в периферийном устройстве (_: didUpdateValueFor: error:) функция протокола CBPeripheralDelegate.

Я продолжаю получать это сообщение в консоли отладки:

Error in peripheral(_:didUpdateValueFor:error:) :
Error Domain=CBATTErrorDomain Code=6 "The request is not supported."
      UserInfo={NSLocalizedDescription=The request is not supported.}

Все, что я пытался на этом этапе решить проблему, не удалось.

Кто-нибудь имел такой опыт и нашел решение?

Вот некоторый соответствующий код:

// CBPeripheralDelegate protocol implementation.

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    print(#function)
    if error != nil {
        print("Error in \(#function) :\n\(error!)")
        return
    }

    for service in peripheral.services ?? [] {
        print("Discovered service \(service)")
        if service.uuid == service_UUID {
            peripheral.discoverCharacteristics(nil, for: service)
            //peripheral.discoverCharacteristics([svcCharac_UUID], for: service) (Same problem!)
        }
    }
}


func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor
    service: CBService, error: Error?) {
    print(#function)
    if error != nil {
        print("Error in \(#function) :\n\(error!)")
        return
    }

    for characteristic in service.characteristics ?? [] {
        print("Discovered characteristic \(characteristic)")
        if characteristic.uuid ==  svcCharac_UUID {
            peripheral.setNotifyValue(true, for: characteristic)
            peripheral.readValue(for: characteristic)
        }
    }
}


func peripheral(_ peripheral: CBPeripheral,
                didUpdateValueFor characteristic: CBCharacteristic,
                error: Error?) {
    print(#function)
    if error != nil {
        print("Error in \(#function) :\n\(error!)")
        return
    }

    .................
}

Вот фрагмент кода в периферийном приложении, где создается характеристика:

//Class level declarations:

var cbPerifMngr:CBPeripheralManager!, mutaSRVC:CBMutableService!,
svcCharac:CBMutableCharacteristic!

.........

// CBPeripheralManagerDelegate protocol implementation.

func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
    print(#function)
    if peripheral.state == .poweredOn {
        mutaSRVC = CBMutableService(type: service_UUID, primary: true)
        svcCharac = CBMutableCharacteristic(type: svcCharac_UUID,
                                            properties: [.read, .notify],
                                            value: Data(base64Encoded: "Hello!"),//nil,//
                                            permissions: .readable)
        mutaSRVC.characteristics = [svcCharac]
        cbPerifMngr?.add(mutaSRVC)
        cbPerifMngr?.publishL2CAPChannel(withEncryption: false)
    }
}
...