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

Commit 27835863 authored by Myles Watson's avatar Myles Watson Committed by Automerger Merge Worker
Browse files

Merge changes I1be7a519,I41148377 into main am: f75521b1 am: 52f2c7c8

parents e008e1e2 52f2c7c8
Loading
Loading
Loading
Loading
+19 −104
Original line number Diff line number Diff line
@@ -1439,16 +1439,11 @@ static void btm_process_inq_results_standard(const uint8_t* p,
 *                  from the device. It updates the inquiry database. If the
 *                  inquiry database is full, the oldest entry is discarded.
 *
 * Parameters       inq_res_mode - BTM_INQ_RESULT_STANDARD
 *                                 BTM_INQ_RESULT_WITH_RSSI
 *                                 BTM_INQ_RESULT_EXTENDED
 *
 *
 * Returns          void
 *
 ******************************************************************************/
static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
                                         uint8_t inq_res_mode) {
static void btm_process_inq_results_rssi(const uint8_t* p,
                                         uint8_t hci_evt_len) {
  uint8_t num_resp, xx;
  RawAddress bda;
  tINQ_DB_ENT* p_i;
@@ -1476,19 +1471,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,

  STREAM_TO_UINT8(num_resp, p);

  if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) {
    if (num_resp > 1) {
      log::error("extended results ({}) > 1", num_resp);
      return;
    }

    constexpr uint16_t extended_inquiry_result_size = 254;
    if (hci_evt_len - 1 != extended_inquiry_result_size) {
      log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len);
      return;
    }
  } else if (inq_res_mode == BTM_INQ_RESULT_STANDARD ||
             inq_res_mode == BTM_INQ_RESULT_WITH_RSSI) {
  {
    constexpr uint16_t inquiry_result_size = 14;
    if (hci_evt_len < num_resp * inquiry_result_size) {
      log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len);
@@ -1504,15 +1487,9 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
    STREAM_TO_UINT8(page_scan_rep_mode, p);
    STREAM_TO_UINT8(page_scan_per_mode, p);

    if (inq_res_mode == BTM_INQ_RESULT_STANDARD) {
      STREAM_TO_UINT8(page_scan_mode, p);
    }

    STREAM_TO_DEVCLASS(dc, p);
    STREAM_TO_UINT16(clock_offset, p);
    if (inq_res_mode != BTM_INQ_RESULT_STANDARD) {
    STREAM_TO_UINT8(rssi, p);
    }

    p_i = btm_inq_db_find(bda);

@@ -1533,13 +1510,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
        p_cur->rssi = i_rssi;
        update = true;
      }
      /* If we received a second Extended Inq Event for an already */
      /* discovered device, this is because for the first one EIR was not
         received */
      else if ((inq_res_mode == BTM_INQ_RESULT_EXTENDED) && (p_i)) {
        p_cur = &p_i->inq_info.results;
        update = true;
      }
      /* If no update needed continue with next response (if any) */
      else
        continue;
@@ -1553,20 +1523,15 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
    }

    /* If an entry for the device already exists, overwrite it ONLY if it is
       from
       a previous inquiry. (Ignore it if it is a duplicate response from the
       same
       inquiry.
       from a previous inquiry. (Ignore it if it is a duplicate response from
       the same inquiry.
    */
    else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter &&
             (p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BREDR))
      is_new = false;

    /* keep updating RSSI to have latest value */
    if (inq_res_mode != BTM_INQ_RESULT_STANDARD)
    p_i->inq_info.results.rssi = (int8_t)rssi;
    else
      p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI;

    if (is_new) {
      /* Save the info */
@@ -1584,17 +1549,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
      if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) {
        /* A new response was found */
        btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++;
        switch (static_cast<tBTM_INQ_RESULT>(inq_res_mode)) {
          case BTM_INQ_RESULT_STANDARD:
          case BTM_INQ_RESULT_WITH_RSSI:
          case BTM_INQ_RESULT_EXTENDED:
            btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[inq_res_mode]++;
            break;
          case BTM_INQ_RES_IGNORE_RSSI:
            btm_cb.btm_inq_vars.inq_cmpl_info
                .resp_type[BTM_INQ_RESULT_STANDARD]++;
            break;
        }
        btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[BTM_INQ_RESULT_WITH_RSSI]++;
      }

      p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR;
@@ -1611,13 +1566,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
    }

    if (is_new || update) {
      if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) {
        memset(p_cur->eir_uuid, 0,
               BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8));
        /* set bit map of UUID list from received EIR */
        btm_set_eir_uuid(p, p_cur);
        p_eir_data = p;
      } else
      p_eir_data = NULL;

      /* If a callback is registered, call it with the results */
