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

Commit eed66e58 authored by Pomai Ahlo's avatar Pomai Ahlo Committed by Automerger Merge Worker
Browse files

Merge changes I8ae504b1,If17c0d67,I5035cf6a,Ic4eccc9d,Iaddb6841, ... into main...

Merge changes I8ae504b1,If17c0d67,I5035cf6a,Ic4eccc9d,Iaddb6841, ... into main am: 758055f8 am: d264e5e5

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/3212782



Change-Id: Id08b6e5ecc590c6e2fac110e9d89198132b33c7c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 66427216 d264e5e5
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -22,13 +22,8 @@

#include "macros.h"

/*
 * Events that can be received by multiplexer as well as port state machines
 */
// Events that can be received by both multiplexer or port state machines
enum tRFC_EVENT : uint16_t {
  /*
   * Events that can be received by multiplexer as well as port state machines
   */
  RFC_EVENT_SABME = 0,
  RFC_EVENT_UA = 1,
  RFC_EVENT_DM = 2,
@@ -38,13 +33,8 @@ enum tRFC_EVENT : uint16_t {
  RFC_EVENT_BAD_FRAME = 50,
};

/*
 * Multiplexer events
 */
// Multiplexer events
enum tRFC_MX_EVENT : uint16_t {
  /*
   * Multiplexer events
   */
  RFC_MX_EVENT_SABME = RFC_EVENT_SABME,
  RFC_MX_EVENT_UA = RFC_EVENT_UA,
  RFC_MX_EVENT_DM = RFC_EVENT_DM,
@@ -62,13 +52,8 @@ enum tRFC_MX_EVENT : uint16_t {
  RFC_MX_EVENT_DISC_IND = 14,
};

/*
 * Port events
 */
// Port events
enum tRFC_PORT_EVENT : uint16_t {
  /*
   * Port events
   */
  RFC_PORT_EVENT_SABME = RFC_EVENT_SABME,
  RFC_PORT_EVENT_UA = RFC_EVENT_UA,
  RFC_PORT_EVENT_DM = RFC_EVENT_DM,
+36 −28
Original line number Diff line number Diff line
@@ -67,8 +67,8 @@ static void rfc_mx_conf_cnf(tRFC_MCB* p_mcb, uint16_t result);
void rfc_mx_sm_execute(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
  log::assert_that(p_mcb != nullptr, "NULL mcb for event {}", event);

  log::info("RFCOMM peer:{} event:{} state:{}", p_mcb->bd_addr, event,
            rfcomm_mx_state_text(static_cast<tRFC_MX_STATE>(p_mcb->state)));
  log::info("RFCOMM peer:{} event:{} state:{}", p_mcb->bd_addr, rfcomm_mx_event_text(event),
            rfcomm_mx_state_text(p_mcb->state));

  switch (p_mcb->state) {
    case RFC_MX_STATE_IDLE:
@@ -100,7 +100,8 @@ void rfc_mx_sm_execute(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
      break;

    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
}

@@ -160,10 +161,12 @@ void rfc_mx_sm_state_idle(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_data
      return;

    default:
      log::error("Mx error state {} event {}", p_mcb->state, event);
      log::error("Mx error state {} event {}", rfcomm_mx_state_text(p_mcb->state),
                 rfcomm_mx_event_text(event));
      return;
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -177,10 +180,10 @@ void rfc_mx_sm_state_idle(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_data
 *
 ******************************************************************************/
void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
  log::verbose("evt {}", event);
  switch (event) {
    case RFC_MX_EVENT_START_REQ:
      log::error("Mx error state {} event {}", p_mcb->state, event);
      log::error("Mx error state:{} event:{}", rfcomm_mx_state_text(p_mcb->state),
                 rfcomm_mx_event_text(event));
      return;

    /* There is some new timing so that Config Ind comes before security is
@@ -217,8 +220,8 @@ void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p
        uint16_t i;
        uint8_t handle;

        log::verbose("RFCOMM MX retry as acceptor in collision case - evt:{} in state:{}", event,
                     p_mcb->state);
        log::verbose("RFCOMM MX retry as acceptor in collision case - evt:{} in state:{}",
                     rfcomm_mx_event_text(event), rfcomm_mx_state_text(p_mcb->state));

        rfc_save_lcid_mcb(NULL, p_mcb->lcid);
        p_mcb->lcid = p_mcb->pending_lcid;
@@ -243,9 +246,11 @@ void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p
      }
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -259,7 +264,6 @@ void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p
 *
 ******************************************************************************/
void rfc_mx_sm_state_configure(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
  log::verbose("event {}", event);
  switch (event) {
    case RFC_MX_EVENT_START_REQ:
    case RFC_MX_EVENT_CONN_CNF:
@@ -291,9 +295,11 @@ void rfc_mx_sm_state_configure(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_dat
      PORT_StartCnf(p_mcb, RFCOMM_ERROR);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -307,7 +313,6 @@ void rfc_mx_sm_state_configure(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_dat
 *
 ******************************************************************************/
void rfc_mx_sm_sabme_wait_ua(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_data */) {
  log::verbose("event {}", event);
  switch (event) {
    case RFC_MX_EVENT_START_REQ:
    case RFC_MX_EVENT_CONN_CNF:
@@ -355,9 +360,11 @@ void rfc_mx_sm_sabme_wait_ua(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_da
      PORT_StartCnf(p_mcb, RFCOMM_ERROR);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -371,7 +378,6 @@ void rfc_mx_sm_sabme_wait_ua(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_da
 *
 ******************************************************************************/
void rfc_mx_sm_state_wait_sabme(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
  log::verbose("event {}", event);
  switch (event) {
    case RFC_MX_EVENT_DISC_IND:
      p_mcb->state = RFC_MX_STATE_IDLE;
@@ -423,9 +429,11 @@ void rfc_mx_sm_state_wait_sabme(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_da
      return;

    default:
      log::warn("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
      log::warn("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -439,8 +447,6 @@ void rfc_mx_sm_state_wait_sabme(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_da
 *
 ******************************************************************************/
void rfc_mx_sm_state_connected(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_data */) {
  log::verbose("event {}", event);

  switch (event) {
    case RFC_MX_EVENT_TIMEOUT:
    case RFC_MX_EVENT_CLOSE_REQ:
@@ -468,9 +474,11 @@ void rfc_mx_sm_state_connected(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_
      PORT_CloseInd(p_mcb);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

/*******************************************************************************
@@ -485,8 +493,6 @@ void rfc_mx_sm_state_connected(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* /* p_
 ******************************************************************************/
void rfc_mx_sm_state_disc_wait_ua(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_data) {
  BT_HDR* p_buf;

  log::verbose("event {}", event);
  switch (event) {
    case RFC_MX_EVENT_UA:
    case RFC_MX_EVENT_DM:
@@ -549,9 +555,11 @@ void rfc_mx_sm_state_disc_wait_ua(tRFC_MCB* p_mcb, tRFC_MX_EVENT event, void* p_
    case RFC_MX_EVENT_QOS_VIOLATION_IND:
      break;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_mcb->state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_mx_event_text(event),
                 rfcomm_mx_state_text(p_mcb->state));
  }
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", event, p_mcb->state);
  log::verbose("RFCOMM MX ignored - evt:{} in state:{}", rfcomm_mx_event_text(event),
               rfcomm_mx_state_text(p_mcb->state));
}

void rfc_on_l2cap_error(uint16_t lcid, uint16_t result) {
+45 −41
Original line number Diff line number Diff line
@@ -78,8 +78,8 @@ void rfc_port_sm_execute(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data) {

  // logs for state RFC_STATE_OPENED handled in rfc_port_sm_opened()
  if (p_port->rfc.state != RFC_STATE_OPENED) {
    log::info("bd_addr:{}, index:{}, state:{}, event:{}", p_port->bd_addr, p_port->handle,
              p_port->rfc.state, event);
    log::info("bd_addr:{}, handle:{}, state:{}, event:{}", p_port->bd_addr, p_port->handle,
              rfcomm_port_state_text(p_port->rfc.state), rfcomm_port_event_text(event));
  }
  switch (p_port->rfc.state) {
    case RFC_STATE_CLOSED:
@@ -152,7 +152,7 @@ void rfc_port_sm_state_closed(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data
      return;

    case RFC_PORT_EVENT_DM:
      log::warn("RFC_EVENT_DM, index={}", p_port->handle);
      log::warn("RFC_EVENT_DM, handle:{}", p_port->handle);
      rfc_port_closed(p_port);
      return;

@@ -170,10 +170,11 @@ void rfc_port_sm_state_closed(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data
      log::error("Port error state {} event {}", p_port->rfc.state, event);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_port->rfc.state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_port_event_text(event),
                 rfcomm_port_state_text(p_port->rfc.state));
  }

  log::warn("Port state closed Event ignored {}", event);
  log::warn("Event ignored {}", rfcomm_port_event_text(event));
  return;
}

@@ -191,7 +192,7 @@ void rfc_port_sm_sabme_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_dat
  switch (event) {
    case RFC_PORT_EVENT_OPEN:
    case RFC_PORT_EVENT_ESTABLISH_RSP:
      log::error("Port error state {} event {}", p_port->rfc.state, event);
      log::error("Port error event:{}", event);
      return;

    case RFC_PORT_EVENT_CLOSE:
@@ -202,7 +203,7 @@ void rfc_port_sm_sabme_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_dat
      return;

    case RFC_PORT_EVENT_CLEAR:
      log::warn("RFC_PORT_EVENT_CLEAR, index={}", p_port->handle);
      log::warn("RFC_PORT_EVENT_CLEAR, handle:{}", p_port->handle);
      rfc_port_closed(p_port);
      return;

@@ -241,7 +242,7 @@ void rfc_port_sm_sabme_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_dat
      return;

    case RFC_PORT_EVENT_DM:
      log::warn("RFC_EVENT_DM, index={}", p_port->handle);
      log::warn("RFC_EVENT_DM, handle:{}", p_port->handle);
      p_port->rfc.p_mcb->is_disc_initiator = true;
      PORT_DlcEstablishCnf(p_port->rfc.p_mcb, p_port->dlci, p_port->rfc.p_mcb->peer_l2cap_mtu,
                           RFCOMM_ERROR);
@@ -249,7 +250,7 @@ void rfc_port_sm_sabme_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_dat
      return;

    case RFC_PORT_EVENT_DISC:
      log::warn("RFC_EVENT_DISC, index={}", p_port->handle);
      log::warn("RFC_EVENT_DISC, handle:{}", p_port->handle);
      rfc_send_ua(p_port->rfc.p_mcb, p_port->dlci);
      PORT_DlcEstablishCnf(p_port->rfc.p_mcb, p_port->dlci, p_port->rfc.p_mcb->peer_l2cap_mtu,
                           RFCOMM_ERROR);
@@ -271,9 +272,10 @@ void rfc_port_sm_sabme_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_dat
                           RFCOMM_ERROR);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_port->rfc.state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_port_event_text(event),
                 rfcomm_port_state_text(static_cast<tRFC_PORT_STATE>(p_port->rfc.state)));
  }
  log::warn("Port state sabme_wait_ua Event ignored {}", event);
  log::warn("Event ignored {}", rfcomm_port_event_text(event));
}

/*******************************************************************************
@@ -304,24 +306,25 @@ void rfc_port_sm_term_wait_sec_check(tPORT* p_port, tRFC_PORT_EVENT event, void*
        }
      } else {
        log::debug("Security check succeeded state:{} port_handle:{}",
                   rfcomm_port_state_text(p_port->rfc.state), p_port->handle);
                   rfcomm_port_state_text(static_cast<tRFC_PORT_STATE>(p_port->rfc.state)),
                   p_port->handle);
        PORT_DlcEstablishInd(p_port->rfc.p_mcb, p_port->dlci, p_port->rfc.p_mcb->peer_l2cap_mtu);
      }
      return;

    case RFC_PORT_EVENT_OPEN:
    case RFC_PORT_EVENT_CLOSE:
      log::error("Port error state {} event {}", p_port->rfc.state, event);
      log::error("Port error event {}", rfcomm_port_event_text(event));
      return;

    case RFC_PORT_EVENT_CLEAR:
      log::warn("RFC_PORT_EVENT_CLEAR, index={}", p_port->handle);
      log::warn("RFC_PORT_EVENT_CLEAR, handle:{}", p_port->handle);
      btm_sec_abort_access_req(p_port->rfc.p_mcb->bd_addr);
      rfc_port_closed(p_port);
      return;

    case RFC_PORT_EVENT_DATA:
      log::error("Port error state Term Wait Sec event Data");
      log::error("Port error event {}", rfcomm_port_event_text(event));
      osi_free(p_data);
      return;

@@ -374,9 +377,10 @@ void rfc_port_sm_term_wait_sec_check(tPORT* p_port, tRFC_PORT_EVENT event, void*
      }
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_port->rfc.state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_port_event_text(event),
                 rfcomm_port_state_text(p_port->rfc.state));
  }
  log::warn("Port state term_wait_sec_check Event ignored {}", event);
  log::warn("Event ignored {}", event);
}

/*******************************************************************************
@@ -394,14 +398,14 @@ void rfc_port_sm_orig_wait_sec_check(tPORT* p_port, tRFC_PORT_EVENT event, void*
  switch (event) {
    case RFC_PORT_EVENT_SEC_COMPLETE:
      if (*((tBTM_STATUS*)p_data) != tBTM_STATUS::BTM_SUCCESS) {
        log::error("Security check failed result:{} state:{} port_handle:{}",
        log::error("Security check failed result:{} state:{} handle:{}",
                   btm_status_text(*((tBTM_STATUS*)p_data)),
                   rfcomm_port_state_text(p_port->rfc.state), p_port->handle);
        p_port->rfc.p_mcb->is_disc_initiator = true;
        PORT_DlcEstablishCnf(p_port->rfc.p_mcb, p_port->dlci, 0, RFCOMM_SECURITY_ERR);
        rfc_port_closed(p_port);
      } else {
        log::debug("Security check succeeded state:{} port_handle:{}",
        log::debug("Security check succeeded state:{} handle:{}",
                   rfcomm_port_state_text(p_port->rfc.state), p_port->handle);
        rfc_send_sabme(p_port->rfc.p_mcb, p_port->dlci);
        rfc_port_timer_start(p_port, RFC_PORT_T1_TIMEOUT);
@@ -411,17 +415,17 @@ void rfc_port_sm_orig_wait_sec_check(tPORT* p_port, tRFC_PORT_EVENT event, void*

    case RFC_PORT_EVENT_OPEN:
    case RFC_PORT_EVENT_SABME: /* Peer should not use the same dlci */
      log::error("Port error state {} event {}", p_port->rfc.state, event);
      log::error("Port error event {}", rfcomm_port_event_text(event));
      return;

    case RFC_PORT_EVENT_CLOSE:
      log::warn("RFC_PORT_EVENT_CLOSE, index={}", p_port->handle);
      log::warn("RFC_PORT_EVENT_CLOSE, handle:{}", p_port->handle);
      btm_sec_abort_access_req(p_port->rfc.p_mcb->bd_addr);
      rfc_port_closed(p_port);
      return;

    case RFC_PORT_EVENT_DATA:
      log::error("Port error state Orig Wait Sec event Data");
      log::error("Port error {}", rfcomm_port_event_text(event));
      osi_free(p_data);
      return;

@@ -429,9 +433,10 @@ void rfc_port_sm_orig_wait_sec_check(tPORT* p_port, tRFC_PORT_EVENT event, void*
      osi_free(p_data);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_port->rfc.state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_port_event_text(event),
                 rfcomm_port_state_text(p_port->rfc.state));
  }
  log::warn("Port state orig_wait_sec_check Event ignored {}", event);
  log::warn("Event ignored {}", rfcomm_port_event_text(event));
}

/*******************************************************************************
@@ -467,11 +472,9 @@ void rfc_port_sm_opened(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data) {
      return;

    case RFC_PORT_EVENT_DATA:
      /* Send credits in the frame.  Pass them in the layer specific member of
       * the hdr. */
      /* There might be an initial case when we reduced rx_max and credit_rx is
       * still */
      /* bigger.  Make sure that we do not send 255 */
      // Send credits in the frame.  Pass them in the layer specific member of the hdr.
      // There might be an initial case when we reduced rx_max and credit_rx is still bigger.
      // Make sure that we do not send 255
      log::verbose("RFC_PORT_EVENT_DATA bd_addr:{} handle:{} dlci:{} scn:{}", p_port->bd_addr,
                   p_port->handle, p_port->dlci, p_port->scn);
      if ((p_port->rfc.p_mcb->flow == PORT_FC_CREDIT) &&
@@ -531,11 +534,12 @@ void rfc_port_sm_opened(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data) {
      return;

    default:
      break;
  }
      log::error("Received unexpected event:{} bd_addr:{} handle:{} dlci:{} scn:{}",
                 rfcomm_port_event_text(event), p_port->bd_addr, p_port->handle, p_port->dlci,
                 p_port->scn);
      break;
  }
  log::warn("Event ignored {}", rfcomm_port_event_text(event));
}

/*******************************************************************************
@@ -552,11 +556,11 @@ void rfc_port_sm_disc_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data
  switch (event) {
    case RFC_PORT_EVENT_OPEN:
    case RFC_PORT_EVENT_ESTABLISH_RSP:
      log::error("Port error state {} event {}", p_port->rfc.state, event);
      log::error("Port error event {}", rfcomm_port_event_text(event));
      return;

    case RFC_PORT_EVENT_CLEAR:
      log::warn("RFC_PORT_EVENT_CLEAR, index={}", p_port->handle);
      log::warn("RFC_PORT_EVENT_CLEAR, handle:{}", p_port->handle);
      rfc_port_closed(p_port);
      return;

@@ -569,7 +573,7 @@ void rfc_port_sm_disc_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data
      FALLTHROUGH_INTENDED; /* FALLTHROUGH */

    case RFC_PORT_EVENT_DM:
      log::warn("RFC_EVENT_DM|RFC_EVENT_UA[{}], index={}", event, p_port->handle);
      log::warn("RFC_EVENT_DM|RFC_EVENT_UA[{}], handle:{}", event, p_port->handle);
      if (com::android::bluetooth::flags::rfcomm_always_disc_initiator_in_disc_wait_ua()) {
        // If we got a DM in RFC_STATE_DISC_WAIT_UA, it's likely that both ends
        // attempt to DISC at the same time and both get a DM.
@@ -598,14 +602,15 @@ void rfc_port_sm_disc_wait_ua(tPORT* p_port, tRFC_PORT_EVENT event, void* p_data
      return;

    case RFC_PORT_EVENT_TIMEOUT:
      log::error("RFC_EVENT_TIMEOUT, index={}", p_port->handle);
      log::error("RFC_EVENT_TIMEOUT, handle:{}", p_port->handle);
      rfc_port_closed(p_port);
      return;
    default:
      log::error("Received unexpected event:{} in state:{}", event, p_port->rfc.state);
      log::error("Received unexpected event:{} in state:{}", rfcomm_port_event_text(event),
                 rfcomm_port_state_text(p_port->rfc.state));
  }

  log::warn("Port state disc_wait_ua Event ignored {}", event);
  log::warn("Event ignored {}", rfcomm_port_event_text(event));
}

/*******************************************************************************
@@ -697,15 +702,14 @@ void rfc_process_rpn(tRFC_MCB* p_mcb, bool is_command, bool is_request, MX_FRAME
    return;
  }

  /* If we are not awaiting response just ignore it */
  // If we are not awaiting response just ignore it
  p_port = port_find_mcb_dlci_port(p_mcb, p_frame->dlci);
  if ((p_port == nullptr) || !(p_port->rfc.expected_rsp & (RFC_RSP_RPN | RFC_RSP_RPN_REPLY))) {
    log::warn("ignore DLC parameter negotiation as we are not waiting for any");
    return;
  }

  /* If we sent a request for port parameters to the peer it is replying with */
  /* mask 0. */
  // If we sent a request for port parameters to the peer it is replying with mask 0.
  rfc_port_timer_stop(p_port);

  if (p_port->rfc.expected_rsp & RFC_RSP_RPN_REPLY) {
+2 −6
Original line number Diff line number Diff line
@@ -20,9 +20,7 @@

#include "macros.h"

/*
 * Define states and events for the RFC multiplexer state machine
 */
// Multiplexer states
typedef enum : uint16_t {
  RFC_MX_STATE_IDLE = 0,
  RFC_MX_STATE_WAIT_CONN_CNF = 1,
@@ -33,9 +31,7 @@ typedef enum : uint16_t {
  RFC_MX_STATE_DISC_WAIT_UA = 6,
} tRFC_MX_STATE;

/*
 * Define port states
 */
// Port states
typedef enum : uint8_t {
  RFC_STATE_CLOSED = 0,
  RFC_STATE_SABME_WAIT_UA = 1,