Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbc54e5c authored by Zach Johnson's avatar Zach Johnson
Browse files

Rename set/clear policy, since it's just about role switch

Bug: 159815595
Tag: #refactor
Test: compile & verify basic functions working
Change-Id: I288816ab79072bc95559bd66b736b81a41a6b4bf
parent d91c2226
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -1871,7 +1871,7 @@ void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
   * It would not hurt us, if the peer device wants us to be master */
  if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) &&
      (cur_role == HCI_ROLE_MASTER)) {
    BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->PeerAddress());
    BTA_dm_block_role_switch_for(p_scb->PeerAddress());
  }

  if (p_scb->started) {
@@ -1942,7 +1942,7 @@ void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
  bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress());
  if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 ||
      bta_av_cb.audio_open_cnt == 1) {
    BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->PeerAddress());
    BTA_dm_unblock_role_switch_for(p_scb->PeerAddress());
  }

  if (p_scb->co_started) {
@@ -2376,8 +2376,7 @@ void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
       * master */
      if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) &&
          (cur_role == HCI_ROLE_MASTER)) {
        BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH,
                            p_scb->PeerAddress());
        BTA_dm_block_role_switch_for(p_scb->PeerAddress());
      }
    }

@@ -2440,7 +2439,7 @@ void bta_av_start_failed(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) {
    notify_start_failed(p_scb);
  }

  BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->PeerAddress());
  BTA_dm_unblock_role_switch_for(p_scb->PeerAddress());
  p_scb->sco_suspend = false;
}

@@ -2464,7 +2463,7 @@ void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {

  if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 ||
      bta_av_cb.audio_open_cnt == 1) {
    BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->PeerAddress());
    BTA_dm_unblock_role_switch_for(p_scb->PeerAddress());
  }
  if (bta_av_cb.audio_open_cnt <= 1) {
    /* last connection - restore the allow switch flag */
@@ -2576,7 +2575,7 @@ void bta_av_suspend_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
  bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress());
  if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 ||
      bta_av_cb.audio_open_cnt == 1) {
    BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->PeerAddress());
    BTA_dm_unblock_role_switch_for(p_scb->PeerAddress());
  }

  /* in case that we received suspend_ind, we may need to call co_stop here */
+4 −7
Original line number Diff line number Diff line
@@ -921,8 +921,7 @@ void bta_av_restore_switch(void) {
    mask = BTA_AV_HNDL_TO_MSK(i);
    if (p_cb->conn_audio == mask) {
      if (p_cb->p_scb[i]) {
        BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH,
                          p_cb->p_scb[i]->PeerAddress());
        BTA_dm_unblock_role_switch_for(p_cb->p_scb[i]->PeerAddress());
      }
      break;
    }
@@ -975,7 +974,7 @@ static void bta_av_sys_rs_cback(UNUSED_ATTR tBTA_SYS_CONN_STATUS status,
  if ((HCI_SUCCESS != app_id) &&
      (BTM_GetRole(peer_addr, &cur_role) == BTM_SUCCESS) &&
      (cur_role == HCI_ROLE_SLAVE)) {
    BTA_dm_set_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, peer_addr);
    BTA_dm_unblock_role_switch_for(peer_addr);
  }

  /* if BTA_AvOpen() was called for other device, which caused the role switch
@@ -1101,8 +1100,7 @@ bool bta_av_switch_if_needed(tBTA_AV_SCB* p_scb) {
       */
      if (HCI_ROLE_MASTER != role) {
        if (bta_av_cb.features & BTA_AV_FEAT_MASTER)
          BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH,
                               p_scbi->PeerAddress());
          BTA_dm_block_role_switch_for(p_scbi->PeerAddress());
        if (BTM_CMD_STARTED !=
            BTM_SwitchRole(p_scbi->PeerAddress(), HCI_ROLE_MASTER, NULL)) {
          /* can not switch role on SCBI
@@ -1146,8 +1144,7 @@ bool bta_av_link_role_ok(tBTA_AV_SCB* p_scb, uint8_t bits) {
        (A2DP_BitsSet(bta_av_cb.conn_audio) > bits ||
         (bta_av_cb.features & BTA_AV_FEAT_MASTER))) {
      if (bta_av_cb.features & BTA_AV_FEAT_MASTER)
        BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH,
                            p_scb->PeerAddress());
        BTA_dm_block_role_switch_for(p_scb->PeerAddress());

      tBTM_STATUS status =
          BTM_SwitchRole(p_scb->PeerAddress(), HCI_ROLE_MASTER, NULL);
+6 −12
Original line number Diff line number Diff line
@@ -827,28 +827,22 @@ void bta_dm_pin_reply(std::unique_ptr<tBTA_DM_API_PIN_REPLY> msg) {
  }
}

void BTA_dm_set_policy(uint8_t policy, const RawAddress& peer_addr) {
void BTA_dm_unblock_role_switch_for(const RawAddress& peer_addr) {
  auto p_dev = bta_dm_find_peer_device(peer_addr);
  if (!p_dev) {
    return;
  }
  p_dev->link_policy |= policy;
  p_dev->link_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH;
  BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
}

void BTA_dm_clear_policy(uint8_t policy, const RawAddress& peer_addr) {
void BTA_dm_block_role_switch_for(const RawAddress& peer_addr) {
  auto p_dev = bta_dm_find_peer_device(peer_addr);
  if (!p_dev) {
    return;
  }
  /* clear the policy from the default link policy */
  p_dev->link_policy &= (~policy);
  p_dev->link_policy &= (~HCI_ENABLE_MASTER_SLAVE_SWITCH);
  BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));

  if (policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)) {
    /* if clearing sniff/park, wake the link */
    bta_dm_pm_active(p_dev->peer_bdaddr);
  }
}

void BTA_dm_unblock_role_switch() {
@@ -2548,7 +2542,7 @@ static void handle_role_change(const RawAddress& bd_addr, uint8_t new_role,
    }

    if (need_policy_change) {
      BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
      BTA_dm_block_role_switch_for(p_dev->peer_bdaddr);
    }
  } else {
    /* there's AV no activity on this link and role switch happened
@@ -2777,7 +2771,7 @@ static bool bta_dm_check_av(uint16_t event) {
          switching = true;
        }
        /* else either already master or can not switch for some reasons */
        BTA_dm_clear_policy(HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
        BTA_dm_block_role_switch_for(p_dev->peer_bdaddr);
        break;
      }
    }
+2 −2
Original line number Diff line number Diff line
@@ -241,8 +241,8 @@ extern void bta_sys_remove_uuid(uint16_t uuid16);
#define bta_sys_remove_uuid(ut)
#endif

void BTA_dm_clear_policy(uint8_t policy, const RawAddress& peer_addr);
void BTA_dm_set_policy(uint8_t policy, const RawAddress& peer_addr);
void BTA_dm_unblock_role_switch_for(const RawAddress& peer_addr);
void BTA_dm_block_role_switch_for(const RawAddress& peer_addr);
void BTA_dm_unblock_role_switch();
void BTA_dm_block_role_switch();