TWSP-HFP: set initial twsp role based on odd or even BD_ADDR
For first connected earbud, while RFCOMM opened, set initial
earbud twsp role to be LEFT if BD_ADDR is odd, or else set
to be RIGHT.
Change-Id: I777634498553b41ff0e44e6e5dd7ff4a751cba3b
CRs-Fixed: 2399533
diff --git a/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_dev.cc b/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_dev.cc
index fde7388..11642e3 100644
--- a/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_dev.cc
+++ b/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_dev.cc
@@ -63,6 +63,18 @@
return NULL;
}
+bool twsp_is_odd_eb_addr(tBTA_AG_SCB* p_scb) {
+ bool ret;
+ if ((p_scb->peer_addr.address[5] & 0x01) == 0) {
+ ret = false;
+ } else {
+ ret = true;
+ }
+ APPL_TRACE_DEBUG("%s: eb addr: %s, ret: %d", __func__,
+ p_scb->peer_addr.ToString().c_str(), ret);
+ return ret;
+}
+
void reset_twsp_device(int eb_idx) {
if (eb_idx < PRIMARY_EB_IDX || eb_idx > SECONDARY_EB_IDX) {
APPL_TRACE_WARNING("%s: Invalid eb_idx: %d\n", __func__, eb_idx);
@@ -102,11 +114,15 @@
twsp_devices[i].state = TWSPLUS_EB_STATE_UNKNOWN;
int other_idx = (i == PRIMARY_EB_IDX) ? SECONDARY_EB_IDX : PRIMARY_EB_IDX;
- if (twsp_devices[other_idx].p_scb != NULL &&
- twsp_devices[other_idx].role == TWSPLUS_EB_ROLE_LEFT) {
- twsp_devices[i].role = TWSPLUS_EB_ROLE_RIGHT;
+ if (twsp_devices[other_idx].p_scb != NULL) {
+ twsp_devices[i].role =
+ (twsp_devices[other_idx].role == TWSPLUS_EB_ROLE_LEFT) ?
+ TWSPLUS_EB_ROLE_RIGHT : TWSPLUS_EB_ROLE_LEFT;
+
} else {
- twsp_devices[i].role = TWSPLUS_EB_ROLE_LEFT;
+ twsp_devices[i].role =
+ (twsp_is_odd_eb_addr(p_scb) == true) ?
+ TWSPLUS_EB_ROLE_LEFT : TWSPLUS_EB_ROLE_RIGHT;
}
APPL_TRACE_WARNING("%s: idx: %d, role: %d", __func__, i, twsp_devices[i].role);
diff --git a/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_sco.cc b/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_sco.cc
index 614c80d..21c4023 100644
--- a/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_sco.cc
+++ b/system_bt_ext/bta/tws_plus/ag/bta_ag_twsp_sco.cc
@@ -703,7 +703,8 @@
uint8_t *p_param = param;
std::string leb, reb;
- APPL_TRACE_DEBUG("%s: left_addr: %x, right_addr: %x, selected_mic: %d", __func__, left_eb_addr, rght_eb_addr, selected_mic);
+ APPL_TRACE_DEBUG("%s: left_addr: %s, right_addr: %s, selected_mic: %d", __func__,
+ left_eb_addr.ToString().c_str(), rght_eb_addr.ToString().c_str(), selected_mic);
*p_param++ = VS_QHCI_TWS_ESCO_SETUP_SUBOPCODE;