Qt BLE QLowEnergyDescriptor характеристикаChanged (настольные ОС) - PullRequest
0 голосов
/ 16 апреля 2019

Я думал, что нашел ответ на эту проблему здесь:

Qt и Android характеристикаChanged не испускаются

Однако, хотя у меня есть проблема (ядумаю) это решение не помогает.

То, что я могу сделать (обратите внимание, что это не на Android, а на Linux, и в конечном итоге должно быть на Windows, если это уместно):

  • Сканирование для устройств.
  • Подключение к устройству
  • Перечислите все его услуги
  • Перечислите все характеристики в услуге
  • Считайте любую характеристику в услугах

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

У меня есть этот код:

  const QList<QLowEnergyCharacteristic> chars = service->characteristics();
    foreach (const QLowEnergyCharacteristic &ch, chars)
        {
        CharacteristicInfo *cInfo = new CharacteristicInfo(ch);
        m_characteristics.append(cInfo);
        fillHandlesTable(cInfo);
        if (cInfo->getHandle() == "0x15")
            {
            ui->plainTextEdit->appendPlainText("Going to attempt to look for changes to handle 15"); 
            QLowEnergyDescriptor notification = ch.descriptor(QBluetoothUuid( cInfo->getUuid()) );
            if (!notification.isValid())
                ui->plainTextEdit->appendPlainText("Oh no, that's not right");
            else
                {
                connect(service, SIGNAL(characteristicChanged(QLowEnergyCharacteristic,QByteArray)),
                        this, SLOT(newCharacteristicValue(QLowEnergyCharacteristic,QByteArray)));
                service->writeDescriptor(notification, QByteArray::fromHex("0100"));
                } 
            }
        }

Я всегда получаю строку, говорящую мне, О нет, это не правильно.Я не уверен, является ли эта строка:

QLowEnergyDescriptor notification = ch.descriptor(QBluetoothUuid( cInfo->getUuid()) );

правильной, особенно бит QBluetoothUuid( cInfo->getUuid()).

, или я что-то совсем не так.

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

то есть это:

QLowEnergyDescriptor notification = ch.descriptor(
    QBluetoothUuid::ClientCharacteristicConfiguration);

1 Ответ

0 голосов
/ 17 апреля 2019

Ответ был не в коде Qt, а в том, что характеристика была прочитана, а не прочитана / уведомлена.

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