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

Commit 9b0a3393 authored by Cheney Ni's avatar Cheney Ni
Browse files

AV stream state machine logging

Bug: 159815595
Tag: #refactor
Test: compile & verify A2DP working
Change-Id: I84d286dde0c2af4be081c66631fc50fef23f46f9
parent 9ddba41d
Loading
Loading
Loading
Loading
+135 −110
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "bt_target.h"
#include "bta_av_co.h"
#include "bta_av_int.h"
#include "osi/include/log.h"

/*****************************************************************************
 * Constants and types
@@ -44,105 +45,108 @@ enum {
static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb,
                                               uint16_t event,
                                               tBTA_AV_DATA* p_data) {
  uint8_t previous_state = p_scb->state;
  tBTA_AV_ACT event_handler1 = nullptr;
  tBTA_AV_ACT event_handler2 = nullptr;
  switch (p_scb->state) {
    case BTA_AV_INIT_SST:
      switch (event) {
        case BTA_AV_API_OPEN_EVT:
          p_scb->state = BTA_AV_OPENING_SST;
          bta_av_do_disc_a2dp(p_scb, p_data);
          event_handler1 = &bta_av_do_disc_a2dp;
          break;
        case BTA_AV_API_CLOSE_EVT:
          bta_av_cleanup(p_scb, p_data);
          event_handler1 = &bta_av_cleanup;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          p_scb->state = BTA_AV_INCOMING_SST;
          bta_av_config_ind(p_scb, p_data);
          event_handler1 = &bta_av_config_ind;
          break;
        case BTA_AV_ACP_CONNECT_EVT:
          p_scb->state = BTA_AV_INCOMING_SST;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
    case BTA_AV_INCOMING_SST:
      switch (event) {
        case BTA_AV_API_OPEN_EVT:
          bta_av_open_at_inc(p_scb, p_data);
          event_handler1 = &bta_av_open_at_inc;
          break;
        case BTA_AV_API_CLOSE_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_cco_close(p_scb, p_data);
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_cco_close;
          event_handler2 = &bta_av_disconnect_req;
          break;
        case BTA_AV_API_PROTECT_REQ_EVT:
          bta_av_security_req(p_scb, p_data);
          event_handler1 = &bta_av_security_req;
          break;
        case BTA_AV_API_PROTECT_RSP_EVT:
          bta_av_security_rsp(p_scb, p_data);
          event_handler1 = &bta_av_security_rsp;
          break;
        case BTA_AV_CI_SETCONFIG_OK_EVT:
          bta_av_setconfig_rsp(p_scb, p_data);
          bta_av_st_rc_timer(p_scb, p_data);
          event_handler1 = &bta_av_setconfig_rsp;
          event_handler2 = &bta_av_st_rc_timer;
          break;
        case BTA_AV_CI_SETCONFIG_FAIL_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_setconfig_rej(p_scb, p_data);
          bta_av_cleanup(p_scb, p_data);
          event_handler1 = &bta_av_setconfig_rej;
          event_handler2 = &bta_av_cleanup;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_STR_DISC_OK_EVT:
          bta_av_disc_res_as_acp(p_scb, p_data);
          event_handler1 = &bta_av_disc_res_as_acp;
          break;
        case BTA_AV_STR_GETCAP_OK_EVT:
          bta_av_save_caps(p_scb, p_data);
          event_handler1 = &bta_av_save_caps;
          break;
        case BTA_AV_STR_OPEN_OK_EVT:
          p_scb->state = BTA_AV_OPEN_SST;
          bta_av_str_opened(p_scb, p_data);
          event_handler1 = &bta_av_str_opened;
          break;
        case BTA_AV_STR_CLOSE_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_cco_close(p_scb, p_data);
          bta_av_cleanup(p_scb, p_data);
          event_handler1 = &bta_av_cco_close;
          event_handler2 = &bta_av_cleanup;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          bta_av_config_ind(p_scb, p_data);
          event_handler1 = &bta_av_config_ind;
          break;
        case BTA_AV_STR_SECURITY_IND_EVT:
          bta_av_security_ind(p_scb, p_data);
          event_handler1 = &bta_av_security_ind;
          break;
        case BTA_AV_STR_SECURITY_CFM_EVT:
          bta_av_security_cfm(p_scb, p_data);
          event_handler1 = &bta_av_security_cfm;
          break;
        case BTA_AV_AVDT_DISCONNECT_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_cco_close(p_scb, p_data);
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_cco_close;
          event_handler2 = &bta_av_disconnect_req;
          break;
        case BTA_AV_AVDT_DELAY_RPT_EVT:
          bta_av_delay_co(p_scb, p_data);
          event_handler1 = &bta_av_delay_co;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
@@ -150,74 +154,74 @@ static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb,
      switch (event) {
        case BTA_AV_API_CLOSE_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_do_close(p_scb, p_data);
          event_handler1 = &bta_av_do_close;
          break;
        case BTA_AV_API_PROTECT_REQ_EVT:
          bta_av_security_req(p_scb, p_data);
          event_handler1 = &bta_av_security_req;
          break;
        case BTA_AV_API_PROTECT_RSP_EVT:
          bta_av_security_rsp(p_scb, p_data);
          event_handler1 = &bta_av_security_rsp;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          bta_av_connect_req(p_scb, p_data);
          event_handler1 = &bta_av_connect_req;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          bta_av_connect_req(p_scb, p_data);
          event_handler1 = &bta_av_connect_req;
          break;
        case BTA_AV_STR_DISC_OK_EVT:
          bta_av_disc_results(p_scb, p_data);
          event_handler1 = &bta_av_disc_results;
          break;
        case BTA_AV_STR_DISC_FAIL_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_open_failed(p_scb, p_data);
          event_handler1 = &bta_av_open_failed;
          break;
        case BTA_AV_STR_GETCAP_OK_EVT:
          bta_av_getcap_results(p_scb, p_data);
          event_handler1 = &bta_av_getcap_results;
          break;
        case BTA_AV_STR_GETCAP_FAIL_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_open_failed(p_scb, p_data);
          event_handler1 = &bta_av_open_failed;
          break;
        case BTA_AV_STR_OPEN_OK_EVT:
          p_scb->state = BTA_AV_OPEN_SST;
          bta_av_st_rc_timer(p_scb, p_data);
          bta_av_str_opened(p_scb, p_data);
          event_handler1 = &bta_av_st_rc_timer;
          event_handler2 = &bta_av_str_opened;
          break;
        case BTA_AV_STR_OPEN_FAIL_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_open_failed(p_scb, p_data);
          event_handler1 = &bta_av_open_failed;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          p_scb->state = BTA_AV_INCOMING_SST;
          bta_av_config_ind(p_scb, p_data);
          event_handler1 = &bta_av_config_ind;
          break;
        case BTA_AV_STR_SECURITY_IND_EVT:
          bta_av_security_ind(p_scb, p_data);
          event_handler1 = &bta_av_security_ind;
          break;
        case BTA_AV_STR_SECURITY_CFM_EVT:
          bta_av_security_cfm(p_scb, p_data);
          event_handler1 = &bta_av_security_cfm;
          break;
        case BTA_AV_AVRC_TIMER_EVT:
          bta_av_switch_role(p_scb, p_data);
          event_handler1 = &bta_av_switch_role;
          break;
        case BTA_AV_AVDT_CONNECT_EVT:
          bta_av_discover_req(p_scb, p_data);
          event_handler1 = &bta_av_discover_req;
          break;
        case BTA_AV_AVDT_DISCONNECT_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_conn_failed(p_scb, p_data);
          event_handler1 = &bta_av_conn_failed;
          break;
        case BTA_AV_ROLE_CHANGE_EVT:
          bta_av_role_res(p_scb, p_data);
          event_handler1 = &bta_av_role_res;
          break;
        case BTA_AV_AVDT_DELAY_RPT_EVT:
          bta_av_delay_co(p_scb, p_data);
          event_handler1 = &bta_av_delay_co;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
@@ -225,83 +229,83 @@ static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb,
      switch (event) {
        case BTA_AV_API_CLOSE_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_do_close(p_scb, p_data);
          event_handler1 = &bta_av_do_close;
          break;
        case BTA_AV_AP_START_EVT:
          bta_av_do_start(p_scb, p_data);
          event_handler1 = &bta_av_do_start;
          break;
        case BTA_AV_AP_STOP_EVT:
          bta_av_str_stopped(p_scb, p_data);
          event_handler1 = &bta_av_str_stopped;
          break;
        case BTA_AV_API_RECONFIG_EVT:
          p_scb->state = BTA_AV_RCFG_SST;
          bta_av_reconfig(p_scb, p_data);
          event_handler1 = &bta_av_reconfig;
          break;
        case BTA_AV_API_PROTECT_REQ_EVT:
          bta_av_security_req(p_scb, p_data);
          event_handler1 = &bta_av_security_req;
          break;
        case BTA_AV_API_PROTECT_RSP_EVT:
          bta_av_security_rsp(p_scb, p_data);
          event_handler1 = &bta_av_security_rsp;
          break;
        case BTA_AV_API_RC_OPEN_EVT:
          bta_av_set_use_rc(p_scb, p_data);
          event_handler1 = &bta_av_set_use_rc;
          break;
        case BTA_AV_SRC_DATA_READY_EVT:
          bta_av_data_path(p_scb, p_data);
          event_handler1 = &bta_av_data_path;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_STR_GETCAP_OK_EVT:
          bta_av_save_caps(p_scb, p_data);
          event_handler1 = &bta_av_save_caps;
          break;
        case BTA_AV_STR_START_OK_EVT:
          bta_av_start_ok(p_scb, p_data);
          event_handler1 = &bta_av_start_ok;
          break;
        case BTA_AV_STR_START_FAIL_EVT:
          bta_av_start_failed(p_scb, p_data);
          event_handler1 = &bta_av_start_failed;
          break;
        case BTA_AV_STR_CLOSE_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_str_closed(p_scb, p_data);
          event_handler1 = &bta_av_str_closed;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          bta_av_setconfig_rej(p_scb, p_data);
          event_handler1 = &bta_av_setconfig_rej;
          break;
        case BTA_AV_STR_SECURITY_IND_EVT:
          bta_av_security_ind(p_scb, p_data);
          event_handler1 = &bta_av_security_ind;
          break;
        case BTA_AV_STR_SECURITY_CFM_EVT:
          bta_av_security_cfm(p_scb, p_data);
          event_handler1 = &bta_av_security_cfm;
          break;
        case BTA_AV_STR_WRITE_CFM_EVT:
          bta_av_clr_cong(p_scb, p_data);
          bta_av_data_path(p_scb, p_data);
          event_handler1 = &bta_av_clr_cong;
          event_handler2 = &bta_av_data_path;
          break;
        case BTA_AV_STR_SUSPEND_CFM_EVT:
          bta_av_suspend_cfm(p_scb, p_data);
          event_handler1 = &bta_av_suspend_cfm;
          break;
        case BTA_AV_AVRC_TIMER_EVT:
          bta_av_open_rc(p_scb, p_data);
          event_handler1 = &bta_av_open_rc;
          break;
        case BTA_AV_AVDT_DISCONNECT_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_str_closed(p_scb, p_data);
          event_handler1 = &bta_av_str_closed;
          break;
        case BTA_AV_ROLE_CHANGE_EVT:
          bta_av_role_res(p_scb, p_data);
          event_handler1 = &bta_av_role_res;
          break;
        case BTA_AV_AVDT_DELAY_RPT_EVT:
          bta_av_delay_co(p_scb, p_data);
          event_handler1 = &bta_av_delay_co;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
@@ -309,109 +313,130 @@ static void bta_av_better_stream_state_machine(tBTA_AV_SCB* p_scb,
      switch (event) {
        case BTA_AV_API_CLOSE_EVT:
          p_scb->state = BTA_AV_CLOSING_SST;
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_disconnect_req;
          break;
        case BTA_AV_API_RECONFIG_EVT:
          bta_av_reconfig(p_scb, p_data);
          event_handler1 = &bta_av_reconfig;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          bta_av_free_sdb(p_scb, p_data);
          event_handler1 = &bta_av_free_sdb;
          break;
        case BTA_AV_STR_DISC_OK_EVT:
          bta_av_disc_results(p_scb, p_data);
          event_handler1 = &bta_av_disc_results;
          break;
        case BTA_AV_STR_DISC_FAIL_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_str_closed(p_scb, p_data);
          event_handler1 = &bta_av_str_closed;
          break;
        case BTA_AV_STR_GETCAP_OK_EVT:
          bta_av_getcap_results(p_scb, p_data);
          event_handler1 = &bta_av_getcap_results;
          break;
        case BTA_AV_STR_GETCAP_FAIL_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_str_closed(p_scb, p_data);
          event_handler1 = &bta_av_str_closed;
          break;
        case BTA_AV_STR_OPEN_OK_EVT:
          p_scb->state = BTA_AV_OPEN_SST;
          bta_av_rcfg_str_ok(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_str_ok;
          break;
        case BTA_AV_STR_OPEN_FAIL_EVT:
          bta_av_rcfg_failed(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_failed;
          break;
        case BTA_AV_STR_CLOSE_EVT:
          bta_av_rcfg_connect(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_connect;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          bta_av_setconfig_rej(p_scb, p_data);
          event_handler1 = &bta_av_setconfig_rej;
          break;
        case BTA_AV_STR_SUSPEND_CFM_EVT:
          bta_av_suspend_cfm(p_scb, p_data);
          bta_av_suspend_cont(p_scb, p_data);
          event_handler1 = &bta_av_suspend_cfm;
          event_handler2 = &bta_av_suspend_cont;
          break;
        case BTA_AV_STR_RECONFIG_CFM_EVT:
          bta_av_rcfg_cfm(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_cfm;
          break;
        case BTA_AV_AVDT_CONNECT_EVT:
          bta_av_rcfg_open(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_open;
          break;
        case BTA_AV_AVDT_DISCONNECT_EVT:
          bta_av_rcfg_discntd(p_scb, p_data);
          event_handler1 = &bta_av_rcfg_discntd;
          break;
        case BTA_AV_AVDT_DELAY_RPT_EVT:
          bta_av_delay_co(p_scb, p_data);
          event_handler1 = &bta_av_delay_co;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
    case BTA_AV_CLOSING_SST:
      switch (event) {
        case BTA_AV_API_CLOSE_EVT:
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_disconnect_req;
          break;
        case BTA_AV_SDP_DISC_OK_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_sdp_failed(p_scb, p_data);
          event_handler1 = &bta_av_sdp_failed;
          break;
        case BTA_AV_SDP_DISC_FAIL_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_sdp_failed(p_scb, p_data);
          event_handler1 = &bta_av_sdp_failed;
          break;
        case BTA_AV_STR_OPEN_OK_EVT:
          bta_av_do_close(p_scb, p_data);
          event_handler1 = &bta_av_do_close;
          break;
        case BTA_AV_STR_OPEN_FAIL_EVT:
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_disconnect_req;
          break;
        case BTA_AV_STR_CLOSE_EVT:
          bta_av_disconnect_req(p_scb, p_data);
          event_handler1 = &bta_av_disconnect_req;
          break;
        case BTA_AV_STR_CONFIG_IND_EVT:
          bta_av_setconfig_rej(p_scb, p_data);
          event_handler1 = &bta_av_setconfig_rej;
          break;
        case BTA_AV_STR_SECURITY_IND_EVT:
          bta_av_security_rej(p_scb, p_data);
          event_handler1 = &bta_av_security_rej;
          break;
        case BTA_AV_AVDT_DISCONNECT_EVT:
          p_scb->state = BTA_AV_INIT_SST;
          bta_av_str_closed(p_scb, p_data);
          event_handler1 = &bta_av_str_closed;
          break;
        case BTA_AV_API_OFFLOAD_START_EVT:
          bta_av_offload_req(p_scb, p_data);
          event_handler1 = &bta_av_offload_req;
          break;
        case BTA_AV_API_OFFLOAD_START_RSP_EVT:
          bta_av_offload_rsp(p_scb, p_data);
          event_handler1 = &bta_av_offload_rsp;
          break;
      }
      break;
  }

  if (previous_state != p_scb->state) {
    LOG_INFO("peer %s p_scb=%#x(%p) AV event=0x%x(%s) state=%d(%s) -> %d(%s)",
             p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, p_scb, event,
             bta_av_evt_code(event), previous_state,
             bta_av_sst_code(previous_state), p_scb->state,
             bta_av_sst_code(p_scb->state));

  } else {
    LOG_DEBUG("peer %s p_scb=%#x(%p) AV event=0x%x(%s) state=%d(%s)",
              p_scb->PeerAddress().ToString().c_str(), p_scb->hndl, p_scb,
              event, bta_av_evt_code(event), p_scb->state,
              bta_av_sst_code(p_scb->state));
  }

  if (event_handler1 != nullptr) {
    event_handler1(p_scb, p_data);
  }
  if (event_handler2 != nullptr) {
    event_handler2(p_scb, p_data);
  }
}

/*******************************************************************************