Loading system/bta/av/bta_av_aact.cc +21 −20 Original line number Diff line number Diff line Loading @@ -1811,16 +1811,6 @@ void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { return; } /* disallow role switch during streaming, only if we are the central role * i.e. allow role switch, if we are peripheral. * It would not hurt us, if the peer device wants us to be central */ tHCI_ROLE cur_role; if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_for(p_scb->PeerAddress()); } BTM_block_sniff_mode_for(p_scb->PeerAddress()); if (p_scb->started) { p_scb->role |= BTA_AV_ROLE_START_INT; if (p_scb->wait != 0) { Loading Loading @@ -1852,6 +1842,18 @@ void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { p_scb->role |= BTA_AV_ROLE_START_INT; bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); /* disallow role switch during streaming, only if we are the central role * i.e. allow role switch, if we are peripheral. * It would not hurt us, if the peer device wants us to be central * disable sniff mode unconditionally during streaming */ tHCI_ROLE cur_role; if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); } else { BTM_block_sniff_mode_for(p_scb->PeerAddress()); } uint16_t result = AVDT_StartReq(&p_scb->avdt_handle, 1); if (result != AVDT_SUCCESS) { LOG_ERROR("%s: AVDT_StartReq failed for peer %s result:%d", __func__, Loading Loading @@ -1887,8 +1889,7 @@ void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { bta_av_cb.audio_open_cnt, p_data, start); bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); if (p_scb->co_started) { if (p_scb->offload_started) { Loading Loading @@ -2316,10 +2317,13 @@ void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { /* If souce is the central role, disable role switch during streaming. * Otherwise allow role switch, if source is peripheral. * Because it would not hurt source, if the peer device wants source to be * central */ * central. * disable sniff mode unconditionally during streaming */ if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_for(p_scb->PeerAddress()); BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); } else { BTM_block_sniff_mode_for(p_scb->PeerAddress()); } } Loading Loading @@ -2382,8 +2386,7 @@ void bta_av_start_failed(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { notify_start_failed(p_scb); } BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); p_scb->sco_suspend = false; } Loading @@ -2405,8 +2408,7 @@ void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, p_scb->open_status, p_scb->chnl, p_scb->co_started); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); if (bta_av_cb.audio_open_cnt <= 1) { BTM_default_unblock_role_switch(); } Loading Loading @@ -2510,8 +2512,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()); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); /* in case that we received suspend_ind, we may need to call co_stop here */ if (p_scb->co_started) { Loading system/stack/acl/btm_acl.cc +10 −0 Original line number Diff line number Diff line Loading @@ -722,6 +722,16 @@ void BTM_block_role_switch_for(const RawAddress& peer_addr) { btm_toggle_policy_off_for(peer_addr, HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void BTM_unblock_role_switch_and_sniff_mode_for(const RawAddress& peer_addr) { btm_toggle_policy_on_for( peer_addr, HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void BTM_block_role_switch_and_sniff_mode_for(const RawAddress& peer_addr) { btm_toggle_policy_off_for( peer_addr, HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void StackAclBtmAcl::btm_set_default_link_policy(tLINK_POLICY settings) { check_link_policy(&settings); btm_cb.acl_cb_.btm_def_link_policy = settings; Loading system/stack/include/acl_api.h +2 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ void BTM_unblock_sniff_mode_for(const RawAddress& peer_addr); void BTM_block_sniff_mode_for(const RawAddress& peer_addr); void BTM_unblock_role_switch_for(const RawAddress& peer_addr); void BTM_block_role_switch_for(const RawAddress& peer_addr); void BTM_unblock_role_switch_and_sniff_mode_for(const RawAddress& peer_addr); void BTM_block_role_switch_and_sniff_mode_for(const RawAddress& peer_addr); void BTM_default_unblock_role_switch(); void BTM_default_block_role_switch(); Loading Loading
system/bta/av/bta_av_aact.cc +21 −20 Original line number Diff line number Diff line Loading @@ -1811,16 +1811,6 @@ void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { return; } /* disallow role switch during streaming, only if we are the central role * i.e. allow role switch, if we are peripheral. * It would not hurt us, if the peer device wants us to be central */ tHCI_ROLE cur_role; if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_for(p_scb->PeerAddress()); } BTM_block_sniff_mode_for(p_scb->PeerAddress()); if (p_scb->started) { p_scb->role |= BTA_AV_ROLE_START_INT; if (p_scb->wait != 0) { Loading Loading @@ -1852,6 +1842,18 @@ void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { p_scb->role |= BTA_AV_ROLE_START_INT; bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); /* disallow role switch during streaming, only if we are the central role * i.e. allow role switch, if we are peripheral. * It would not hurt us, if the peer device wants us to be central * disable sniff mode unconditionally during streaming */ tHCI_ROLE cur_role; if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); } else { BTM_block_sniff_mode_for(p_scb->PeerAddress()); } uint16_t result = AVDT_StartReq(&p_scb->avdt_handle, 1); if (result != AVDT_SUCCESS) { LOG_ERROR("%s: AVDT_StartReq failed for peer %s result:%d", __func__, Loading Loading @@ -1887,8 +1889,7 @@ void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { bta_av_cb.audio_open_cnt, p_data, start); bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); if (p_scb->co_started) { if (p_scb->offload_started) { Loading Loading @@ -2316,10 +2317,13 @@ void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { /* If souce is the central role, disable role switch during streaming. * Otherwise allow role switch, if source is peripheral. * Because it would not hurt source, if the peer device wants source to be * central */ * central. * disable sniff mode unconditionally during streaming */ if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && (cur_role == HCI_ROLE_CENTRAL)) { BTM_block_role_switch_for(p_scb->PeerAddress()); BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); } else { BTM_block_sniff_mode_for(p_scb->PeerAddress()); } } Loading Loading @@ -2382,8 +2386,7 @@ void bta_av_start_failed(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { notify_start_failed(p_scb); } BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); p_scb->sco_suspend = false; } Loading @@ -2405,8 +2408,7 @@ void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, p_scb->open_status, p_scb->chnl, p_scb->co_started); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); if (bta_av_cb.audio_open_cnt <= 1) { BTM_default_unblock_role_switch(); } Loading Loading @@ -2510,8 +2512,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()); BTM_unblock_role_switch_for(p_scb->PeerAddress()); BTM_unblock_sniff_mode_for(p_scb->PeerAddress()); BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); /* in case that we received suspend_ind, we may need to call co_stop here */ if (p_scb->co_started) { Loading
system/stack/acl/btm_acl.cc +10 −0 Original line number Diff line number Diff line Loading @@ -722,6 +722,16 @@ void BTM_block_role_switch_for(const RawAddress& peer_addr) { btm_toggle_policy_off_for(peer_addr, HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void BTM_unblock_role_switch_and_sniff_mode_for(const RawAddress& peer_addr) { btm_toggle_policy_on_for( peer_addr, HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void BTM_block_role_switch_and_sniff_mode_for(const RawAddress& peer_addr) { btm_toggle_policy_off_for( peer_addr, HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_CENTRAL_PERIPHERAL_SWITCH); } void StackAclBtmAcl::btm_set_default_link_policy(tLINK_POLICY settings) { check_link_policy(&settings); btm_cb.acl_cb_.btm_def_link_policy = settings; Loading
system/stack/include/acl_api.h +2 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ void BTM_unblock_sniff_mode_for(const RawAddress& peer_addr); void BTM_block_sniff_mode_for(const RawAddress& peer_addr); void BTM_unblock_role_switch_for(const RawAddress& peer_addr); void BTM_block_role_switch_for(const RawAddress& peer_addr); void BTM_unblock_role_switch_and_sniff_mode_for(const RawAddress& peer_addr); void BTM_block_role_switch_and_sniff_mode_for(const RawAddress& peer_addr); void BTM_default_unblock_role_switch(); void BTM_default_block_role_switch(); Loading