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

Commit fc1b6d00 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "AV stream state machine logging"

parents 772c20f7 9b0a3393
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);
  }
}

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