Lines Matching refs:p_scb
112 static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local);
126 tBTA_AG_SCB* p_scb; in bta_ag_sco_conn_cback() local
136 p_scb = bta_ag_scb_by_idx(handle); in bta_ag_sco_conn_cback()
137 if (p_scb && !p_scb->svc_conn) handle = 0; in bta_ag_sco_conn_cback()
246 static bool bta_ag_remove_sco(tBTA_AG_SCB* p_scb, bool only_active) { in bta_ag_remove_sco() argument
247 if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) { in bta_ag_remove_sco()
248 if (!only_active || p_scb->sco_idx == bta_ag_cb.sco.cur_idx) { in bta_ag_remove_sco()
249 tBTM_STATUS status = BTM_RemoveSco(p_scb->sco_idx); in bta_ag_remove_sco()
250 LOG_DEBUG("Removed SCO index:0x%04x status:%s", p_scb->sco_idx, in bta_ag_remove_sco()
254 bta_ag_cb.sco.p_curr_scb = p_scb; in bta_ag_remove_sco()
258 p_scb->sco_idx = BTM_INVALID_SCO_INDEX; in bta_ag_remove_sco()
281 tBTA_AG_SCB* p_scb = bta_ag_scb_by_idx(bta_ag_idx_by_bdaddr(remote_bda)); in bta_ag_esco_connreq_cback() local
282 if (remote_bda && bta_ag_sco_is_active_device(*remote_bda) && p_scb && in bta_ag_esco_connreq_cback()
283 p_scb->svc_conn) { in bta_ag_esco_connreq_cback()
284 p_scb->sco_idx = sco_inx; in bta_ag_esco_connreq_cback()
290 bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); in bta_ag_esco_connreq_cback()
293 bta_ag_cb.sco.p_curr_scb = p_scb; in bta_ag_esco_connreq_cback()
294 bta_ag_cb.sco.cur_idx = p_scb->sco_idx; in bta_ag_esco_connreq_cback()
298 bta_ag_cb.sco.p_xfer_scb = p_scb; in bta_ag_esco_connreq_cback()
309 bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); in bta_ag_esco_connreq_cback()
317 << (p_scb ? p_scb->peer_addr : RawAddress::kEmpty); in bta_ag_esco_connreq_cback()
342 static void bta_ag_cback_sco(tBTA_AG_SCB* p_scb, tBTA_AG_EVT event) { in bta_ag_cback_sco() argument
344 sco.handle = bta_ag_scb_to_idx(p_scb); in bta_ag_cback_sco()
345 sco.app_id = p_scb->app_id; in bta_ag_cback_sco()
361 static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { in bta_ag_create_sco() argument
362 LOG_DEBUG("BEFORE %s", p_scb->ToString().c_str()); in bta_ag_create_sco()
365 if (!bta_ag_sco_is_active_device(p_scb->peer_addr)) { in bta_ag_create_sco()
366 LOG(WARNING) << __func__ << ": device " << p_scb->peer_addr in bta_ag_create_sco()
369 bta_ag_cb.sco.p_curr_scb->in_use && p_scb == bta_ag_cb.sco.p_curr_scb) { in bta_ag_create_sco()
371 FROM_HERE, base::Bind(&bta_ag_sm_execute, p_scb, BTA_AG_SCO_CLOSE_EVT, in bta_ag_create_sco()
377 if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) { in bta_ag_create_sco()
379 p_scb->peer_addr.ToString().c_str(), p_scb->sco_idx); in bta_ag_create_sco()
384 if ((p_scb->sco_codec == BTA_AG_CODEC_MSBC) && !p_scb->codec_fallback) in bta_ag_create_sco()
388 if (p_scb->codec_fallback) { in bta_ag_create_sco()
389 p_scb->codec_fallback = false; in bta_ag_create_sco()
391 p_scb->codec_updated = true; in bta_ag_create_sco()
393 p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; in bta_ag_create_sco()
401 if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { in bta_ag_create_sco()
407 if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && in bta_ag_create_sco()
408 (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { in bta_ag_create_sco()
422 bta_ag_cb.sco.p_curr_scb = p_scb; in bta_ag_create_sco()
424 p_scb->inuse_codec = esco_codec; in bta_ag_create_sco()
427 bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_create_sco()
430 bta_ag_create_pending_sco(p_scb, bta_ag_cb.sco.is_local); in bta_ag_create_sco()
431 LOG_DEBUG("Initiating AG SCO inx 0x%04x, pkt types 0x%04x", p_scb->sco_idx, in bta_ag_create_sco()
436 &p_scb->peer_addr, false, params.packet_types, &p_scb->sco_idx, in bta_ag_create_sco()
439 BTM_RegForEScoEvts(p_scb->sco_idx, bta_ag_esco_connreq_cback); in bta_ag_create_sco()
442 p_scb->sco_idx, btm_status_text(btm_status).c_str(), in bta_ag_create_sco()
445 LOG_DEBUG("AFTER %s", p_scb->ToString().c_str()); in bta_ag_create_sco()
460 static void bta_ag_create_pending_sco(tBTA_AG_SCB* p_scb, bool is_local) { in bta_ag_create_pending_sco() argument
461 tBTA_AG_PEER_CODEC esco_codec = p_scb->inuse_codec; in bta_ag_create_pending_sco()
463 bta_ag_cb.sco.p_curr_scb = p_scb; in bta_ag_create_pending_sco()
464 bta_ag_cb.sco.cur_idx = p_scb->sco_idx; in bta_ag_create_pending_sco()
469 if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { in bta_ag_create_pending_sco()
475 if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && in bta_ag_create_pending_sco()
476 (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { in bta_ag_create_pending_sco()
495 if (BTM_CreateSco(&p_scb->peer_addr, true, params.packet_types, in bta_ag_create_pending_sco()
496 &p_scb->sco_idx, bta_ag_sco_conn_cback, in bta_ag_create_pending_sco()
499 bta_ag_cb.sco.cur_idx = p_scb->sco_idx; in bta_ag_create_pending_sco()
508 if (p_scb->features & BTA_AG_PEER_FEAT_ESCO_S4 && in bta_ag_create_pending_sco()
509 (p_scb->peer_features & BTA_AG_PEER_FEAT_ESCO_S4)) { in bta_ag_create_pending_sco()
517 BTM_EScoConnRsp(p_scb->sco_idx, HCI_SUCCESS, ¶ms); in bta_ag_create_pending_sco()
534 tBTA_AG_SCB* p_scb = (tBTA_AG_SCB*)data; in bta_ag_codec_negotiation_timer_cback() local
537 bta_ag_sco_codec_nego(p_scb, false); in bta_ag_codec_negotiation_timer_cback()
540 bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); in bta_ag_codec_negotiation_timer_cback()
553 void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { in bta_ag_codec_negotiate() argument
554 bta_ag_cb.sco.p_curr_scb = p_scb; in bta_ag_codec_negotiate()
555 uint8_t* p_rem_feat = BTM_ReadRemoteFeatures(p_scb->peer_addr); in bta_ag_codec_negotiate()
556 bool sdp_wbs_support = p_scb->peer_sdp_features & BTA_AG_FEAT_WBS_SUPPORT; in bta_ag_codec_negotiate()
560 bta_ag_sco_codec_nego(p_scb, false); in bta_ag_codec_negotiate()
574 !(p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) { in bta_ag_codec_negotiate()
576 p_scb->sco_codec = UUID_CODEC_CVSD; in bta_ag_codec_negotiate()
579 if ((p_scb->codec_updated || p_scb->codec_fallback) && in bta_ag_codec_negotiate()
580 (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) { in bta_ag_codec_negotiate()
583 bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_codec_negotiate()
586 bta_ag_send_bcs(p_scb); in bta_ag_codec_negotiate()
589 alarm_set_on_mloop(p_scb->codec_negotiation_timer, in bta_ag_codec_negotiate()
591 bta_ag_codec_negotiation_timer_cback, p_scb); in bta_ag_codec_negotiate()
595 bta_ag_sco_codec_nego(p_scb, true); in bta_ag_codec_negotiate()
599 static void bta_ag_sco_event(tBTA_AG_SCB* p_scb, uint8_t event) { in bta_ag_sco_event() argument
603 PRIVATE_ADDRESS(p_scb->peer_addr), p_scb->sco_idx, in bta_ag_sco_event()
612 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
627 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
632 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
637 bta_ag_codec_negotiate(p_scb); in bta_ag_sco_event()
639 bta_ag_create_sco(p_scb, true); in bta_ag_sco_event()
646 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
648 if (p_scb == p_sco->p_curr_scb) p_sco->p_curr_scb = nullptr; in bta_ag_sco_event()
651 if (!bta_ag_other_scb_open(p_scb)) { in bta_ag_sco_event()
665 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
680 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
685 bta_ag_create_sco(p_scb, true); in bta_ag_sco_event()
691 p_sco->p_xfer_scb = p_scb; in bta_ag_sco_event()
697 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
699 if (p_scb == p_sco->p_curr_scb) p_sco->p_curr_scb = nullptr; in bta_ag_sco_event()
702 if (!bta_ag_other_scb_open(p_scb)) { in bta_ag_sco_event()
714 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
730 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
731 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
739 bta_ag_codec_negotiate(p_scb); in bta_ag_sco_event()
745 p_sco->p_xfer_scb = p_scb; in bta_ag_sco_event()
755 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
757 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
769 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
784 p_sco->p_xfer_scb = p_scb; in bta_ag_sco_event()
795 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
797 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
805 bta_ag_remove_sco(p_scb, true); in bta_ag_sco_event()
827 bta_ag_remove_sco(p_scb, true); in bta_ag_sco_event()
834 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
842 bta_ag_create_sco(p_scb, false); /* Back into listen mode */ in bta_ag_sco_event()
864 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
865 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
874 p_sco->p_xfer_scb = p_scb; in bta_ag_sco_event()
881 if (bta_ag_remove_sco(p_scb, true)) { in bta_ag_sco_event()
888 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
891 if (p_scb == p_sco->p_curr_scb) { in bta_ag_sco_event()
898 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
913 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
914 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
924 p_sco->p_xfer_scb = p_scb; in bta_ag_sco_event()
931 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
933 bta_ag_remove_sco(p_scb, false); in bta_ag_sco_event()
941 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
966 bta_ag_codec_negotiate(p_scb); in bta_ag_sco_event()
971 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
972 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
988 bta_ag_remove_sco(p_scb, true); in bta_ag_sco_event()
1009 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
1038 bta_ag_remove_sco(p_scb, true); in bta_ag_sco_event()
1043 if (!bta_ag_other_scb_open(p_scb)) { in bta_ag_sco_event()
1052 if (bta_ag_scb_open(p_scb)) { in bta_ag_sco_event()
1053 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
1057 if (p_scb == p_sco->p_curr_scb) { in bta_ag_sco_event()
1065 if (p_scb != p_sco->p_curr_scb) { in bta_ag_sco_event()
1066 bta_ag_create_sco(p_scb, false); in bta_ag_sco_event()
1071 if (!bta_ag_other_scb_open(p_scb)) { in bta_ag_sco_event()
1078 if (p_scb == p_sco->p_curr_scb) { in bta_ag_sco_event()
1114 bool bta_ag_sco_is_open(tBTA_AG_SCB* p_scb) { in bta_ag_sco_is_open() argument
1116 (bta_ag_cb.sco.p_curr_scb == p_scb)); in bta_ag_sco_is_open()
1130 bool bta_ag_sco_is_opening(tBTA_AG_SCB* p_scb) { in bta_ag_sco_is_opening() argument
1132 (bta_ag_cb.sco.p_curr_scb == p_scb)); in bta_ag_sco_is_opening()
1145 void bta_ag_sco_listen(tBTA_AG_SCB* p_scb, in bta_ag_sco_listen() argument
1147 LOG(INFO) << __func__ << ": " << p_scb->peer_addr; in bta_ag_sco_listen()
1148 bta_ag_sco_event(p_scb, BTA_AG_SCO_LISTEN_E); in bta_ag_sco_listen()
1161 void bta_ag_sco_open(tBTA_AG_SCB* p_scb, UNUSED_ATTR const tBTA_AG_DATA& data) { in bta_ag_sco_open() argument
1167 if (bta_ag_cb.sco.p_curr_scb && bta_ag_cb.sco.p_curr_scb != p_scb) { in bta_ag_sco_open()
1170 << p_scb->peer_addr; in bta_ag_sco_open()
1171 bta_ag_sco_event(p_scb, BTA_AG_SCO_XFER_E); in bta_ag_sco_open()
1174 LOG(INFO) << __func__ << ": open " << p_scb->peer_addr; in bta_ag_sco_open()
1175 bta_ag_sco_event(p_scb, BTA_AG_SCO_OPEN_E); in bta_ag_sco_open()
1189 void bta_ag_sco_close(tBTA_AG_SCB* p_scb, in bta_ag_sco_close() argument
1194 if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) || in bta_ag_sco_close()
1196 APPL_TRACE_DEBUG("bta_ag_sco_close: sco_inx = %d", p_scb->sco_idx); in bta_ag_sco_close()
1197 bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); in bta_ag_sco_close()
1211 void bta_ag_sco_codec_nego(tBTA_AG_SCB* p_scb, bool result) { in bta_ag_sco_codec_nego() argument
1214 LOG_INFO("Succeeded for index 0x%04x, device %s", p_scb->sco_idx, in bta_ag_sco_codec_nego()
1215 p_scb->peer_addr.ToString().c_str()); in bta_ag_sco_codec_nego()
1216 p_scb->codec_updated = false; in bta_ag_sco_codec_nego()
1217 bta_ag_sco_event(p_scb, BTA_AG_SCO_CN_DONE_E); in bta_ag_sco_codec_nego()
1220 LOG_INFO("Failed for index 0x%04x, device %s", p_scb->sco_idx, in bta_ag_sco_codec_nego()
1221 p_scb->peer_addr.ToString().c_str()); in bta_ag_sco_codec_nego()
1222 bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); in bta_ag_sco_codec_nego()
1236 void bta_ag_sco_shutdown(tBTA_AG_SCB* p_scb, in bta_ag_sco_shutdown() argument
1238 bta_ag_sco_event(p_scb, BTA_AG_SCO_SHUTDOWN_E); in bta_ag_sco_shutdown()
1251 void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb, in bta_ag_sco_conn_open() argument
1253 bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_OPEN_E); in bta_ag_sco_conn_open()
1255 bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_sco_conn_open()
1258 bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_OPEN_EVT); in bta_ag_sco_conn_open()
1261 p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; in bta_ag_sco_conn_open()
1274 void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb, in bta_ag_sco_conn_close() argument
1278 p_scb->sco_idx = BTM_INVALID_SCO_INDEX; in bta_ag_sco_conn_close()
1282 if (p_scb->svc_conn && in bta_ag_sco_conn_close()
1283 (p_scb->codec_fallback || in bta_ag_sco_conn_close()
1284 (p_scb->sco_codec == BTM_SCO_CODEC_MSBC && in bta_ag_sco_conn_close()
1285 p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T1))) { in bta_ag_sco_conn_close()
1286 bta_ag_sco_event(p_scb, BTA_AG_SCO_REOPEN_E); in bta_ag_sco_conn_close()
1289 bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_CLOSE_E); in bta_ag_sco_conn_close()
1291 bta_sys_sco_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_sco_conn_close()
1295 if (((p_scb->call_ind == BTA_AG_CALL_INACTIVE) && in bta_ag_sco_conn_close()
1296 (p_scb->callsetup_ind == BTA_AG_CALLSETUP_NONE)) || in bta_ag_sco_conn_close()
1297 (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END)) { in bta_ag_sco_conn_close()
1298 bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_sco_conn_close()
1302 bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); in bta_ag_sco_conn_close()
1303 p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; in bta_ag_sco_conn_close()
1317 void bta_ag_sco_conn_rsp(tBTA_AG_SCB* p_scb, in bta_ag_sco_conn_rsp() argument
1330 bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); in bta_ag_sco_conn_rsp()
1335 p_scb->inuse_codec = BTA_AG_CODEC_NONE; in bta_ag_sco_conn_rsp()
1337 bta_ag_create_pending_sco(p_scb, bta_ag_cb.sco.is_local); in bta_ag_sco_conn_rsp()