Lines Matching refs:p_scb

85 static void bta_av_offload_codec_builder(tBTA_AV_SCB* p_scb,
172 static uint8_t bta_av_get_scb_handle(tBTA_AV_SCB* p_scb, uint8_t local_sep) { in bta_av_get_scb_handle() argument
174 if ((p_scb->seps[i].tsep == local_sep) && in bta_av_get_scb_handle()
175 A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, in bta_av_get_scb_handle()
176 p_scb->cfg.codec_info)) { in bta_av_get_scb_handle()
177 return (p_scb->seps[i].av_handle); in bta_av_get_scb_handle()
193 static uint8_t bta_av_get_scb_sep_type(tBTA_AV_SCB* p_scb, in bta_av_get_scb_sep_type() argument
196 if (p_scb->seps[i].av_handle == tavdt_handle) return (p_scb->seps[i].tsep); in bta_av_get_scb_sep_type()
212 static void bta_av_save_addr(tBTA_AV_SCB* p_scb, const RawAddress& bd_addr) { in bta_av_save_addr() argument
214 bd_addr.ToString().c_str(), p_scb->recfg_sup, in bta_av_save_addr()
215 p_scb->suspend_sup); in bta_av_save_addr()
216 if (p_scb->PeerAddress() != bd_addr) { in bta_av_save_addr()
218 p_scb->PeerAddress().ToString().c_str(), in bta_av_save_addr()
221 p_scb->recfg_sup = true; in bta_av_save_addr()
222 p_scb->suspend_sup = true; in bta_av_save_addr()
227 p_scb->OnConnected(bd_addr); in bta_av_save_addr()
240 static void notify_start_failed(tBTA_AV_SCB* p_scb) { in notify_start_failed() argument
242 p_scb->PeerAddress().ToString().c_str(), p_scb->role, p_scb->chnl, in notify_start_failed()
243 p_scb->hndl); in notify_start_failed()
246 p_scb->role &= ~BTA_AV_ROLE_START_INT; in notify_start_failed()
247 start.chnl = p_scb->chnl; in notify_start_failed()
250 start.hndl = p_scb->hndl; in notify_start_failed()
268 void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_st_rc_timer() argument
269 APPL_TRACE_DEBUG("%s: rc_handle:%d, use_rc: %d", __func__, p_scb->rc_handle, in bta_av_st_rc_timer()
270 p_scb->use_rc); in bta_av_st_rc_timer()
272 if ((p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) && in bta_av_st_rc_timer()
274 (p_scb->use_rc || (p_scb->role & BTA_AV_ROLE_AD_ACP))) { in bta_av_st_rc_timer()
275 if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { in bta_av_st_rc_timer()
276 bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, in bta_av_st_rc_timer()
277 BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); in bta_av_st_rc_timer()
279 p_scb->wait |= BTA_AV_WAIT_CHECK_RC; in bta_av_st_rc_timer()
294 static bool bta_av_next_getcap(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_next_getcap() argument
297 uint16_t uuid_int = p_scb->uuid_int; in bta_av_next_getcap()
305 for (i = p_scb->sep_info_idx; i < p_scb->num_seps; i++) { in bta_av_next_getcap()
307 if ((!p_scb->sep_info[i].in_use) && in bta_av_next_getcap()
308 (p_scb->sep_info[i].tsep == sep_requested) && in bta_av_next_getcap()
309 (p_scb->sep_info[i].media_type == p_scb->media_type)) { in bta_av_next_getcap()
310 p_scb->sep_info_idx = i; in bta_av_next_getcap()
313 bool get_all_cap = (p_scb->AvdtpVersion() >= AVDT_VERSION_1_3) && in bta_av_next_getcap()
315 AVDT_GetCapReq(p_scb->PeerAddress(), p_scb->hdi, p_scb->sep_info[i].seid, in bta_av_next_getcap()
316 &p_scb->peer_cap, &bta_av_proc_stream_evt, get_all_cap); in bta_av_next_getcap()
325 p_scb->PeerAddress().ToString().c_str()); in bta_av_next_getcap()
326 bta_av_ssm_execute(p_scb, BTA_AV_STR_GETCAP_FAIL_EVT, p_data); in bta_av_next_getcap()
345 tBTA_AV_SCB* p_scb = bta_av_cb.p_scb[scb_index]; in bta_av_proc_stream_evt() local
350 __func__, bd_addr.ToString().c_str(), handle, event, scb_index, p_scb); in bta_av_proc_stream_evt()
364 if (p_scb) { in bta_av_proc_stream_evt()
403 p_scb->recfg_sup = true; in bta_av_proc_stream_evt()
404 p_scb->suspend_sup = true; in bta_av_proc_stream_evt()
425 p_scb->hndl, handle); in bta_av_proc_stream_evt()
426 p_msg->hdr.layer_specific = p_scb->hndl; in bta_av_proc_stream_evt()
451 tBTA_AV_SCB* p_scb; in bta_av_sink_data_cback() local
459 p_scb = bta_av_cb.p_scb[index]; in bta_av_sink_data_cback()
460 if ((p_scb->avdt_handle == handle) && in bta_av_sink_data_cback()
461 (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK)) { in bta_av_sink_data_cback()
471 p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback( in bta_av_sink_data_cback()
472 p_scb->PeerAddress(), BTA_AV_SINK_MEDIA_DATA_EVT, (tBTA_AV_MEDIA*)p_pkt); in bta_av_sink_data_cback()
491 tBTA_AV_SCB* p_scb = NULL; in bta_av_a2dp_sdp_cback() local
493 p_scb = bta_av_addr_to_scb(peer_address); in bta_av_a2dp_sdp_cback()
495 if (p_scb == NULL) { in bta_av_a2dp_sdp_cback()
496 p_scb = bta_av_hndl_to_scb(bta_av_cb.handle); in bta_av_a2dp_sdp_cback()
498 if (p_scb == NULL) { in bta_av_a2dp_sdp_cback()
503 if (bta_av_cb.handle != p_scb->hndl) { in bta_av_a2dp_sdp_cback()
505 __func__, bta_av_cb.handle, p_scb->hndl); in bta_av_a2dp_sdp_cback()
510 p_scb->PeerAddress().ToString().c_str()); in bta_av_a2dp_sdp_cback()
513 p_scb->PeerAddress().ToString().c_str(), in bta_av_a2dp_sdp_cback()
523 p_scb->PeerAddress().ToString().c_str()); in bta_av_a2dp_sdp_cback()
526 p_scb->SetAvdtpVersion(p_service->avdt_version); in bta_av_a2dp_sdp_cback()
528 if (btif_config_set_bin(p_scb->PeerAddress().ToString(), in bta_av_a2dp_sdp_cback()
535 __func__, p_scb->PeerAddress().ToString().c_str()); in bta_av_a2dp_sdp_cback()
539 p_scb->SetAvdtpVersion(0); in bta_av_a2dp_sdp_cback()
541 p_msg->hdr.layer_specific = p_scb->hndl; in bta_av_a2dp_sdp_cback()
555 static void bta_av_adjust_seps_idx(tBTA_AV_SCB* p_scb, uint8_t avdt_handle) { in bta_av_adjust_seps_idx() argument
557 A2DP_CodecName(p_scb->cfg.codec_info)); in bta_av_adjust_seps_idx()
560 p_scb->seps[i].av_handle, in bta_av_adjust_seps_idx()
561 A2DP_CodecName(p_scb->seps[i].codec_info)); in bta_av_adjust_seps_idx()
562 if (p_scb->seps[i].av_handle && (p_scb->seps[i].av_handle == avdt_handle) && in bta_av_adjust_seps_idx()
563 A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, in bta_av_adjust_seps_idx()
564 p_scb->cfg.codec_info)) { in bta_av_adjust_seps_idx()
565 p_scb->sep_idx = i; in bta_av_adjust_seps_idx()
566 p_scb->avdt_handle = p_scb->seps[i].av_handle; in bta_av_adjust_seps_idx()
582 void bta_av_switch_role(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_switch_role() argument
584 tBTA_AV_API_OPEN* p_buf = &p_scb->q_info.open; in bta_av_switch_role()
587 p_scb->PeerAddress().ToString().c_str(), p_scb->wait); in bta_av_switch_role()
588 if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) in bta_av_switch_role()
589 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RETRY; in bta_av_switch_role()
592 p_scb->wait &= in bta_av_switch_role()
595 if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) { in bta_av_switch_role()
596 if (bta_av_switch_if_needed(p_scb) || in bta_av_switch_role()
597 !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { in bta_av_switch_role()
598 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; in bta_av_switch_role()
607 p_scb->PeerAddress().ToString().c_str(), p_scb->wait); in bta_av_switch_role()
612 if (bta_av_cb.rs_idx == (p_scb->hdi + 1)) { in bta_av_switch_role()
615 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_RETRY; in bta_av_switch_role()
616 p_scb->q_tag = 0; in bta_av_switch_role()
618 bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA*)p_buf); in bta_av_switch_role()
632 void bta_av_role_res(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_role_res() argument
636 p_scb->PeerAddress().ToString().c_str(), p_scb->q_tag, in bta_av_role_res()
637 p_scb->wait, p_scb->role); in bta_av_role_res()
638 if (p_scb->role & BTA_AV_ROLE_START_INT) initiator = true; in bta_av_role_res()
640 if (p_scb->q_tag == BTA_AV_Q_TAG_START) { in bta_av_role_res()
641 if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_STARTED) { in bta_av_role_res()
642 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_role_res()
644 p_scb->role &= ~BTA_AV_ROLE_START_INT; in bta_av_role_res()
645 bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_role_res()
648 start.chnl = p_scb->chnl; in bta_av_role_res()
650 start.hndl = p_scb->hndl; in bta_av_role_res()
656 bta_av_start_ok(p_scb, p_data); in bta_av_role_res()
658 } else if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) in bta_av_role_res()
659 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_FAILED; in bta_av_role_res()
660 } else if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) { in bta_av_role_res()
661 if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_OPEN) { in bta_av_role_res()
662 p_scb->role &= ~BTA_AV_ROLE_START_INT; in bta_av_role_res()
663 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_role_res()
668 av_open.bd_addr = p_scb->PeerAddress(); in bta_av_role_res()
669 av_open.chnl = p_scb->chnl; in bta_av_role_res()
670 av_open.hndl = p_scb->hndl; in bta_av_role_res()
672 if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) { in bta_av_role_res()
674 } else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) { in bta_av_role_res()
682 p_scb->q_info.open.switch_res = BTA_AV_RS_DONE; in bta_av_role_res()
683 bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA*)&(p_scb->q_info.open)); in bta_av_role_res()
688 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->q_tag, in bta_av_role_res()
689 p_scb->wait); in bta_av_role_res()
694 p_scb->PeerAddress().ToString().c_str(), p_scb->wait, in bta_av_role_res()
695 p_scb->role); in bta_av_role_res()
708 void bta_av_delay_co(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_delay_co() argument
710 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_delay_co()
712 p_scb->p_cos->delay(p_scb->hndl, p_scb->PeerAddress(), in bta_av_delay_co()
725 void bta_av_do_disc_a2dp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_do_disc_a2dp() argument
738 memcpy(&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); in bta_av_do_disc_a2dp()
742 if (bta_av_switch_if_needed(p_scb) || in bta_av_do_disc_a2dp()
743 !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { in bta_av_do_disc_a2dp()
745 memcpy(&p_scb->q_info.open, &p_data->api_open, in bta_av_do_disc_a2dp()
747 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; in bta_av_do_disc_a2dp()
748 p_scb->q_tag = BTA_AV_Q_TAG_OPEN; in bta_av_do_disc_a2dp()
756 p_scb->open_status = BTA_AV_FAIL_ROLE; in bta_av_do_disc_a2dp()
758 p_scb->PeerAddress().ToString().c_str()); in bta_av_do_disc_a2dp()
759 bta_av_ssm_execute(p_scb, BTA_AV_SDP_DISC_FAIL_EVT, NULL); in bta_av_do_disc_a2dp()
763 p_data = (tBTA_AV_DATA*)&p_scb->q_info.open; in bta_av_do_disc_a2dp()
765 if (bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { in bta_av_do_disc_a2dp()
768 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; in bta_av_do_disc_a2dp()
778 ok_continue, p_scb->wait, p_scb->q_tag); in bta_av_do_disc_a2dp()
782 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_do_disc_a2dp()
784 if (p_scb->wait & BTA_AV_WAIT_CHECK_RC) { in bta_av_do_disc_a2dp()
785 p_scb->wait &= ~BTA_AV_WAIT_CHECK_RC; in bta_av_do_disc_a2dp()
786 bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, in bta_av_do_disc_a2dp()
787 BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); in bta_av_do_disc_a2dp()
791 bta_av_save_addr(p_scb, p_data->api_open.bd_addr); in bta_av_do_disc_a2dp()
792 p_scb->use_rc = p_data->api_open.use_rc; in bta_av_do_disc_a2dp()
794 bta_sys_app_open(BTA_ID_AV, p_scb->app_id, p_scb->PeerAddress()); in bta_av_do_disc_a2dp()
800 p_scb->uuid_int = p_data->api_open.uuid; in bta_av_do_disc_a2dp()
801 p_scb->sdp_discovery_started = true; in bta_av_do_disc_a2dp()
802 if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SINK) in bta_av_do_disc_a2dp()
804 else if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) in bta_av_do_disc_a2dp()
810 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->uuid_int, in bta_av_do_disc_a2dp()
813 sdp_uuid, p_scb->PeerAddress(), &db_params, bta_av_a2dp_sdp_cback); in bta_av_do_disc_a2dp()
818 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->uuid_int, in bta_av_do_disc_a2dp()
820 bta_av_a2dp_sdp_cback(false, nullptr, p_scb->PeerAddress()); in bta_av_do_disc_a2dp()
823 bta_av_cb.handle = p_scb->hndl; in bta_av_do_disc_a2dp()
836 void bta_av_cleanup(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_cleanup() argument
840 LOG_INFO("%s peer %s", __func__, p_scb->PeerAddress().ToString().c_str()); in bta_av_cleanup()
843 p_scb->sdp_discovery_started = false; in bta_av_cleanup()
844 p_scb->SetAvdtpVersion(0); in bta_av_cleanup()
847 p_scb->open_status = BTA_AV_SUCCESS; in bta_av_cleanup()
850 msg.hdr.layer_specific = p_scb->hndl; in bta_av_cleanup()
851 p_scb->started = false; in bta_av_cleanup()
852 p_scb->use_rtp_header_marker_bit = false; in bta_av_cleanup()
853 p_scb->cong = false; in bta_av_cleanup()
854 p_scb->role = role; in bta_av_cleanup()
855 p_scb->cur_psc_mask = 0; in bta_av_cleanup()
856 p_scb->wait = 0; in bta_av_cleanup()
857 p_scb->num_disc_snks = 0; in bta_av_cleanup()
858 p_scb->coll_mask = 0; in bta_av_cleanup()
859 alarm_cancel(p_scb->avrc_ct_timer); in bta_av_cleanup()
860 alarm_cancel(p_scb->link_signalling_timer); in bta_av_cleanup()
861 alarm_cancel(p_scb->accept_signalling_timer); in bta_av_cleanup()
874 if (p_scb->deregistering) { in bta_av_cleanup()
877 if (p_scb->seps[i].av_handle) AVDT_RemoveStream(p_scb->seps[i].av_handle); in bta_av_cleanup()
878 p_scb->seps[i].av_handle = 0; in bta_av_cleanup()
885 msg.peer_addr = p_scb->PeerAddress(); in bta_av_cleanup()
899 void bta_av_free_sdb(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_free_sdb() argument
900 p_scb->sdp_discovery_started = false; in bta_av_free_sdb()
912 void bta_av_config_ind(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_config_ind() argument
916 uint8_t psc_mask = (p_evt_cfg->psc_mask | p_scb->cfg.psc_mask); in bta_av_config_ind()
921 local_sep = bta_av_get_scb_sep_type(p_scb, p_msg->handle); in bta_av_config_ind()
922 p_scb->avdt_label = p_data->str_msg.msg.hdr.label; in bta_av_config_ind()
925 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_config_ind()
930 memcpy(p_scb->cfg.codec_info, p_evt_cfg->codec_info, AVDT_CODEC_SIZE); in bta_av_config_ind()
931 bta_av_save_addr(p_scb, p_data->str_msg.bd_addr); in bta_av_config_ind()
934 p_scb->coll_mask = 0; in bta_av_config_ind()
935 alarm_cancel(p_scb->accept_signalling_timer); in bta_av_config_ind()
940 ((psc_mask != p_scb->cfg.psc_mask) && in bta_av_config_ind()
941 (psc_mask != (p_scb->cfg.psc_mask & ~AVDT_PSC_DELAY_RPT)))) { in bta_av_config_ind()
942 setconfig.hndl = p_scb->hndl; /* we may not need this */ in bta_av_config_ind()
944 bta_av_ssm_execute(p_scb, BTA_AV_CI_SETCONFIG_FAIL_EVT, in bta_av_config_ind()
947 p_info = &p_scb->sep_info[0]; in bta_av_config_ind()
949 p_info->media_type = p_scb->media_type; in bta_av_config_ind()
958 p_scb->role |= BTA_AV_ROLE_AD_ACP; in bta_av_config_ind()
959 p_scb->cur_psc_mask = p_evt_cfg->psc_mask; in bta_av_config_ind()
961 p_scb->use_rc = true; in bta_av_config_ind()
963 p_scb->use_rc = false; in bta_av_config_ind()
965 p_scb->num_seps = 1; in bta_av_config_ind()
966 p_scb->sep_info_idx = 0; in bta_av_config_ind()
968 p_info->seid, p_scb->use_rc, p_scb->cur_psc_mask); in bta_av_config_ind()
972 p_scb->p_cos->setcfg(p_scb->hndl, p_scb->PeerAddress(), in bta_av_config_ind()
977 p_scb->p_cos->setcfg(p_scb->hndl, p_scb->PeerAddress(), in bta_av_config_ind()
994 void bta_av_disconnect_req(tBTA_AV_SCB* p_scb, in bta_av_disconnect_req() argument
999 bta_av_cb.conn_lcb, p_scb->PeerAddress().ToString().c_str()); in bta_av_disconnect_req()
1001 alarm_cancel(p_scb->link_signalling_timer); in bta_av_disconnect_req()
1002 alarm_cancel(p_scb->accept_signalling_timer); in bta_av_disconnect_req()
1003 alarm_cancel(p_scb->avrc_ct_timer); in bta_av_disconnect_req()
1007 if ((bta_av_cb.conn_lcb & (1 << p_scb->hdi)) != 0) { in bta_av_disconnect_req()
1008 p_rcb = bta_av_get_rcb_by_shdl((uint8_t)(p_scb->hdi + 1)); in bta_av_disconnect_req()
1010 AVDT_DisconnectReq(p_scb->PeerAddress(), &bta_av_proc_stream_evt); in bta_av_disconnect_req()
1013 __func__, bta_av_cb.conn_lcb, p_scb->hndl, p_scb->hdi); in bta_av_disconnect_req()
1014 bta_av_ssm_execute(p_scb, BTA_AV_AVDT_DISCONNECT_EVT, NULL); in bta_av_disconnect_req()
1027 void bta_av_security_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_security_req() argument
1029 AVDT_SecurityReq(p_scb->avdt_handle, p_data->api_protect_req.p_data, in bta_av_security_req()
1043 void bta_av_security_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_security_rsp() argument
1045 AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, in bta_av_security_rsp()
1050 AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, NULL, in bta_av_security_rsp()
1064 void bta_av_setconfig_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_setconfig_rsp() argument
1072 local_sep = bta_av_get_scb_sep_type(p_scb, avdt_handle); in bta_av_setconfig_rsp()
1073 bta_av_adjust_seps_idx(p_scb, avdt_handle); in bta_av_setconfig_rsp()
1076 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_setconfig_rsp()
1077 p_scb->avdt_handle, p_scb->sep_idx, p_scb->cur_psc_mask); in bta_av_setconfig_rsp()
1081 (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) { in bta_av_setconfig_rsp()
1083 av_sink_codec_info.avk_config.bd_addr = p_scb->PeerAddress(); in bta_av_setconfig_rsp()
1084 av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; in bta_av_setconfig_rsp()
1085 p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback( in bta_av_setconfig_rsp()
1086 p_scb->PeerAddress(), BTA_AV_SINK_MEDIA_CFG_EVT, &av_sink_codec_info); in bta_av_setconfig_rsp()
1089 AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, in bta_av_setconfig_rsp()
1092 alarm_cancel(p_scb->link_signalling_timer); in bta_av_setconfig_rsp()
1095 p_scb->wait = BTA_AV_WAIT_ACP_CAPS_ON; in bta_av_setconfig_rsp()
1097 p_scb->role |= BTA_AV_ROLE_SUSPEND_OPT; in bta_av_setconfig_rsp()
1099 p_data->ci_setconfig.recfg_needed, p_scb->role, num); in bta_av_setconfig_rsp()
1102 p_scb->num_seps = num; in bta_av_setconfig_rsp()
1104 if (p_scb->cur_psc_mask & AVDT_PSC_DELAY_RPT) in bta_av_setconfig_rsp()
1105 p_scb->SetAvdtpVersion(AVDT_VERSION_1_3); in bta_av_setconfig_rsp()
1107 if (A2DP_GetCodecType(p_scb->cfg.codec_info) == A2DP_MEDIA_CT_SBC || in bta_av_setconfig_rsp()
1115 p_scb->p_cos->disc_res(p_scb->hndl, p_scb->PeerAddress(), num, num, 0, in bta_av_setconfig_rsp()
1120 if (p_scb->uuid_int == 0) p_scb->uuid_int = p_scb->open_api.uuid; in bta_av_setconfig_rsp()
1121 bta_av_discover_req(p_scb, NULL); in bta_av_setconfig_rsp()
1128 p_scb->sep_info[i].in_use = false; in bta_av_setconfig_rsp()
1129 p_scb->sep_info[i].tsep = AVDT_TSEP_SNK; in bta_av_setconfig_rsp()
1130 p_scb->sep_info[i].media_type = p_scb->media_type; in bta_av_setconfig_rsp()
1131 p_scb->sep_info[i].seid = p_seid[i - 1]; in bta_av_setconfig_rsp()
1138 if (p_scb->uuid_int == 0) p_scb->uuid_int = p_scb->open_api.uuid; in bta_av_setconfig_rsp()
1139 bta_av_next_getcap(p_scb, p_data); in bta_av_setconfig_rsp()
1153 void bta_av_str_opened(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_str_opened() argument
1159 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl); in bta_av_str_opened()
1161 msg.hdr.layer_specific = p_scb->hndl; in bta_av_str_opened()
1163 msg.peer_addr = p_scb->PeerAddress(); in bta_av_str_opened()
1164 p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); in bta_av_str_opened()
1167 p_scb->cong = true; in bta_av_str_opened()
1169 btif_storage_get_stored_remote_name(p_scb->PeerAddress(), remote_name); in bta_av_str_opened()
1172 &p_scb->PeerAddress())) { in bta_av_str_opened()
1174 __func__, remote_name, p_scb->PeerAddress().ToString().c_str()); in bta_av_str_opened()
1175 p_scb->suspend_sup = false; in bta_av_str_opened()
1178 p_scb->stream_mtu = in bta_av_str_opened()
1180 APPL_TRACE_DEBUG("%s: l2c_cid: 0x%x stream_mtu: %d", __func__, p_scb->l2c_cid, in bta_av_str_opened()
1181 p_scb->stream_mtu); in bta_av_str_opened()
1184 L2CA_SetTxPriority(p_scb->l2c_cid, L2CAP_CHNL_PRIORITY_HIGH); in bta_av_str_opened()
1185 L2CA_SetChnlFlushability(p_scb->l2c_cid, true); in bta_av_str_opened()
1187 bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->PeerAddress()); in bta_av_str_opened()
1188 memset(&p_scb->q_info, 0, sizeof(tBTA_AV_Q_INFO)); in bta_av_str_opened()
1190 p_scb->l2c_bufs = 0; in bta_av_str_opened()
1191 p_scb->p_cos->open(p_scb->hndl, p_scb->PeerAddress(), p_scb->stream_mtu); in bta_av_str_opened()
1205 open.bd_addr = p_scb->PeerAddress(); in bta_av_str_opened()
1206 open.chnl = p_scb->chnl; in bta_av_str_opened()
1207 open.hndl = p_scb->hndl; in bta_av_str_opened()
1210 p = BTM_ReadRemoteFeatures(p_scb->PeerAddress()); in bta_av_str_opened()
1215 &p_scb->PeerAddress())) { in bta_av_str_opened()
1220 bta_ar_avdt_conn(BTA_ID_AV, open.bd_addr, p_scb->hdi); in bta_av_str_opened()
1221 if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) { in bta_av_str_opened()
1224 } else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) { in bta_av_str_opened()
1225 open.starting = bta_av_chk_start(p_scb); in bta_av_str_opened()
1233 bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); in bta_av_str_opened()
1242 AVDT_AbortReq(p_scb->avdt_handle); in bta_av_str_opened()
1255 void bta_av_security_ind(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_security_ind() argument
1256 p_scb->avdt_label = p_data->str_msg.msg.hdr.label; in bta_av_security_ind()
1260 protect_req.chnl = p_scb->chnl; in bta_av_security_ind()
1261 protect_req.hndl = p_scb->hndl; in bta_av_security_ind()
1271 AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, NULL, in bta_av_security_ind()
1285 void bta_av_security_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_security_cfm() argument
1288 protect_rsp.chnl = p_scb->chnl; in bta_av_security_cfm()
1289 protect_rsp.hndl = p_scb->hndl; in bta_av_security_cfm()
1309 void bta_av_do_close(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_do_close() argument
1310 APPL_TRACE_DEBUG("%s: p_scb->co_started=%d", __func__, p_scb->co_started); in bta_av_do_close()
1313 if (p_scb->co_started) { in bta_av_do_close()
1314 bta_av_str_stopped(p_scb, NULL); in bta_av_do_close()
1316 alarm_cancel(p_scb->link_signalling_timer); in bta_av_do_close()
1319 p_scb->started = false; in bta_av_do_close()
1320 p_scb->use_rtp_header_marker_bit = false; in bta_av_do_close()
1323 L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); in bta_av_do_close()
1325 AVDT_CloseReq(p_scb->avdt_handle); in bta_av_do_close()
1331 bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_CLOSE_REQ_TIME_VAL, in bta_av_do_close()
1332 BTA_AV_API_CLOSE_EVT, p_scb->hndl); in bta_av_do_close()
1344 void bta_av_connect_req(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_connect_req() argument
1346 p_scb->PeerAddress().ToString().c_str(), p_scb->coll_mask); in bta_av_connect_req()
1347 p_scb->sdp_discovery_started = false; in bta_av_connect_req()
1348 if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) { in bta_av_connect_req()
1352 p_scb->coll_mask); in bta_av_connect_req()
1353 p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; in bta_av_connect_req()
1355 p_scb->coll_mask); in bta_av_connect_req()
1359 AVDT_ConnectReq(p_scb->PeerAddress(), p_scb->hdi, &bta_av_proc_stream_evt); in bta_av_connect_req()
1371 void bta_av_sdp_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_sdp_failed() argument
1373 p_scb->PeerAddress().ToString().c_str(), p_scb->open_status); in bta_av_sdp_failed()
1375 if (p_scb->open_status == BTA_AV_SUCCESS) { in bta_av_sdp_failed()
1376 p_scb->open_status = BTA_AV_FAIL_SDP; in bta_av_sdp_failed()
1379 p_scb->sdp_discovery_started = false; in bta_av_sdp_failed()
1380 bta_av_str_closed(p_scb, p_data); in bta_av_sdp_failed()
1394 void bta_av_disc_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_disc_results() argument
1397 uint16_t uuid_int = p_scb->uuid_int; in bta_av_disc_results()
1400 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_disc_results()
1404 p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; in bta_av_disc_results()
1406 for (i = 0; i < p_scb->num_seps; i++) { in bta_av_disc_results()
1408 if ((!p_scb->sep_info[i].in_use) && in bta_av_disc_results()
1409 (p_scb->sep_info[i].media_type == p_scb->media_type)) { in bta_av_disc_results()
1410 if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && in bta_av_disc_results()
1414 if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SRC) && in bta_av_disc_results()
1420 p_scb->p_cos->disc_res(p_scb->hndl, p_scb->PeerAddress(), p_scb->num_seps, in bta_av_disc_results()
1422 p_scb->num_disc_snks = num_snks; in bta_av_disc_results()
1423 p_scb->num_disc_srcs = num_srcs; in bta_av_disc_results()
1426 if (p_scb->num_seps > 0) { in bta_av_disc_results()
1428 p_scb->sep_info_idx = 0; in bta_av_disc_results()
1431 bta_av_next_getcap(p_scb, p_data); in bta_av_disc_results()
1436 p_scb->PeerAddress().ToString().c_str()); in bta_av_disc_results()
1437 bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); in bta_av_disc_results()
1452 void bta_av_disc_res_as_acp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_disc_res_as_acp() argument
1456 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl); in bta_av_disc_res_as_acp()
1459 p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; in bta_av_disc_res_as_acp()
1461 for (i = 0; i < p_scb->num_seps; i++) { in bta_av_disc_res_as_acp()
1463 if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && in bta_av_disc_res_as_acp()
1464 (p_scb->sep_info[i].media_type == p_scb->media_type)) { in bta_av_disc_res_as_acp()
1465 p_scb->sep_info[i].in_use = false; in bta_av_disc_res_as_acp()
1469 p_scb->p_cos->disc_res(p_scb->hndl, p_scb->PeerAddress(), p_scb->num_seps, in bta_av_disc_res_as_acp()
1471 p_scb->num_disc_snks = num_snks; in bta_av_disc_res_as_acp()
1472 p_scb->num_disc_srcs = 0; in bta_av_disc_res_as_acp()
1475 if (p_scb->num_seps > 0) { in bta_av_disc_res_as_acp()
1477 p_scb->sep_info_idx = 0; in bta_av_disc_res_as_acp()
1480 bta_av_next_getcap(p_scb, p_data); in bta_av_disc_res_as_acp()
1485 p_scb->PeerAddress().ToString().c_str()); in bta_av_disc_res_as_acp()
1486 bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); in bta_av_disc_res_as_acp()
1499 void bta_av_save_caps(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_save_caps() argument
1501 tAVDT_SEP_INFO* p_info = &p_scb->sep_info[p_scb->sep_info_idx]; in bta_av_save_caps()
1502 uint8_t old_wait = p_scb->wait; in bta_av_save_caps()
1507 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_save_caps()
1508 p_scb->num_seps, p_scb->sep_info_idx, p_scb->wait); in bta_av_save_caps()
1510 A2DP_CodecInfoString(p_scb->peer_cap.codec_info).c_str()); in bta_av_save_caps()
1512 cfg = p_scb->peer_cap; in bta_av_save_caps()
1514 if (p_scb->p_cos->getcfg(p_scb->hndl, p_scb->PeerAddress(), cfg.codec_info, in bta_av_save_caps()
1515 &p_scb->sep_info_idx, p_info->seid, &cfg.num_protect, in bta_av_save_caps()
1517 p_scb->sep_info_idx++; in bta_av_save_caps()
1519 p_scb->sep_info_idx); in bta_av_save_caps()
1524 p_scb->sep_info_idx); in bta_av_save_caps()
1529 if (p_scb->num_seps > p_scb->sep_info_idx && !getcap_done) { in bta_av_save_caps()
1534 if (!bta_av_next_getcap(p_scb, p_data)) getcap_done = true; in bta_av_save_caps()
1541 __func__, p_scb->num_seps, p_scb->sep_info_idx, in bta_av_save_caps()
1542 p_scb->wait); in bta_av_save_caps()
1543 p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON | BTA_AV_WAIT_ACP_CAPS_STARTED); in bta_av_save_caps()
1545 bta_av_start_ok(p_scb, NULL); in bta_av_save_caps()
1559 void bta_av_set_use_rc(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_set_use_rc() argument
1560 p_scb->use_rc = true; in bta_av_set_use_rc()
1572 void bta_av_cco_close(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_cco_close() argument
1574 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl); in bta_av_cco_close()
1575 p_scb->p_cos->close(p_scb->hndl, p_scb->PeerAddress()); in bta_av_cco_close()
1587 void bta_av_open_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_open_failed() argument
1593 p_scb->PeerAddress().ToString().c_str()); in bta_av_open_failed()
1594 p_scb->open_status = BTA_AV_FAIL_STREAM; in bta_av_open_failed()
1595 bta_av_cco_close(p_scb, p_data); in bta_av_open_failed()
1600 p_opened_scb = bta_av_cb.p_scb[idx]; in bta_av_open_failed()
1602 (p_opened_scb->PeerAddress() == p_scb->PeerAddress())) in bta_av_open_failed()
1611 open.bd_addr = p_scb->PeerAddress(); in bta_av_open_failed()
1612 open.chnl = p_scb->chnl; in bta_av_open_failed()
1613 open.hndl = p_scb->hndl; in bta_av_open_failed()
1615 open.starting = bta_av_chk_start(p_scb); in bta_av_open_failed()
1618 bta_av_set_scb_sst_init(p_scb); in bta_av_open_failed()
1620 if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) { in bta_av_open_failed()
1622 } else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) { in bta_av_open_failed()
1636 AVDT_DisconnectReq(p_scb->PeerAddress(), &bta_av_proc_stream_evt); in bta_av_open_failed()
1651 void bta_av_getcap_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_getcap_results() argument
1652 AvdtpSepConfig cfg = p_scb->cfg; in bta_av_getcap_results()
1653 uint8_t media_type = A2DP_GetMediaType(p_scb->peer_cap.codec_info); in bta_av_getcap_results()
1654 tAVDT_SEP_INFO* p_info = &p_scb->sep_info[p_scb->sep_info_idx]; in bta_av_getcap_results()
1657 cfg.num_protect = p_scb->peer_cap.num_protect; in bta_av_getcap_results()
1658 memcpy(cfg.codec_info, p_scb->peer_cap.codec_info, AVDT_CODEC_SIZE); in bta_av_getcap_results()
1659 memcpy(cfg.protect_info, p_scb->peer_cap.protect_info, AVDT_PROTECT_SIZE); in bta_av_getcap_results()
1662 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_getcap_results()
1663 p_scb->hndl, p_scb->peer_cap.num_codec, p_scb->cfg.psc_mask); in bta_av_getcap_results()
1665 p_scb->media_type); in bta_av_getcap_results()
1667 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_getcap_results()
1670 if ((p_scb->peer_cap.num_codec != 0) && (media_type == p_scb->media_type) && in bta_av_getcap_results()
1671 (p_scb->p_cos->getcfg(p_scb->hndl, p_scb->PeerAddress(), cfg.codec_info, in bta_av_getcap_results()
1672 &p_scb->sep_info_idx, p_info->seid, in bta_av_getcap_results()
1676 uint16_t uuid_int = p_scb->uuid_int; in bta_av_getcap_results()
1679 p_scb->cfg = cfg; in bta_av_getcap_results()
1682 p_scb->sep_info_idx); in bta_av_getcap_results()
1684 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_getcap_results()
1688 bta_av_adjust_seps_idx(p_scb, in bta_av_getcap_results()
1689 bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); in bta_av_getcap_results()
1691 bta_av_adjust_seps_idx(p_scb, in bta_av_getcap_results()
1692 bta_av_get_scb_handle(p_scb, AVDT_TSEP_SNK)); in bta_av_getcap_results()
1694 p_scb->sep_idx, p_scb->avdt_handle, p_scb->hndl); in bta_av_getcap_results()
1697 cfg.psc_mask &= p_scb->peer_cap.psc_mask; in bta_av_getcap_results()
1698 p_scb->cur_psc_mask = cfg.psc_mask; in bta_av_getcap_results()
1702 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_getcap_results()
1703 p_scb->sep_idx, p_scb->sep_info_idx, p_scb->cur_psc_mask); in bta_av_getcap_results()
1706 (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) { in bta_av_getcap_results()
1709 av_sink_codec_info.avk_config.bd_addr = p_scb->PeerAddress(); in bta_av_getcap_results()
1710 av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; in bta_av_getcap_results()
1711 p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback( in bta_av_getcap_results()
1712 p_scb->PeerAddress(), BTA_AV_SINK_MEDIA_CFG_EVT, &av_sink_codec_info); in bta_av_getcap_results()
1720 AVDT_OpenReq(p_scb->seps[p_scb->sep_idx].av_handle, p_scb->PeerAddress(), in bta_av_getcap_results()
1721 p_scb->hdi, p_scb->sep_info[p_scb->sep_info_idx].seid, &cfg); in bta_av_getcap_results()
1724 p_scb->sep_info_idx++; in bta_av_getcap_results()
1725 bta_av_next_getcap(p_scb, p_data); in bta_av_getcap_results()
1738 void bta_av_setconfig_rej(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_setconfig_rej() argument
1742 bta_av_adjust_seps_idx(p_scb, avdt_handle); in bta_av_setconfig_rej()
1744 p_scb->sep_idx, p_scb->avdt_handle, p_scb->hndl); in bta_av_setconfig_rej()
1745 AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_UNSUP_CFG, 0); in bta_av_setconfig_rej()
1748 reject.hndl = p_scb->hndl; in bta_av_setconfig_rej()
1764 void bta_av_discover_req(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_discover_req() argument
1767 AVDT_DiscoverReq(p_scb->PeerAddress(), p_scb->hdi, p_scb->sep_info, in bta_av_discover_req()
1780 void bta_av_conn_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_conn_failed() argument
1782 p_scb->PeerAddress().ToString().c_str(), p_scb->open_status); in bta_av_conn_failed()
1784 p_scb->open_status = BTA_AV_FAIL_STREAM; in bta_av_conn_failed()
1785 bta_av_str_closed(p_scb, p_data); in bta_av_conn_failed()
1797 void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_do_start() argument
1801 PRIVATE_ADDRESS(p_scb->PeerAddress()), in bta_av_do_start()
1802 logbool(bta_av_cb.sco_occupied).c_str(), p_scb->role, in bta_av_do_start()
1803 logbool(p_scb->started).c_str(), p_scb->wait); in bta_av_do_start()
1806 bta_av_start_failed(p_scb, p_data); in bta_av_do_start()
1810 if (p_scb->started) { in bta_av_do_start()
1811 p_scb->role |= BTA_AV_ROLE_START_INT; in bta_av_do_start()
1812 if (p_scb->wait != 0) { in bta_av_do_start()
1816 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_do_start()
1817 logbool(bta_av_cb.sco_occupied).c_str(), p_scb->role, in bta_av_do_start()
1818 logbool(p_scb->started).c_str(), p_scb->wait); in bta_av_do_start()
1821 if (p_scb->role & BTA_AV_ROLE_SUSPEND) { in bta_av_do_start()
1822 notify_start_failed(p_scb); in bta_av_do_start()
1824 bta_av_start_ok(p_scb, NULL); in bta_av_do_start()
1829 if ((p_scb->role & BTA_AV_ROLE_START_INT) != 0) { in bta_av_do_start()
1833 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_do_start()
1834 logbool(bta_av_cb.sco_occupied).c_str(), p_scb->role, in bta_av_do_start()
1835 logbool(p_scb->started).c_str(), p_scb->wait); in bta_av_do_start()
1839 p_scb->role |= BTA_AV_ROLE_START_INT; in bta_av_do_start()
1840 bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_do_start()
1846 if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && in bta_av_do_start()
1848 BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_do_start()
1850 BTM_block_sniff_mode_for(p_scb->PeerAddress()); in bta_av_do_start()
1853 uint16_t result = AVDT_StartReq(&p_scb->avdt_handle, 1); in bta_av_do_start()
1856 p_scb->PeerAddress().ToString().c_str(), result); in bta_av_do_start()
1857 bta_av_start_failed(p_scb, p_data); in bta_av_do_start()
1862 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_do_start()
1863 logbool(bta_av_cb.sco_occupied).c_str(), p_scb->role, in bta_av_do_start()
1864 logbool(p_scb->started).c_str(), p_scb->wait); in bta_av_do_start()
1876 void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_str_stopped() argument
1878 uint8_t start = p_scb->started; in bta_av_str_stopped()
1884 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_str_stopped()
1887 bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_str_stopped()
1888 BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_str_stopped()
1890 if (p_scb->co_started) { in bta_av_str_stopped()
1891 if (bta_av_cb.offload_started_hndl == p_scb->hndl) { in bta_av_str_stopped()
1894 } else if (bta_av_cb.offload_start_pending_hndl == p_scb->hndl) { in bta_av_str_stopped()
1900 bta_av_stream_chg(p_scb, false); in bta_av_str_stopped()
1901 p_scb->co_started = false; in bta_av_str_stopped()
1903 p_scb->p_cos->stop(p_scb->hndl, p_scb->PeerAddress()); in bta_av_str_stopped()
1907 if (BTA_AV_CHNL_AUDIO == p_scb->chnl) { in bta_av_str_stopped()
1908 while (!list_is_empty(p_scb->a2dp_list)) { in bta_av_str_stopped()
1909 p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); in bta_av_str_stopped()
1910 list_remove(p_scb->a2dp_list, p_buf); in bta_av_str_stopped()
1916 L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); in bta_av_str_stopped()
1919 suspend_rsp.chnl = p_scb->chnl; in bta_av_str_stopped()
1920 suspend_rsp.hndl = p_scb->hndl; in bta_av_str_stopped()
1924 p_scb->PeerAddress().ToString().c_str(), start, in bta_av_str_stopped()
1925 p_scb->suspend_sup); in bta_av_str_stopped()
1926 if ((start) && (p_scb->suspend_sup)) { in bta_av_str_stopped()
1928 p_scb->l2c_bufs = 0; in bta_av_str_stopped()
1929 AVDT_SuspendReq(&p_scb->avdt_handle, 1); in bta_av_str_stopped()
1934 if ((sus_evt) && (p_scb->state != BTA_AV_RCFG_SST)) { in bta_av_str_stopped()
1949 if (p_scb->state != BTA_AV_RCFG_SST || in bta_av_str_stopped()
1969 void bta_av_reconfig(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_reconfig() argument
1974 APPL_TRACE_DEBUG("%s: r:%d, s:%d idx: %d (o:%d)", __func__, p_scb->recfg_sup, in bta_av_reconfig()
1975 p_scb->suspend_sup, p_scb->rcfg_idx, p_scb->sep_info_idx); in bta_av_reconfig()
1977 p_scb->num_recfg = 0; in bta_av_reconfig()
1979 p_cfg = &p_scb->cfg; in bta_av_reconfig()
1981 alarm_cancel(p_scb->avrc_ct_timer); in bta_av_reconfig()
1984 p_scb->sep_info_idx, p_scb->rcfg_idx, p_rcfg->sep_info_idx); in bta_av_reconfig()
1986 A2DP_CodecInfoString(p_scb->peer_cap.codec_info).c_str()); in bta_av_reconfig()
1988 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_reconfig()
1993 kBtmLogTag, p_scb->PeerAddress(), "Codec reconfig", in bta_av_reconfig()
1994 base::StringPrintf("%s => %s", A2DP_CodecName(p_scb->cfg.codec_info), in bta_av_reconfig()
2000 p_scb->rcfg_idx = p_rcfg->sep_info_idx; in bta_av_reconfig()
2001 p_cfg->psc_mask = p_scb->cur_psc_mask; in bta_av_reconfig()
2007 if ((p_scb->rcfg_idx == p_scb->sep_info_idx) && p_rcfg->suspend && in bta_av_reconfig()
2008 p_scb->recfg_sup && p_scb->suspend_sup) { in bta_av_reconfig()
2009 if (p_scb->started) { in bta_av_reconfig()
2014 bta_av_str_stopped(p_scb, (tBTA_AV_DATA*)&stop); in bta_av_reconfig()
2019 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_reconfig()
2020 AVDT_ReconfigReq(p_scb->avdt_handle, &p_scb->cfg); in bta_av_reconfig()
2021 p_scb->cfg.psc_mask = p_scb->cur_psc_mask; in bta_av_reconfig()
2026 __func__, p_scb->started, p_scb->state, in bta_av_reconfig()
2028 if (p_scb->started) { in bta_av_reconfig()
2030 if ((p_scb->rcfg_idx != p_scb->sep_info_idx) && p_scb->recfg_sup) { in bta_av_reconfig()
2036 bta_av_str_stopped(p_scb, (tBTA_AV_DATA*)&stop); in bta_av_reconfig()
2038 bta_av_str_stopped(p_scb, NULL); in bta_av_reconfig()
2040 p_scb->started = false; in bta_av_reconfig()
2043 bta_av_str_stopped(p_scb, NULL); in bta_av_reconfig()
2046 L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); in bta_av_reconfig()
2047 AVDT_CloseReq(p_scb->avdt_handle); in bta_av_reconfig()
2060 void bta_av_data_path(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_data_path() argument
2067 if (!p_scb->started) return; in bta_av_data_path()
2069 if (p_scb->cong) return; in bta_av_data_path()
2071 if (p_scb->use_rtp_header_marker_bit) { in bta_av_data_path()
2076 p_scb->l2c_bufs = in bta_av_data_path()
2077 (uint8_t)L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_GET); in bta_av_data_path()
2079 if (!list_is_empty(p_scb->a2dp_list)) { in bta_av_data_path()
2080 p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); in bta_av_data_path()
2081 list_remove(p_scb->a2dp_list, p_buf); in bta_av_data_path()
2087 p_buf = p_scb->p_cos->data(p_scb->cfg.codec_info, &timestamp); in bta_av_data_path()
2094 bta_av_dup_audio_buf(p_scb, p_buf); in bta_av_data_path()
2099 if (p_scb->l2c_bufs < (BTA_AV_QUEUE_DATA_CHK_NUM)) { in bta_av_data_path()
2107 if (p_scb->no_rtp_header) { in bta_av_data_path()
2117 extra_fragments_n = (p_buf->len / p_scb->stream_mtu) + in bta_av_data_path()
2118 ((p_buf->len % p_scb->stream_mtu) ? 1 : 0) - 1; in bta_av_data_path()
2126 data_begin += p_scb->stream_mtu; in bta_av_data_path()
2128 if (fragment_len > p_scb->stream_mtu) fragment_len = p_scb->stream_mtu; in bta_av_data_path()
2146 AVDT_WriteReqOpt(p_scb->avdt_handle, p_buf, timestamp, m_pt, opt); in bta_av_data_path()
2153 AVDT_WriteReqOpt(p_scb->avdt_handle, p_buf2, timestamp, m_pt, opt); in bta_av_data_path()
2155 p_scb->cong = true; in bta_av_data_path()
2161 list_append(p_scb->a2dp_list, p_buf); in bta_av_data_path()
2164 if (list_length(p_scb->a2dp_list) < 3) { in bta_av_data_path()
2166 list_prepend(p_scb->a2dp_list, p_buf); in bta_av_data_path()
2169 bta_av_co_audio_drop(p_scb->hndl, p_scb->PeerAddress()); in bta_av_data_path()
2186 void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_start_ok() argument
2189 uint8_t new_role = p_scb->role; in bta_av_start_ok()
2192 uint8_t local_tsep = p_scb->seps[p_scb->sep_idx].tsep; in bta_av_start_ok()
2195 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_start_ok()
2196 p_scb->wait, p_scb->role, local_tsep); in bta_av_start_ok()
2198 p_scb->started = true; in bta_av_start_ok()
2203 bta_av_get_a2dp_peer_current_codec(p_scb->PeerAddress()); in bta_av_start_ok()
2205 p_scb->use_rtp_header_marker_bit = codec_config->useRtpHeaderMarkerBit(); in bta_av_start_ok()
2208 if (p_scb->sco_suspend) { in bta_av_start_ok()
2209 p_scb->sco_suspend = false; in bta_av_start_ok()
2215 if ((p_scb->avdt_handle == p_scb->seps[p_scb->sep_idx].av_handle) && in bta_av_start_ok()
2217 p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON); in bta_av_start_ok()
2219 p_scb->wait); in bta_av_start_ok()
2221 if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_FAILED) { in bta_av_start_ok()
2225 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_start_ok()
2226 p_scb->wait, p_scb->role); in bta_av_start_ok()
2227 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_FAILED; in bta_av_start_ok()
2232 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_start_ok()
2233 p_scb->wait, in bta_av_start_ok()
2234 (p_scb->use_rtp_header_marker_bit) ? "true" : "false"); in bta_av_start_ok()
2237 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_start_ok()
2239 bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_start_ok()
2241 start.chnl = p_scb->chnl; in bta_av_start_ok()
2243 start.hndl = p_scb->hndl; in bta_av_start_ok()
2252 if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) in bta_av_start_ok()
2253 p_scb->q_tag = BTA_AV_Q_TAG_START; in bta_av_start_ok()
2261 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_start_ok()
2264 if (p_scb->wait & in bta_av_start_ok()
2266 p_scb->wait |= BTA_AV_WAIT_ROLE_SW_STARTED; in bta_av_start_ok()
2267 p_scb->q_tag = BTA_AV_Q_TAG_START; in bta_av_start_ok()
2270 if (p_scb->wait) { in bta_av_start_ok()
2272 p_scb->PeerAddress().ToString().c_str(), p_scb->wait, in bta_av_start_ok()
2273 p_scb->q_tag); in bta_av_start_ok()
2281 p_scb->wait &= ~BTA_AV_WAIT_ACP_CAPS_ON; in bta_av_start_ok()
2285 bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->PeerAddress()); in bta_av_start_ok()
2287 bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_start_ok()
2289 if (p_scb->media_type == AVDT_MEDIA_TYPE_AUDIO) { in bta_av_start_ok()
2296 p_scb->co_started = bta_av_cb.audio_open_cnt; in bta_av_start_ok()
2300 p_scb->cong = false; in bta_av_start_ok()
2310 p_scb->q_tag = BTA_AV_Q_TAG_STREAM; in bta_av_start_ok()
2311 bta_av_stream_chg(p_scb, true); in bta_av_start_ok()
2322 if ((BTM_GetRole(p_scb->PeerAddress(), &cur_role) == BTM_SUCCESS) && in bta_av_start_ok()
2324 BTM_block_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_start_ok()
2326 BTM_block_sniff_mode_for(p_scb->PeerAddress()); in bta_av_start_ok()
2330 p_scb->role = new_role; in bta_av_start_ok()
2331 p_scb->role &= ~BTA_AV_ROLE_AD_ACP; in bta_av_start_ok()
2332 p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; in bta_av_start_ok()
2334 p_scb->no_rtp_header = false; in bta_av_start_ok()
2335 p_scb->p_cos->start(p_scb->hndl, p_scb->PeerAddress(), in bta_av_start_ok()
2336 p_scb->cfg.codec_info, &p_scb->no_rtp_header); in bta_av_start_ok()
2337 p_scb->co_started = true; in bta_av_start_ok()
2340 p_scb->PeerAddress().ToString().c_str(), suspend, in bta_av_start_ok()
2341 p_scb->role, initiator); in bta_av_start_ok()
2346 start.chnl = p_scb->chnl; in bta_av_start_ok()
2348 start.hndl = p_scb->hndl; in bta_av_start_ok()
2355 p_scb->role |= BTA_AV_ROLE_SUSPEND; in bta_av_start_ok()
2356 p_scb->cong = true; /* do not allow the media data to go through */ in bta_av_start_ok()
2358 p_scb->p_cos->stop(p_scb->hndl, p_scb->PeerAddress()); in bta_av_start_ok()
2359 p_scb->co_started = false; in bta_av_start_ok()
2363 bta_av_ssm_execute(p_scb, BTA_AV_AP_STOP_EVT, (tBTA_AV_DATA*)&stop); in bta_av_start_ok()
2377 void bta_av_start_failed(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_start_failed() argument
2380 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_start_failed()
2381 bta_av_cb.audio_open_cnt, logbool(p_scb->started).c_str(), in bta_av_start_failed()
2382 p_scb->co_started); in bta_av_start_failed()
2384 if (!p_scb->started && !p_scb->co_started) { in bta_av_start_failed()
2385 bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_start_failed()
2386 notify_start_failed(p_scb); in bta_av_start_failed()
2389 BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_start_failed()
2390 p_scb->sco_suspend = false; in bta_av_start_failed()
2402 void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_str_closed() argument
2408 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_str_closed()
2409 p_scb->open_status, p_scb->chnl, p_scb->co_started); in bta_av_str_closed()
2411 BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_str_closed()
2416 if (p_scb->open_status != BTA_AV_SUCCESS) { in bta_av_str_closed()
2418 data.open.bd_addr = p_scb->PeerAddress(); in bta_av_str_closed()
2419 data.open.status = p_scb->open_status; in bta_av_str_closed()
2420 data.open.chnl = p_scb->chnl; in bta_av_str_closed()
2421 data.open.hndl = p_scb->hndl; in bta_av_str_closed()
2423 if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) in bta_av_str_closed()
2425 else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) in bta_av_str_closed()
2429 p_scb->open_status = BTA_AV_SUCCESS; in bta_av_str_closed()
2431 bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->PeerAddress()); in bta_av_str_closed()
2432 bta_av_cleanup(p_scb, p_data); in bta_av_str_closed()
2436 if (p_scb->co_started) { in bta_av_str_closed()
2437 bta_av_str_stopped(p_scb, NULL); in bta_av_str_closed()
2441 p_scb->p_cos->close(p_scb->hndl, p_scb->PeerAddress()); in bta_av_str_closed()
2442 data.close.chnl = p_scb->chnl; in bta_av_str_closed()
2443 data.close.hndl = p_scb->hndl; in bta_av_str_closed()
2446 bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->PeerAddress()); in bta_av_str_closed()
2447 bta_av_cleanup(p_scb, p_data); in bta_av_str_closed()
2462 void bta_av_clr_cong(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_clr_cong() argument
2464 if (p_scb->co_started) { in bta_av_clr_cong()
2465 p_scb->cong = false; in bta_av_clr_cong()
2478 void bta_av_suspend_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_suspend_cfm() argument
2483 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_suspend_cfm()
2484 p_scb->hndl, bta_av_cb.audio_open_cnt, err_code); in bta_av_suspend_cfm()
2486 if (!p_scb->started) { in bta_av_suspend_cfm()
2503 bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); in bta_av_suspend_cfm()
2506 p_scb->started = false; in bta_av_suspend_cfm()
2509 if (p_scb->role & BTA_AV_ROLE_SUSPEND) { in bta_av_suspend_cfm()
2510 p_scb->role &= ~BTA_AV_ROLE_SUSPEND; in bta_av_suspend_cfm()
2511 p_scb->cong = false; in bta_av_suspend_cfm()
2514 bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->PeerAddress()); in bta_av_suspend_cfm()
2515 BTM_unblock_role_switch_and_sniff_mode_for(p_scb->PeerAddress()); in bta_av_suspend_cfm()
2518 if (p_scb->co_started) { in bta_av_suspend_cfm()
2519 if (bta_av_cb.offload_started_hndl == p_scb->hndl) { in bta_av_suspend_cfm()
2522 } else if (bta_av_cb.offload_start_pending_hndl == p_scb->hndl) { in bta_av_suspend_cfm()
2527 bta_av_stream_chg(p_scb, false); in bta_av_suspend_cfm()
2530 p_scb->co_started = false; in bta_av_suspend_cfm()
2531 p_scb->p_cos->stop(p_scb->hndl, p_scb->PeerAddress()); in bta_av_suspend_cfm()
2536 suspend_rsp.chnl = p_scb->chnl; in bta_av_suspend_cfm()
2537 suspend_rsp.hndl = p_scb->hndl; in bta_av_suspend_cfm()
2554 void bta_av_rcfg_str_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_rcfg_str_ok() argument
2555 p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); in bta_av_rcfg_str_ok()
2557 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_rcfg_str_ok()
2558 p_scb->l2c_cid); in bta_av_rcfg_str_ok()
2562 p_scb->stream_mtu = in bta_av_rcfg_str_ok()
2565 p_scb->l2c_cid, p_scb->stream_mtu); in bta_av_rcfg_str_ok()
2566 p_scb->p_cos->update_mtu(p_scb->hndl, p_scb->PeerAddress(), in bta_av_rcfg_str_ok()
2567 p_scb->stream_mtu); in bta_av_rcfg_str_ok()
2571 bta_av_st_rc_timer(p_scb, NULL); in bta_av_rcfg_str_ok()
2574 p_scb->role &= ~BTA_AV_ROLE_AD_ACP; in bta_av_rcfg_str_ok()
2575 p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; in bta_av_rcfg_str_ok()
2576 p_scb->role &= ~BTA_AV_ROLE_START_INT; in bta_av_rcfg_str_ok()
2582 reconfig.chnl = p_scb->chnl; in bta_av_rcfg_str_ok()
2583 reconfig.hndl = p_scb->hndl; in bta_av_rcfg_str_ok()
2599 void bta_av_rcfg_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_rcfg_failed() argument
2601 p_scb->num_recfg, bta_av_cb.conn_lcb, in bta_av_rcfg_failed()
2602 p_scb->PeerAddress().ToString().c_str()); in bta_av_rcfg_failed()
2604 if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { in bta_av_rcfg_failed()
2605 bta_av_cco_close(p_scb, p_data); in bta_av_rcfg_failed()
2609 reconfig.chnl = p_scb->chnl; in bta_av_rcfg_failed()
2610 reconfig.hndl = p_scb->hndl; in bta_av_rcfg_failed()
2615 bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); in bta_av_rcfg_failed()
2618 p_scb->num_recfg++; in bta_av_rcfg_failed()
2621 if ((bta_av_cb.conn_lcb & (1 << p_scb->hdi)) != 0) { in bta_av_rcfg_failed()
2622 AVDT_DisconnectReq(p_scb->PeerAddress(), &bta_av_proc_stream_evt); in bta_av_rcfg_failed()
2625 __func__, bta_av_cb.conn_lcb, p_scb->hndl, p_scb->hdi); in bta_av_rcfg_failed()
2626 bta_av_connect_req(p_scb, NULL); in bta_av_rcfg_failed()
2640 void bta_av_rcfg_connect(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_rcfg_connect() argument
2643 p_scb->cong = false; in bta_av_rcfg_connect()
2644 p_scb->num_recfg++; in bta_av_rcfg_connect()
2645 APPL_TRACE_DEBUG("%s: num_recfg: %d", __func__, p_scb->num_recfg); in bta_av_rcfg_connect()
2646 if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { in bta_av_rcfg_connect()
2648 bta_av_rcfg_failed(p_scb, NULL); in bta_av_rcfg_connect()
2650 AVDT_ConnectReq(p_scb->PeerAddress(), p_scb->hdi, &bta_av_proc_stream_evt); in bta_av_rcfg_connect()
2663 void bta_av_rcfg_discntd(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_rcfg_discntd() argument
2665 p_scb->num_recfg, bta_av_cb.conn_lcb, in bta_av_rcfg_discntd()
2666 p_scb->PeerAddress().ToString().c_str()); in bta_av_rcfg_discntd()
2668 p_scb->num_recfg++; in bta_av_rcfg_discntd()
2669 if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { in bta_av_rcfg_discntd()
2673 reconfig.chnl = p_scb->chnl; in bta_av_rcfg_discntd()
2674 reconfig.hndl = p_scb->hndl; in bta_av_rcfg_discntd()
2679 bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); in bta_av_rcfg_discntd()
2681 AVDT_ConnectReq(p_scb->PeerAddress(), p_scb->hdi, &bta_av_proc_stream_evt); in bta_av_rcfg_discntd()
2695 void bta_av_suspend_cont(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_suspend_cont() argument
2700 p_scb->started = false; in bta_av_suspend_cont()
2701 p_scb->cong = false; in bta_av_suspend_cont()
2711 p_scb->PeerAddress().ToString().c_str()); in bta_av_suspend_cont()
2712 bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); in bta_av_suspend_cont()
2716 L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); in bta_av_suspend_cont()
2718 AVDT_CloseReq(p_scb->avdt_handle); in bta_av_suspend_cont()
2725 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_suspend_cont()
2726 AVDT_ReconfigReq(p_scb->avdt_handle, &p_scb->cfg); in bta_av_suspend_cont()
2727 p_scb->cfg.psc_mask = p_scb->cur_psc_mask; in bta_av_suspend_cont()
2741 void bta_av_rcfg_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_rcfg_cfm() argument
2750 if (btif_storage_get_stored_remote_name(p_scb->PeerAddress(), in bta_av_rcfg_cfm()
2754 (const RawAddress*)&p_scb->PeerAddress())) { in bta_av_rcfg_cfm()
2758 __func__, remote_name, p_scb->PeerAddress().ToString().c_str()); in bta_av_rcfg_cfm()
2769 p_scb->recfg_sup = false; in bta_av_rcfg_cfm()
2773 L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); in bta_av_rcfg_cfm()
2774 AVDT_CloseReq(p_scb->avdt_handle); in bta_av_rcfg_cfm()
2779 A2DP_CodecName(p_scb->cfg.codec_info), in bta_av_rcfg_cfm()
2781 memcpy(p_scb->cfg.codec_info, in bta_av_rcfg_cfm()
2784 bta_av_ssm_execute(p_scb, BTA_AV_STR_OPEN_OK_EVT, NULL); in bta_av_rcfg_cfm()
2798 void bta_av_rcfg_open(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_rcfg_open() argument
2800 p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, in bta_av_rcfg_open()
2801 p_scb->num_disc_snks); in bta_av_rcfg_open()
2803 if (p_scb->num_disc_snks == 0) { in bta_av_rcfg_open()
2805 p_scb->p_cos->stop(p_scb->hndl, p_scb->PeerAddress()); in bta_av_rcfg_open()
2808 AVDT_DiscoverReq(p_scb->PeerAddress(), p_scb->hdi, p_scb->sep_info, in bta_av_rcfg_open()
2813 A2DP_CodecInfoString(p_scb->cfg.codec_info).c_str()); in bta_av_rcfg_open()
2817 bta_av_adjust_seps_idx(p_scb, bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); in bta_av_rcfg_open()
2819 p_scb->sep_idx, p_scb->avdt_handle, p_scb->hndl); in bta_av_rcfg_open()
2822 p_scb->sep_info_idx = p_scb->rcfg_idx; in bta_av_rcfg_open()
2823 AVDT_OpenReq(p_scb->avdt_handle, p_scb->PeerAddress(), p_scb->hdi, in bta_av_rcfg_open()
2824 p_scb->sep_info[p_scb->sep_info_idx].seid, &p_scb->cfg); in bta_av_rcfg_open()
2837 void bta_av_security_rej(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { in bta_av_security_rej() argument
2838 AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_BAD_STATE, in bta_av_security_rej()
2853 void bta_av_chk_2nd_start(tBTA_AV_SCB* p_scb, in bta_av_chk_2nd_start() argument
2858 __func__, p_scb->PeerAddress().ToString().c_str(), p_scb->chnl, in bta_av_chk_2nd_start()
2859 bta_av_cb.audio_open_cnt, p_scb->role, bta_av_cb.features); in bta_av_chk_2nd_start()
2861 if ((p_scb->chnl == BTA_AV_CHNL_AUDIO) && (bta_av_cb.audio_open_cnt >= 2) && in bta_av_chk_2nd_start()
2862 (((p_scb->role & BTA_AV_ROLE_AD_ACP) == 0) || // Outgoing connection or in bta_av_chk_2nd_start()
2865 if (!(p_scb->role & BTA_AV_ROLE_SUSPEND_OPT)) { in bta_av_chk_2nd_start()
2870 tBTA_AV_SCB* p_scbi = bta_av_cb.p_scb[i]; in bta_av_chk_2nd_start()
2871 if (p_scb == p_scbi) { in bta_av_chk_2nd_start()
2881 __func__, p_scb->PeerAddress().ToString().c_str(), in bta_av_chk_2nd_start()
2883 bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); in bta_av_chk_2nd_start()
2904 void bta_av_open_rc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_open_rc() argument
2906 p_scb->use_rc, p_scb->wait, p_scb->role); in bta_av_open_rc()
2907 if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) && in bta_av_open_rc()
2908 (p_scb->q_tag == BTA_AV_Q_TAG_START)) { in bta_av_open_rc()
2910 if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) { in bta_av_open_rc()
2914 alarm_cancel(p_scb->avrc_ct_timer); in bta_av_open_rc()
2917 start.chnl = p_scb->chnl; in bta_av_open_rc()
2920 start.hndl = p_scb->hndl; in bta_av_open_rc()
2921 p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; in bta_av_open_rc()
2930 bta_av_start_ok(p_scb, p_data); in bta_av_open_rc()
2935 if (p_scb->use_rc || (p_scb->role & BTA_AV_ROLE_AD_ACP)) { in bta_av_open_rc()
2938 if (p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) { in bta_av_open_rc()
2940 if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { in bta_av_open_rc()
2941 bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, in bta_av_open_rc()
2942 BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); in bta_av_open_rc()
2944 p_scb->wait |= BTA_AV_WAIT_CHECK_RC; in bta_av_open_rc()
2952 p_scb->PeerAddress()); in bta_av_open_rc()
2954 bta_av_rc_disc((uint8_t)(p_scb->hdi + 1)); in bta_av_open_rc()
2958 if (BTA_AV_RC_HANDLE_NONE != p_scb->rc_handle) { in bta_av_open_rc()
2961 AVRC_Close(p_scb->rc_handle); in bta_av_open_rc()
2976 void bta_av_open_at_inc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_open_at_inc() argument
2977 memcpy(&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); in bta_av_open_at_inc()
2980 p_scb->PeerAddress().ToString().c_str(), p_scb->coll_mask); in bta_av_open_at_inc()
2982 if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) { in bta_av_open_at_inc()
2983 p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; in bta_av_open_at_inc()
2990 p_scb->coll_mask = 0; in bta_av_open_at_inc()
2991 bta_av_set_scb_sst_init(p_scb); in bta_av_open_at_inc()
2995 memcpy(p_buf, &(p_scb->open_api), sizeof(tBTA_AV_API_OPEN)); in bta_av_open_at_inc()
3038 void bta_av_vendor_offload_start(tBTA_AV_SCB* p_scb, in bta_av_vendor_offload_start() argument
3059 bta_av_cb.offload_start_pending_hndl = p_scb->hndl; in bta_av_vendor_offload_start()
3081 void bta_av_offload_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_offload_req() argument
3086 p_scb->started ? "STARTED" : "STOPPED", in bta_av_offload_req()
3090 if (p_scb->started != true) { in bta_av_offload_req()
3097 bta_av_offload_codec_builder(p_scb, &offload_start); in bta_av_offload_req()
3098 bta_av_vendor_offload_start(p_scb, &offload_start); in bta_av_offload_req()
3153 void bta_av_offload_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { in bta_av_offload_rsp() argument
3157 p_scb->started ? "STARTED" : "STOPPED", in bta_av_offload_rsp()
3161 if (status == BTA_AV_SUCCESS && p_scb->started != true) { in bta_av_offload_rsp()
3171 static void bta_av_offload_codec_builder(tBTA_AV_SCB* p_scb, in bta_av_offload_codec_builder() argument
3175 A2DP_SourceCodecIndex(p_scb->cfg.codec_info); in bta_av_offload_codec_builder()
3177 uint16_t mtu = p_scb->stream_mtu; in bta_av_offload_codec_builder()
3182 if (A2DP_GetMaxBitpoolSbc(p_scb->cfg.codec_info) <= in bta_av_offload_codec_builder()
3211 p_scb->PeerAddress(), BT_TRANSPORT_BR_EDR); in bta_av_offload_codec_builder()
3213 p_scb->p_cos->get_scmst_info(p_scb->PeerAddress()); in bta_av_offload_codec_builder()
3221 switch (A2DP_GetTrackSampleRate(p_scb->cfg.codec_info)) { in bta_av_offload_codec_builder()
3235 if (L2CA_GetRemoteCid(p_scb->l2c_cid, &p_a2dp_offload->l2c_rcid) == false) { in bta_av_offload_codec_builder()
3250 p_a2dp_offload->ch_mode = A2DP_GetTrackChannelCount(p_scb->cfg.codec_info); in bta_av_offload_codec_builder()