Loading system/bta/av/bta_av_aact.cc +6 −7 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading Loading @@ -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()); } } Loading Loading @@ -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; } Loading @@ -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 */ Loading Loading @@ -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 */ Loading system/bta/av/bta_av_main.cc +4 −7 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading system/bta/dm/bta_dm_act.cc +6 −12 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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 Loading Loading @@ -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; } } Loading system/bta/sys/bta_sys.h +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
system/bta/av/bta_av_aact.cc +6 −7 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading Loading @@ -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()); } } Loading Loading @@ -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; } Loading @@ -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 */ Loading Loading @@ -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 */ Loading
system/bta/av/bta_av_main.cc +4 −7 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading
system/bta/dm/bta_dm_act.cc +6 −12 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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 Loading Loading @@ -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; } } Loading
system/bta/sys/bta_sys.h +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading