From 897b555168a93e193e10d2b1b4489f65d7ce32bf Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Mon, 29 Sep 2025 23:53:40 +0000 Subject: [PATCH 1/2] RDKEMW-7225: ble_auto-pairing_retries --- src/ble/hal/blercu/blercupairingstatemachine.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ble/hal/blercu/blercupairingstatemachine.cpp b/src/ble/hal/blercu/blercupairingstatemachine.cpp index 0a5572c..5391197 100644 --- a/src/ble/hal/blercu/blercupairingstatemachine.cpp +++ b/src/ble/hal/blercu/blercupairingstatemachine.cpp @@ -930,10 +930,14 @@ void BleRcuPairingStateMachine::processDevice(const BleAddress &address, return; } - XLOGD_INFO("Found target device (%s, %s)", name.c_str(), address.toString().c_str()); + if (m_targetAddress == BleAddress("20:9e:79:aa:db:ce")) { + XLOGD_INFO("EGDEBUG: forcing pairing with only this device!!!!!!!!!!!!!!!!!!"); - // store the target address - m_targetAddress = address; + XLOGD_INFO("Found target device (%s, %s)", name.c_str(), address.toString().c_str()); + + // store the target address + m_targetAddress = address; + } } else if (m_targetAddress != address) { From 98e242585bfdcb25809bf7c6c07111978ebc7d9d Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Fri, 3 Oct 2025 17:08:11 +0000 Subject: [PATCH 2/2] final commit --- src/ble/hal/blercu/blercupairingstatemachine.cpp | 10 +++------- src/ble/hal/blercu/bluez/blercudevice.cpp | 16 ++++++++++++---- src/ble/hal/blercu/bluez/blercudevice_p.h | 3 +++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/ble/hal/blercu/blercupairingstatemachine.cpp b/src/ble/hal/blercu/blercupairingstatemachine.cpp index 5391197..0a5572c 100644 --- a/src/ble/hal/blercu/blercupairingstatemachine.cpp +++ b/src/ble/hal/blercu/blercupairingstatemachine.cpp @@ -930,14 +930,10 @@ void BleRcuPairingStateMachine::processDevice(const BleAddress &address, return; } - if (m_targetAddress == BleAddress("20:9e:79:aa:db:ce")) { - XLOGD_INFO("EGDEBUG: forcing pairing with only this device!!!!!!!!!!!!!!!!!!"); + XLOGD_INFO("Found target device (%s, %s)", name.c_str(), address.toString().c_str()); - XLOGD_INFO("Found target device (%s, %s)", name.c_str(), address.toString().c_str()); - - // store the target address - m_targetAddress = address; - } + // store the target address + m_targetAddress = address; } else if (m_targetAddress != address) { 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;