diff --git a/src/ble/hal/blercu/bluez/blercudevice.cpp b/src/ble/hal/blercu/bluez/blercudevice.cpp index 8e6b5b1..8212a3a 100644 --- a/src/ble/hal/blercu/bluez/blercudevice.cpp +++ b/src/ble/hal/blercu/bluez/blercudevice.cpp @@ -97,6 +97,8 @@ BleRcuDeviceBluez::BleRcuDeviceBluez(const BleAddress &bdaddr, , m_lastPairedState(false) , m_lastServicesResolvedState(false) , m_isPairing(false) + , m_pairingRetryCnt(0) + , m_maxPairingRetries(3) , m_timeSinceReady(0) , m_recoveryAttempts(0) , m_maxRecoveryAttempts(100) @@ -261,11 +263,17 @@ void BleRcuDeviceBluez::onPairRequestReply(PendingReply<> *reply) if (reply->isError()) { m_isPairing = false; - // an error occurred so log it XLOGD_ERROR("%s pairing request failed with error: <%s>", - m_address.toString().c_str(), reply->errorMessage().c_str()); - - m_pairingErrorSlots.invoke(reply->errorMessage()); + m_address.toString().c_str(), reply->errorMessage().c_str()); + + if (m_pairingRetryCnt < m_maxPairingRetries) { + m_pairingRetryCnt++; + XLOGD_INFO("Retrying pairing, attempt %d out of %d ", m_pairingRetryCnt, m_maxPairingRetries); + pair(0); + } else { + m_pairingRetryCnt = 0; + m_pairingErrorSlots.invoke(reply->errorMessage()); + } } else { XLOGD_DEBUG("%s pairing request successful", m_address.toString().c_str()); } diff --git a/src/ble/hal/blercu/bluez/blercudevice_p.h b/src/ble/hal/blercu/bluez/blercudevice_p.h index 93cef7a..39ecd86 100644 --- a/src/ble/hal/blercu/bluez/blercudevice_p.h +++ b/src/ble/hal/blercu/bluez/blercudevice_p.h @@ -232,6 +232,9 @@ class BleRcuDeviceBluez : public BleRcuDevice bool m_lastServicesResolvedState; bool m_isPairing; + int m_pairingRetryCnt; + int m_maxPairingRetries; + GTimer* m_timeSinceReady; int m_recoveryAttempts;