Я думал, что нашел ответ на эту проблему здесь:
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);