Как преобразовать значение CBDescriptor в строку? - PullRequest
0 голосов
/ 15 октября 2018

Я могу прочитать значение дескриптора в методе "didUpdateValeFor descriptor:".Ниже приведен журнал дескриптора, который я получаю с устройства BLE.

<CBDescriptor: 0x1c445cb60, UUID = Characteristic Format, value = <08ff2427 013110>> Значения приведены в формате данных, который имеет некоторый допустимый диапазон от значения XX до YY и имеет тип uint32 Похоже.Я не мог их преобразовать.Я не могу найти решение из других ответов.

1 Ответ

0 голосов
/ 15 октября 2018

Как правило, CBDescriptor имеет свойство uuid, которое будет одним из значений, указанных в документации и свойством value.Тип свойства value будет зависеть от uuid.Вы можете найти соответствующий тип value в каждом из возможных uuids CBDescriptor.Например, для CBUUIDCharacteristicFormatString value - это экземпляр Data, который кодирует строку формата.

Пример функции, которая декодирует CBDescriptor, показан ниже.Вам необходимо добавить отсутствующие типы uuid.

func descriptorDescription(for descriptor: CBDescriptor) -> String {

    var description: String?
    var value: String?

    switch descriptor.uuid.uuidString {
    case CBUUIDCharacteristicFormatString:
        if let data = descriptor.value as? Data {
            description = "Characteristic format: "
            value = data.description
        }
    case CBUUIDCharacteristicUserDescriptionString:
        if let val = descriptor.value as? String {
            description = "User description: "
            value = val
        }
    case CBUUIDCharacteristicExtendedPropertiesString:
        if let val = descriptor.value as? NSNumber {
            description = "Extended Properties: "
            value = val.description
        }
    case CBUUIDClientCharacteristicConfigurationString:
        if let val = descriptor.value as? NSNumber {
            description = "Client characteristic configuration: "
            value = val.description
        }
    case CBUUIDServerCharacteristicConfigurationString:
        if let val = descriptor.value as? NSNumber {
            description = "Server characteristic configuration: "
            value = val.description
        }
    case CBUUIDCharacteristicAggregateFormatString:
        if let val = descriptor.value as? String {
            description = "Characteristic aggregate format: "
            value = val
        }
    default:
        break
    }

    if let desc=description, let val = value  {
        return "\(desc)\(val)"
    } else {
        return "Unknown descriptor"
    }
}

Для конкретного декодирования данных, связанных с CBUUIDCharacteristicFormatString, необходимо обратиться к документации Bluetooth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...