@@ -1639,17 +1587,11 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len,
 *                  from the device. It updates the inquiry database. If the
 *                  inquiry database is full, the oldest entry is discarded.
 *
 * Parameters       inq_res_mode - BTM_INQ_RESULT_STANDARD
 *                                 BTM_INQ_RESULT_WITH_RSSI
 *                                 BTM_INQ_RESULT_EXTENDED
 *
 *
 * Returns          void
 *
 ******************************************************************************/
static void btm_process_inq_results_extended(const uint8_t* p,
                                             uint8_t hci_evt_len,
                                             uint8_t inq_res_mode) {
                                             uint8_t hci_evt_len) {
  uint8_t num_resp, xx;
  RawAddress bda;
  tINQ_DB_ENT* p_i;
@@ -1677,7 +1619,7 @@ static void btm_process_inq_results_extended(const uint8_t* p,

  STREAM_TO_UINT8(num_resp, p);

  if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) {
  {
    if (num_resp > 1) {
      log::error("extended results ({}) > 1", num_resp);
      return;
@@ -1688,13 +1630,6 @@ static void btm_process_inq_results_extended(const uint8_t* p,
      log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len);
      return;
    }
  } else if (inq_res_mode == BTM_INQ_RESULT_STANDARD ||
             inq_res_mode == BTM_INQ_RESULT_WITH_RSSI) {
    constexpr uint16_t inquiry_result_size = 14;
    if (hci_evt_len < num_resp * inquiry_result_size) {
      log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len);
      return;
    }
  }

  btm_cb.neighbor.classic_inquiry.results += num_resp;
@@ -1705,15 +1640,9 @@ static void btm_process_inq_results_extended(const uint8_t* p,
    STREAM_TO_UINT8(page_scan_rep_mode, p);
    STREAM_TO_UINT8(page_scan_per_mode, p);

    if (inq_res_mode == BTM_INQ_RESULT_STANDARD) {
      STREAM_TO_UINT8(page_scan_mode, p);
    }

    STREAM_TO_DEVCLASS(dc, p);
    STREAM_TO_UINT16(clock_offset, p);
    if (inq_res_mode != BTM_INQ_RESULT_STANDARD) {
    STREAM_TO_UINT8(rssi, p);
    }

    p_i = btm_inq_db_find(bda);

@@ -1737,7 +1666,7 @@ static void btm_process_inq_results_extended(const uint8_t* p,
      /* If we received a second Extended Inq Event for an already */
      /* discovered device, this is because for the first one EIR was not
         received */
      else if ((inq_res_mode == BTM_INQ_RESULT_EXTENDED) && (p_i)) {
      else if (p_i) {
        p_cur = &p_i->inq_info.results;
        update = true;
      }
@@ -1764,10 +1693,7 @@ static void btm_process_inq_results_extended(const uint8_t* p,
      is_new = false;

    /* keep updating RSSI to have latest value */
    if (inq_res_mode != BTM_INQ_RESULT_STANDARD)
    p_i->inq_info.results.rssi = (int8_t)rssi;
    else
      p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI;

    if (is_new) {
      /* Save the info */
@@ -1785,17 +1711,7 @@ static void btm_process_inq_results_extended(const uint8_t* p,
      if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) {
        /* A new response was found */
        btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++;
        switch (static_cast<tBTM_INQ_RESULT>(inq_res_mode)) {
          case BTM_INQ_RESULT_STANDARD:
          case BTM_INQ_RESULT_WITH_RSSI:
          case BTM_INQ_RESULT_EXTENDED:
            btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[inq_res_mode]++;
            break;
          case BTM_INQ_RES_IGNORE_RSSI:
            btm_cb.btm_inq_vars.inq_cmpl_info
                .resp_type[BTM_INQ_RESULT_STANDARD]++;
            break;
        }
        btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[BTM_INQ_RESULT_EXTENDED]++;
      }

      p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR;
@@ -1812,14 +1728,13 @@ static void btm_process_inq_results_extended(const uint8_t* p,
    }

    if (is_new || update) {
      if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) {
      {
        memset(p_cur->eir_uuid, 0,
               BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8));
        /* set bit map of UUID list from received EIR */
        btm_set_eir_uuid(p, p_cur);
        p_eir_data = p;
      } else
        p_eir_data = NULL;
      }

      /* If a callback is registered, call it with the results */
      if (p_inq_results_cb) {
@@ -1854,10 +1769,10 @@ void btm_process_inq_results(const uint8_t* p, uint8_t hci_evt_len,
      btm_process_inq_results_standard(p, hci_evt_len);
      break;
    case BTM_INQ_RESULT_WITH_RSSI:
      btm_process_inq_results_rssi(p, hci_evt_len, BTM_INQ_RESULT_WITH_RSSI);
      btm_process_inq_results_rssi(p, hci_evt_len);
      break;
    case BTM_INQ_RESULT_EXTENDED:
      btm_process_inq_results_extended(p, hci_evt_len, BTM_INQ_RESULT_EXTENDED);
      btm_process_inq_results_extended(p, hci_evt_len);
      break;
  }
}