我正在开发一个程序来读取智能手表的一些特征(心率、电池电量、湿度和温度)。为此,我遵循心率游戏示例。从这个示例中,我能够从智能手机上的模拟器中获取有关心率的通知,但对于其他参数,我无法获取值。例如,对于心率,我正在为 stateChanged 执行此操作:(connect(m_service, &QLowEnergyService::stateChanged, this, &DeviceHandler::serviceStateChanged);
)
if (uuid == QBluetoothUuid(QBluetoothUuid::HeartRate)) {
const QLowEnergyCharacteristic hrChar = m_service->characteristic(QBluetoothUuid(QBluetoothUuid::HeartRateMeasurement));
m_notificationDesc = hrChar.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
m_service->writeDescriptor(m_notificationDesc, QByteArray::fromHex("0100"));
这对于 updateValue: ( connect(m_service, &QLowEnergyService::characteristicChanged, this, &DeviceHandler::updateValue);
)
auto data = reinterpret_cast<const quint8 *>(value.constData());
quint8 flags = *data;
if (flags & 0x1) // HR 16 bit? otherwise 8 bit
hrvalue = static_cast<int>(qFromLittleEndian<quint16>(data[1]));
else
hrvalue = static_cast<int>(data[1]);
qCDebug(BLELog) << hrvalue;
如果我运行我的程序,它会找到设备并连接到它,每次我按下模拟器上的“通知”按钮时,我都会正确获得新的心率值。
对于其他服务,我没有相当于 HeartRateMeasurment。对于电池,我尝试使用 BatteryService,然后使用 BatteryLevel 作为特征,但我的程序在静止不动(但没有被阻塞)时不读取值。我应该使用哪些服务和特性来获得与心率相同的结果?非常感谢您提供的所有帮助。