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

Commit ee5d81de authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes Ia9c30515,Ie2fe04cd,I334e82ed,Idf55cc17,Id0815ac6, ... am: baa5a987 am: 3cf066eb

Original change: https://android-review.googlesource.com/c/platform/system/bt/+/1539906

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I0748c425ef7e832293ae2c5344e265f89677c4e2
parents 41328600 3cf066eb
Loading
Loading
Loading
Loading
+27 −23
Original line number Diff line number Diff line
@@ -604,7 +604,11 @@ void bta_ag_at_hsp_cback(tBTA_AG_SCB* p_scb, uint16_t command_id,
  strlcpy(val.str, p_arg, sizeof(val.str));

  /* call callback with event */
  (*bta_ag_cb.p_cback)(command_id, (tBTA_AG*)&val);
  if (command_id & 0xff00) {
    LOG_WARN("Received value that exceeds data type - lost information");
  }
  tBTA_AG_EVT event = static_cast<tBTA_AG_EVT>(command_id);
  (*bta_ag_cb.p_cback)(event, (tBTA_AG*)&val);
}

static void remove_spaces(char* str) {
@@ -867,7 +871,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
   * If |event| is 0 at the end of this function, the application
   * callback is NOT invoked.
   */
  tBTA_AG_EVT event = 0;
  tBTA_AG_EVT event = BTA_AG_ENABLE_EVT;
  if (cmd < BTA_AG_LOCAL_EVT_FIRST) {
    event = static_cast<tBTA_AG_EVT>(cmd);
  }
@@ -885,7 +889,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      if (!bta_ag_sco_is_active_device(p_scb->peer_addr)) {
        LOG(WARNING) << __func__ << ": AT+CHUP rejected as " << p_scb->peer_addr
                << " is not the active device";
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_ALLOWED);
      } else {
        bta_ag_send_ok(p_scb);
@@ -908,7 +912,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        remove_spaces(val.str + 1);

        if (!utl_isintstr(val.str + 1)) {
          event = 0;
          event = BTA_AG_ENABLE_EVT;
          bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR);
        }
      } else if (val.str[0] == 'V') /* ATDV : Dial VoIP Call */
@@ -916,7 +920,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        /* We do not check string. Code will be added later if needed. */
        if (!((p_scb->peer_features & BTA_AG_PEER_FEAT_VOIP) &&
              (p_scb->features & BTA_AG_FEAT_VOIP))) {
          event = 0;
          event = BTA_AG_ENABLE_EVT;
          bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
        }
      }
@@ -928,7 +932,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        remove_spaces(val.str);

        if (!utl_isdialstr(val.str)) {
          event = 0;
          event = BTA_AG_ENABLE_EVT;
          bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR);
        }
      }
@@ -945,7 +949,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
    case BTA_AG_AT_CHLD_EVT:
      if (arg_type == BTA_AG_AT_TEST) {
        /* don't call callback */
        event = 0;
        event = BTA_AG_ENABLE_EVT;

        /* send CHLD string */
        /* Form string based on supported 1.5 feature */
@@ -973,7 +977,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        val.idx = bta_ag_parse_chld(p_scb, val.str);

        if (val.idx == BTA_AG_INVALID_CHLD) {
          event = 0;
          event = BTA_AG_ENABLE_EVT;
          bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
          break;
        }
@@ -982,7 +986,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
              (p_scb->peer_features & BTA_AG_PEER_FEAT_ECC))) {
          /* we do not support ECC, but HF is sending us a CHLD with call
           * index*/
          event = 0;
          event = BTA_AG_ENABLE_EVT;
          bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);

        } else {
@@ -1014,7 +1018,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        if (bta_ag_parse_bind_set(p_scb, val)) {
          bta_ag_send_ok(p_scb);
        } else {
          event = 0; /* don't call callback */
          event = BTA_AG_ENABLE_EVT; /* don't call callback */
          bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX);
        }
      } else {
@@ -1022,7 +1026,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,

        /* Need not pass this command beyond BTIF.*/
        /* Stack handles it internally */
        event = 0; /* don't call callback */
        event = BTA_AG_ENABLE_EVT; /* don't call callback */
      }
      break;

@@ -1032,14 +1036,14 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      } else {
        bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX);
        /* don't call callback receiving invalid indicator */
        event = 0;
        event = BTA_AG_ENABLE_EVT;
      }
      break;

    case BTA_AG_AT_CIND_EVT:
      if (arg_type == BTA_AG_AT_TEST) {
        /* don't call callback */
        event = 0;
        event = BTA_AG_ENABLE_EVT;

        /* send CIND string, send OK */
        bta_ag_send_result(p_scb, BTA_AG_CIND_RES, p_bta_ag_cfg->cind_info, 0);
@@ -1078,7 +1082,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      if (strlen(p_arg) == 1) {
        bta_ag_send_ok(p_scb);
      } else {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR);
      }
      break;
