mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
qt-ble: add support to wait for descriptor write completion
When we enable notifications, we actually want to make sure to wait for that write to have completed before we start communicating with the device, because otherwise we might lose notification events. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ec532b8f59
commit
88f4c06b99
2 changed files with 4 additions and 0 deletions
|
@ -92,6 +92,7 @@ void BLEObject::characteristicWritten(const QLowEnergyCharacteristic &c, const Q
|
|||
void BLEObject::writeCompleted(const QLowEnergyDescriptor&, const QByteArray&)
|
||||
{
|
||||
qDebug() << "BLE write completed";
|
||||
desc_written++;
|
||||
}
|
||||
|
||||
void BLEObject::addService(const QBluetoothUuid &newService)
|
||||
|
@ -489,6 +490,7 @@ dc_status_t qt_ble_open(void **io, dc_context_t *, const char *devaddr, dc_user_
|
|||
qDebug() << "now writing \"0x0100\" to the descriptor" << d.uuid().toString();
|
||||
|
||||
ble->preferredService()->writeDescriptor(d, QByteArray::fromHex("0100"));
|
||||
WAITFOR(ble->descriptorWritten(), 1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ public:
|
|||
dc_status_t read(void* data, size_t size, size_t *actual);
|
||||
|
||||
inline QLowEnergyService *preferredService() { return preferred; }
|
||||
inline int descriptorWritten() { return desc_written; }
|
||||
dc_status_t select_preferred_service(void);
|
||||
|
||||
public slots:
|
||||
|
@ -43,6 +44,7 @@ private:
|
|||
bool isCharacteristicWritten;
|
||||
dc_user_device_t *device;
|
||||
unsigned int hw_credit = 0;
|
||||
unsigned int desc_written = 0;
|
||||
|
||||
QList<QUuid> hwAllCharacteristics = {
|
||||
"{00000001-0000-1000-8000-008025000000}", // HW_OSTC_BLE_DATA_RX
|
||||
|
|
Loading…
Add table
Reference in a new issue