Qt 不稳定。只能获取[自定义]服务中两个特征更改之一的通知
我让Nordic nrf与Linux上运行的Qt应用程序进行通信。Qt应用程序设置为获取自定义服务中的自定义特性通知。这个很好用 然后,我为北欧海关服务增加了第二个特点 如果我将手机连接到北欧,我会收到来自这两个特征的通知。然而,在我的Qt应用程序中,我根本无法实现第二个特性 我这样做的第一个特点是:Qt 不稳定。只能获取[自定义]服务中两个特征更改之一的通知,qt,bluetooth-lowenergy,Qt,Bluetooth Lowenergy,我让Nordic nrf与Linux上运行的Qt应用程序进行通信。Qt应用程序设置为获取自定义服务中的自定义特性通知。这个很好用 然后,我为北欧海关服务增加了第二个特点 如果我将手机连接到北欧,我会收到来自这两个特征的通知。然而,在我的Qt应用程序中,我根本无法实现第二个特性 我这样做的第一个特点是: void MainWindow::setReceiveCharacteristic(CharacteristicInfo *cInfo) { watchedData = cInfo-&g
void MainWindow::setReceiveCharacteristic(CharacteristicInfo *cInfo)
{
watchedData = cInfo->getCharacteristic();
if (watchedData.isValid())
{
const QLowEnergyDescriptor notificationRW = watchedData.descriptor(QBluetoothUuid(QBluetoothUuid::ClientCharacteristicConfiguration));
currentService->writeDescriptor(notificationRW, QByteArray::fromHex("0100"));
}
}
然后试着用第二个:
void MainWindow::setDataFromNordicCharacteristic(CharacteristicInfo *cInfo)
{
dataFromNordicCharacteristic = cInfo->getCharacteristic();
if (dataFromNordicCharacteristic.isValid())
{
const QLowEnergyDescriptor dataFromNordicDescriptor = dataFromNordicCharacteristic.descriptor(QBluetoothUuid(QBluetoothUuid::ClientCharacteristicConfiguration));
currentService->writeDescriptor(dataFromNordicDescriptor, QByteArray::fromHex("0100"));
if (dataFromNordicDescriptor.isValid())
ui->plainTextEdit->appendPlainText("Second descriptor is valid");
else
ui->plainTextEdit->appendPlainText("Second descriptor is not valid");
}
}
currentService是我的自定义服务
我为第二个添加了对有效描述符的检查,作为健全性检查,这很好。这两个函数只有在发现定制服务并且在服务中找到特定UUID时才会被调用
然后我会这样做:
connect(currentService, SIGNAL(characteristicChanged(QLowEnergyCharacteristic,QByteArray)), this, SLOT(newCharacteristicValue(QLowEnergyCharacteristic,QByteArray)));
我假设每个服务只需要一个连接,而不是每个特性
有人能看到我在做什么吗?如果您需要更多的代码片段,请询问
编辑:我发现北欧人得到了一个信息,说该特性启用了通知。我已通过以下方式确认:
线路,因为如果我把这条线路拔出来,我就永远得不到连接的信号。所以,似乎有什么东西在发送断开连接信号,但是,我看不到Qt代码中有任何机制可以做到这一点 为了简化操作,在外围设备(北欧nrf)上创建两个独立的定制服务。每个服务都包含一个数据特征和一个描述符,该描述符带有
ClientCharacteristicConfiguration
,用于启用来自中央设备(Qt应用程序)的通知
在Qt应用程序中,您必须连接到这两个服务,并通过编写描述符来启用通知。在插槽newCharacteristicValue(QLowEnergyCharacteristic,QByteArray)
中,您可以通过uuid来区分特征
如果您需要一个示例,请使用Qt心率游戏示例
currentService->writeDescriptor(dataFromNordicDescriptor, QByteArray::fromHex("0100"));