@@ -1086,7 +1090,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
    case BTA_AG_AT_BINP_EVT:
      /* if feature not set don't call callback, send ERROR */
      if (!(p_scb->features & BTA_AG_FEAT_VTAG)) {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      break;
@@ -1095,7 +1099,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      /* if feature not supported don't call callback, send ERROR. App will send
       * OK */
      if (!(p_scb->features & BTA_AG_FEAT_VREC)) {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      break;
@@ -1124,7 +1128,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
      if (p_scb->features & BTA_AG_FEAT_ECNR) {
        bta_ag_send_ok(p_scb);
      } else {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      break;
@@ -1146,7 +1150,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
          val.num = BTA_AG_BTRH_READ;
        }
      } else {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      break;
@@ -1154,7 +1158,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
    case BTA_AG_AT_COPS_EVT:
      if (arg_type == BTA_AG_AT_SET) {
        /* don't call callback */
        event = 0;
        event = BTA_AG_ENABLE_EVT;

        /* send OK */
        bta_ag_send_ok(p_scb);
@@ -1172,7 +1176,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      /* don't call callback */
      event = 0;
      event = BTA_AG_ENABLE_EVT;
      break;

    case BTA_AG_AT_BIA_EVT:
@@ -1203,7 +1207,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
        val.num = bia_masked_out;
        bta_ag_send_ok(p_scb);
      } else {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX);
      }
      break;
@@ -1213,7 +1217,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,

    case BTA_AG_AT_CLCC_EVT:
      if (!(p_scb->features & BTA_AG_FEAT_ECS)) {
        event = 0;
        event = BTA_AG_ENABLE_EVT;
        bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED);
      }
      break;
