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

Commit e4ae982d authored by Chris Manton's avatar Chris Manton
Browse files

stack::l2cap class enum-ify tL2CAP_CFG_RESULT

Bug: 361948635
Test: m .
Flag: EXEMPT, Mechanical Refactor

Change-Id: Idc3ddcadaca7ba184b6da389bde13d2d44c0863b
parent b4ddda63
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@
#include <com_android_bluetooth_flags.h>

#include <map>
#include <memory>
#include <utility>
#include <vector>

#include "bind_helpers.h"
@@ -157,13 +159,15 @@ struct eatt_impl {
    uint16_t max_mps = shim::GetController()->GetLeBufferSize().le_data_packet_length_;

    tL2CAP_LE_CFG_INFO local_coc_cfg = {
            .result = L2CAP_LE_RESULT_CONN_OK,
            .result = tL2CAP_CFG_RESULT::L2CAP_CFG_OK,
            .mtu = eatt_dev->rx_mtu_,
            .mps = eatt_dev->rx_mps_ < max_mps ? eatt_dev->rx_mps_ : max_mps,
            .credits = L2CA_LeCreditDefault(),
    };

    if (!L2CA_ConnectCreditBasedRsp(bda, identifier, lcids, L2CAP_CONN_OK, &local_coc_cfg)) {
    if (!L2CA_ConnectCreditBasedRsp(bda, identifier, lcids,
                                    tL2CAP_LE_RESULT_CODE::L2CAP_LE_RESULT_CONN_OK,
                                    &local_coc_cfg)) {
      log::warn("Unable to respond L2CAP le_coc credit indication peer:{}", bda);
      return false;
    }
@@ -415,8 +419,9 @@ struct eatt_impl {
    // regardless of success result, we have finished reconfiguration
    channel->EattChannelSetState(EattChannelState::EATT_CHANNEL_OPENED);

    if (p_cfg->result != L2CAP_CFG_OK) {
      log::info("reconfig failed lcid: 0x{:x} result: 0x{:x}", lcid, p_cfg->result);
    if (p_cfg->result != tL2CAP_CFG_RESULT::L2CAP_CFG_OK) {
      log::info("reconfig failed lcid: 0x{:x} result:{}", lcid,
                l2cap_cfg_result_text(p_cfg->result));
      return;
    }

@@ -541,7 +546,7 @@ struct eatt_impl {
    }

    tL2CAP_LE_CFG_INFO local_coc_cfg = {
            .result = L2CAP_LE_RESULT_CONN_OK,
            .result = tL2CAP_CFG_RESULT::L2CAP_CFG_OK,
            .mtu = eatt_dev->rx_mtu_,
            .mps = eatt_dev->rx_mps_,
            .credits = L2CA_LeCreditDefault(),
@@ -782,7 +787,10 @@ struct eatt_impl {
    std::vector<uint16_t> cids = {cid};

    tL2CAP_LE_CFG_INFO cfg = {
            .result = L2CAP_LE_RESULT_CONN_OK, .mtu = new_mtu, .mps = eatt_dev->rx_mps_};
            .result = tL2CAP_CFG_RESULT::L2CAP_CFG_OK,
            .mtu = new_mtu,
            .mps = eatt_dev->rx_mps_,
    };

    if (!L2CA_ReconfigCreditBasedConnsReq(eatt_dev->bda_, cids, &cfg)) {
      log::error("Could not start reconfig cid: 0x{:x} or device {}", cid, bd_addr);
@@ -821,7 +829,7 @@ struct eatt_impl {
    }

    tL2CAP_LE_CFG_INFO cfg = {
            .result = L2CAP_LE_RESULT_CONN_OK, .mtu = new_mtu, .mps = eatt_dev->rx_mps_};
            .result = tL2CAP_CFG_RESULT::L2CAP_CFG_OK, .mtu = new_mtu, .mps = eatt_dev->rx_mps_};

    if (!L2CA_ReconfigCreditBasedConnsReq(eatt_dev->bda_, cids, &cfg)) {
      log::error("Could not start reconfig for device {}", bd_addr);
+1 −1
Original line number Diff line number Diff line
@@ -285,7 +285,7 @@ static void hidh_on_l2cap_error(uint16_t l2cap_cid, uint16_t result) {

  hidh_conn_disconnect(dhandle);

  if (result != L2CAP_CFG_FAILED_NO_REASON) {
  if (result != static_cast<uint16_t>(tL2CAP_CFG_RESULT::L2CAP_CFG_FAILED_NO_REASON)) {
#if (HID_HOST_MAX_CONN_RETRY > 0)
    if ((hh_cb.devices[dhandle].conn_tries <= HID_HOST_MAX_CONN_RETRY) &&
        (result == HCI_ERR_CONNECTION_TOUT || result == HCI_ERR_UNSPECIFIED ||
+2 −2
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ typedef struct {
 * use to signify its presence or absence.
 */
typedef struct {
  uint16_t result; /* Only used in confirm messages */
  tL2CAP_CFG_RESULT result; /* Only used in confirm messages */
  bool mtu_present;
  uint16_t mtu;
  bool qos_present;
@@ -150,7 +150,7 @@ uint16_t L2CA_LeCreditThreshold();
constexpr uint8_t L2CAP_CREDIT_BASED_MAX_CIDS = 5;

struct tL2CAP_LE_CFG_INFO {
  uint16_t result{L2CAP_LE_RESULT_CONN_OK}; /* Only used in confirm messages */
  tL2CAP_CFG_RESULT result{tL2CAP_CFG_RESULT::L2CAP_CFG_OK}; /* Only used in confirm messages */
  uint16_t mtu{kDefaultL2capMtu};
  uint16_t mps{kDefaultL2capMps};
  uint16_t credits{L2CA_LeCreditDefault()};
+13 −2
Original line number Diff line number Diff line
@@ -272,7 +272,7 @@ inline std::string l2cap_cid_fixed_text(const tL2CAP_CID_FIXED& cid) {
    CASE_RETURN_STRING_HEX04(L2CAP_SMP_CID);
    CASE_RETURN_STRING_HEX04(L2CAP_SMP_BR_CID);
    CASE_RETURN_STRING_HEX04(L2CAP_BASE_APPL_CID);
  };
  }
  RETURN_UNKNOWN_TYPE_STRING(type, cid);
}

@@ -298,7 +298,7 @@ inline std::string l2cap_cid_fixed_text(const tL2CAP_CID_FIXED& cid) {

/* Define the L2CAP configuration result codes
 */
enum tL2CAP_CFG_RESULT : uint16_t {
enum class tL2CAP_CFG_RESULT : uint16_t {
  L2CAP_CFG_OK = 0,
  L2CAP_CFG_UNACCEPTABLE_PARAMS = 1,
  L2CAP_CFG_FAILED_NO_REASON = 2,
@@ -306,6 +306,17 @@ enum tL2CAP_CFG_RESULT : uint16_t {
  L2CAP_CFG_PENDING = 4,
};

inline std::string l2cap_cfg_result_text(const tL2CAP_CFG_RESULT& result) {
  switch (result) {
    CASE_RETURN_STRING_HEX04(tL2CAP_CFG_RESULT::L2CAP_CFG_OK);
    CASE_RETURN_STRING_HEX04(tL2CAP_CFG_RESULT::L2CAP_CFG_UNACCEPTABLE_PARAMS);
    CASE_RETURN_STRING_HEX04(tL2CAP_CFG_RESULT::L2CAP_CFG_FAILED_NO_REASON);
    CASE_RETURN_STRING_HEX04(tL2CAP_CFG_RESULT::L2CAP_CFG_UNKNOWN_OPTIONS);
    CASE_RETURN_STRING_HEX04(tL2CAP_CFG_RESULT::L2CAP_CFG_PENDING);
  }
  RETURN_UNKNOWN_TYPE_STRING(type, result);
}

/* Define the L2CAP configuration option types
 */
#define L2CAP_CFG_TYPE_MTU 0x01
+13 −13
Original line number Diff line number Diff line
@@ -317,9 +317,9 @@ void l2cble_process_sig_cmd(tL2C_LCB* p_lcb, uint8_t* p, uint16_t pkt_len) {
             * 1.25) - 1)) ||*/
            timeout < BTM_BLE_CONN_SUP_TOUT_MIN || timeout > BTM_BLE_CONN_SUP_TOUT_MAX ||
            max_interval < min_interval) {
          l2cu_send_peer_ble_par_rsp(p_lcb, L2CAP_CFG_UNACCEPTABLE_PARAMS, id);
          l2cu_send_peer_ble_par_rsp(p_lcb, tL2CAP_CFG_RESULT::L2CAP_CFG_UNACCEPTABLE_PARAMS, id);
        } else {
          l2cu_send_peer_ble_par_rsp(p_lcb, L2CAP_CFG_OK, id);
          l2cu_send_peer_ble_par_rsp(p_lcb, tL2CAP_CFG_RESULT::L2CAP_CFG_OK, id);

          p_lcb->min_interval = min_interval;
          p_lcb->max_interval = max_interval;
@@ -655,14 +655,16 @@ void l2cble_process_sig_cmd(tL2C_LCB* p_lcb, uint8_t* p, uint16_t pkt_len) {
    }

    case L2CAP_CMD_CREDIT_BASED_RECONFIG_RES: {
      uint16_t result;
      if (p + sizeof(uint16_t) > p_pkt_end) {
      uint16_t result_u16;
      if (p + sizeof(tL2CAP_CFG_RESULT) > p_pkt_end) {
        log::error("invalid read");
        return;
      }
      STREAM_TO_UINT16(result, p);
      STREAM_TO_UINT16(result_u16, p);
      tL2CAP_CFG_RESULT result = static_cast<tL2CAP_CFG_RESULT>(result_u16);

      log::verbose("Recv L2CAP_CMD_CREDIT_BASED_RECONFIG_RES for result = 0x{:04x}", result);
      log::verbose("Recv L2CAP_CMD_CREDIT_BASED_RECONFIG_RES for result:{}",
                   l2cap_cfg_result_text(result));

      p_lcb->pending_ecoc_reconfig_cfg.result = result;

@@ -676,7 +678,7 @@ void l2cble_process_sig_cmd(tL2C_LCB* p_lcb, uint8_t* p, uint16_t pkt_len) {
                          &p_lcb->pending_ecoc_reconfig_cfg);

          temp_p_ccb->reconfig_started = false;
          if (result == L2CAP_CFG_OK) {
          if (result == tL2CAP_CFG_RESULT::L2CAP_CFG_OK) {
            temp_p_ccb->local_conn_cfg = p_lcb->pending_ecoc_reconfig_cfg;
          }
        }
@@ -977,16 +979,14 @@ void l2c_ble_link_adjust_allocation(void) {
  if (num_lowpri_links > low_quota) {
    l2cb.ble_round_robin_quota = low_quota;
    qq = qq_remainder = 0;
  }
  } else if (num_lowpri_links > 0) {
    /* If each low priority link can have at least one buffer */
  else if (num_lowpri_links > 0) {
    l2cb.ble_round_robin_quota = 0;
    l2cb.ble_round_robin_unacked = 0;
    qq = low_quota / num_lowpri_links;
    qq_remainder = low_quota % num_lowpri_links;
  }
  } else {
    /* If no low priority link */
  else {
    l2cb.ble_round_robin_quota = 0;
    l2cb.ble_round_robin_unacked = 0;
    qq = qq_remainder = 0;
Loading