@@ -1300,7 +1304,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type,
  }

  /* call callback */
  if (event != 0) {
  if (event != BTA_AG_ENABLE_EVT) {
    (*bta_ag_cb.p_cback)(event, (tBTA_AG*)&val);
  }
}
+3 −0
Original line number Diff line number Diff line
@@ -133,6 +133,9 @@ typedef struct {
typedef struct {
  tBTA_AG_RES result;
  tBTA_AG_RES_DATA data;
  std::string ToString() const {
    return base::StringPrintf("result:%s", bta_ag_result_text(result).c_str());
  }
} tBTA_AG_API_RESULT;

/* data type for BTA_AG_API_SETCODEC_EVT */
+16 −28
Original line number Diff line number Diff line
@@ -31,8 +31,10 @@
#include "btm_api.h"
#include "device/include/controller.h"
#include "device/include/esco_parameters.h"
#include "main/shim/dumpsys.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"
#include "stack/btm/btm_sco.h"
#include "stack/include/btu.h"
#include "utl.h"

@@ -159,21 +161,17 @@ static void bta_ag_sco_conn_cback(uint16_t sco_idx) {
static void bta_ag_sco_disc_cback(uint16_t sco_idx) {
  uint16_t handle = 0;

  APPL_TRACE_DEBUG(
      "bta_ag_sco_disc_cback(): sco_idx: 0x%x  p_cur_scb: 0x%08x  sco.state: "
      "%d",
      sco_idx, bta_ag_cb.sco.p_curr_scb, bta_ag_cb.sco.state);

  APPL_TRACE_DEBUG(
      "bta_ag_sco_disc_cback(): scb[0] addr: 0x%08x  in_use: %u  sco_idx: 0x%x "
      " sco state: %u",
      &bta_ag_cb.scb[0], bta_ag_cb.scb[0].in_use, bta_ag_cb.scb[0].sco_idx,
      bta_ag_cb.scb[0].state);
  APPL_TRACE_DEBUG(
      "bta_ag_sco_disc_cback(): scb[1] addr: 0x%08x  in_use: %u  sco_idx: 0x%x "
      " sco state: %u",
      &bta_ag_cb.scb[1], bta_ag_cb.scb[1].in_use, bta_ag_cb.scb[1].sco_idx,
      bta_ag_cb.scb[1].state);
  LOG_DEBUG(
      "sco_idx: 0x%x sco.state:%s", sco_idx,
      sco_state_text(static_cast<tSCO_STATE>(bta_ag_cb.sco.state)).c_str());
  LOG_DEBUG(
      "  scb[0] in_use:%s sco_idx: 0x%x sco state:%s",
      logbool(bta_ag_cb.scb[0].in_use).c_str(), bta_ag_cb.scb[0].sco_idx,
      sco_state_text(static_cast<tSCO_STATE>(bta_ag_cb.scb[0].state)).c_str());
  LOG_DEBUG(
      "  scb[1] in_use:%s sco_idx:0x%x sco state:%s",
      logbool(bta_ag_cb.scb[1].in_use).c_str(), bta_ag_cb.scb[1].sco_idx,
      sco_state_text(static_cast<tSCO_STATE>(bta_ag_cb.scb[1].state)).c_str());

  /* match callback to scb */
  if (bta_ag_cb.sco.p_curr_scb != nullptr && bta_ag_cb.sco.p_curr_scb->in_use) {
@@ -345,7 +343,7 @@ static void bta_ag_cback_sco(tBTA_AG_SCB* p_scb, uint8_t event) {
  sco.handle = bta_ag_scb_to_idx(p_scb);
  sco.app_id = p_scb->app_id;
  /* call close cback */
  (*bta_ag_cb.p_cback)(event, (tBTA_AG*)&sco);
  (*bta_ag_cb.p_cback)(static_cast<tBTA_AG_EVT>(event), (tBTA_AG*)&sco);
}

/*******************************************************************************
@@ -604,21 +602,11 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) {
  }
}

/*******************************************************************************
 *
 * Function         bta_ag_sco_event
 *
 * Description
 *
 *
 * Returns          void
 *
 ******************************************************************************/
static void bta_ag_sco_event(tBTA_AG_SCB* p_scb, uint8_t event) {
  tBTA_AG_SCO_CB* p_sco = &bta_ag_cb.sco;
  uint8_t previous_state = p_sco->state;
  LOG_INFO("index=0x%04x, device=%s, state=%s[%d], event=%s[%d]",
           p_scb->sco_idx, p_scb->peer_addr.ToString().c_str(),
  LOG_INFO("device:%s index:0x%04x state:%s[%d] event:%s[%d]",
           PRIVATE_ADDRESS(p_scb->peer_addr), p_scb->sco_idx,
           bta_ag_sco_state_str(p_sco->state), p_sco->state,
           bta_ag_sco_evt_str(event), event);

+19 −3
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@
#include "osi/include/list.h"
#include "stack/include/a2dp_api.h"

#define CASE_RETURN_TEXT(code) \
  case code:                   \
    return #code

/*****************************************************************************
 *  Constants
 ****************************************************************************/
@@ -226,13 +230,25 @@ typedef struct {
  uint16_t service_uuid;
} tBTA_AV_API_REG;

enum {
typedef enum : uint8_t {
  BTA_AV_RS_NONE, /* straight API call */
  BTA_AV_RS_OK,   /* the role switch result - successful */
  BTA_AV_RS_FAIL, /* the role switch result - failed */
  BTA_AV_RS_DONE  /* the role switch is done - continue */
};
typedef uint8_t tBTA_AV_RS_RES;
} tBTA_AV_RS_RES;

inline std::string bta_av_role_switch_result_text(
    const tBTA_AV_RS_RES& result) {
  switch (result) {
    CASE_RETURN_TEXT(BTA_AV_RS_NONE);
    CASE_RETURN_TEXT(BTA_AV_RS_OK);
    CASE_RETURN_TEXT(BTA_AV_RS_FAIL);
    CASE_RETURN_TEXT(BTA_AV_RS_DONE);
    default:
      return std::string("UNKNOWN");
  }
}

/* data type for BTA_AV_API_OPEN_EVT */
typedef struct {
  BT_HDR hdr;
+7 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <string.h>

#include "bt_target.h"
#include "main/shim/dumpsys.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"
#include "osi/include/properties.h"
@@ -895,9 +896,12 @@ static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, uint8_t id,
  int i;
  tBTA_AV_API_STOP stop;

  LOG(INFO) << __func__ << ": status=" << +status << ", num_links=" << +id;
  LOG(INFO) << __func__ << ": status=" << bta_sys_conn_status_text(status)
            << ", num_links=" << +id;
  if (id) {
    bta_av_cb.sco_occupied = true;
    LOG_DEBUG("SCO occupied peer:%s status:%s", PRIVATE_ADDRESS(peer_addr),
              bta_sys_conn_status_text(status).c_str());

    if (bta_av_cb.features & BTA_AV_FEAT_NO_SCO_SSPD) {
      return;
@@ -919,6 +923,8 @@ static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, uint8_t id,
    }
  } else {
    bta_av_cb.sco_occupied = false;
    LOG_DEBUG("SCO unoccupied peer:%s status:%s", PRIVATE_ADDRESS(peer_addr),
              bta_sys_conn_status_text(status).c_str());

    if (bta_av_cb.features & BTA_AV_FEAT_NO_SCO_SSPD) {
      return;
Loading