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

Commit c5f0815e authored by Zach Johnson's avatar Zach Johnson Committed by Gerrit Code Review
Browse files

Merge changes I7d5090ac,I74507676,I14148e2b,I2ca84a80

* changes:
  Simplify btm_set_inq_event_filter
  filter_cond_type is always BTM_CLR_INQUIRY_FILTER
  Don't use redefinition - BTM_FILTER_COND_BD_ADDR
  don't use the redefinition - BTM_FILTER_COND_DEVICE_CLASS
parents 71fe7cff 56ecfde6
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -293,8 +293,6 @@ tBTM_STATUS bluetooth::shim::BTM_StartInquiry(tBTM_INQ_RESULTS_CB* p_results_cb,
  inqparms.max_resps = BTIF_DM_DEFAULT_INQ_MAX_RESULTS;
  inqparms.report_dup = true;

  inqparms.filter_cond_type = BTM_CLR_INQUIRY_FILTER;

  std::lock_guard<std::mutex> lock(btm_cb_mutex_);

  btm_cb.btm_inq_vars.inq_cmpl_info.num_resp = 0;
@@ -314,7 +312,7 @@ tBTM_STATUS bluetooth::shim::BTM_StartInquiry(tBTM_INQ_RESULTS_CB* p_results_cb,

  uint8_t classic_mode = inqparms.mode & 0x0f;
  if (!Stack::GetInstance()->GetBtm()->SetInquiryFilter(
          classic_mode, inqparms.filter_cond_type, inqparms.filter_cond)) {
          classic_mode, BTM_CLR_INQUIRY_FILTER, inqparms.filter_cond)) {
    LOG_WARN("%s Unable to set inquiry filter", __func__);
    return BTM_ERR_PROCESSING;
  }
+0 −8
Original line number Diff line number Diff line
@@ -1371,19 +1371,11 @@ uint8_t btm_ble_is_discoverable(const RawAddress& bda,
                                std::vector<uint8_t> const& adv_data) {
  uint8_t flag = 0, rt = 0;
  uint8_t data_len;
  tBTM_INQ_PARMS* p_cond = &btm_cb.btm_inq_vars.inqparms;

  /* for observer, always "discoverable */
  if (BTM_BLE_IS_OBS_ACTIVE(btm_cb.ble_ctr_cb.scan_activity))
    rt |= BTM_BLE_OBS_RESULT;

  /* does not match filter condition */
  if (p_cond->filter_cond_type == BTM_FILTER_COND_BD_ADDR &&
      bda != p_cond->filter_cond.bdaddr_cond) {
    BTM_TRACE_DEBUG("BD ADDR does not meet filter condition");
    return rt;
  }

  if (!adv_data.empty()) {
    const uint8_t* p_flag = AdvertiseDataParser::GetFieldByType(
        adv_data, BTM_BLE_AD_TYPE_FLAG, &data_len);
+9 −73
Original line number Diff line number Diff line
@@ -119,8 +119,7 @@ const uint16_t BTM_EIR_UUID_LKUP_TBL[BTM_EIR_MAX_SERVICES] = {
/*            L O C A L    F U N C T I O N     P R O T O T Y P E S            */
/******************************************************************************/
static void btm_initiate_inquiry(tBTM_INQUIRY_VAR_ST* p_inq);
static tBTM_STATUS btm_set_inq_event_filter(uint8_t filter_cond_type,
                                            tBTM_INQ_FILT_COND* p_filt_cond);
static tBTM_STATUS btm_set_inq_event_filter();
void btm_clr_inq_result_flt(void);

static uint8_t btm_convert_uuid_to_eir_service(uint16_t uuid16);
@@ -644,8 +643,6 @@ tBTM_STATUS BTM_StartInquiry(tBTM_INQ_RESULTS_CB* p_results_cb,
  p_inq->inqparms.max_resps = BTIF_DM_DEFAULT_INQ_MAX_RESULTS;
  p_inq->inqparms.report_dup = true;

  p_inq->inqparms.filter_cond_type = BTM_CLR_INQUIRY_FILTER;

  /* Initialize the inquiry variables */
  p_inq->state = BTM_INQ_ACTIVE_STATE;
  p_inq->p_inq_cmpl_cb = p_cmpl_cb;
@@ -683,37 +680,11 @@ tBTM_STATUS BTM_StartInquiry(tBTM_INQ_RESULTS_CB* p_results_cb,
    return status;
  }

  /* BR/EDR inquiry portion */
  /* If a filter is specified, then save it for later and clear the current
     filter.
     The setting of the filter is done upon completion of clearing of the
     previous
     filter.
  */
  switch (p_inq->inqparms.filter_cond_type) {
    case BTM_CLR_INQUIRY_FILTER:
  p_inq->state = BTM_INQ_SET_FILT_STATE;
      break;

    case BTM_FILTER_COND_DEVICE_CLASS:
    case BTM_FILTER_COND_BD_ADDR:
      /* The filter is not being used so simply clear it;
          the inquiry can start after this operation */
      p_inq->state = BTM_INQ_CLR_FILT_STATE;
      p_inq->inqparms.filter_cond_type = BTM_CLR_INQUIRY_FILTER;
      /* =============>>>> adding LE filtering here ????? */
      break;

    default:
      LOG(ERROR) << __func__ << ": invalid filter condition type "
                 << std::to_string(p_inq->inqparms.filter_cond_type);
      return (BTM_ILLEGAL_VALUE);
  }

  /* Before beginning the inquiry the current filter must be cleared, so
   * initiate the command */
  status = btm_set_inq_event_filter(p_inq->inqparms.filter_cond_type,
                                    &p_inq->inqparms.filter_cond);
  status = btm_set_inq_event_filter();
  if (status != BTM_CMD_STARTED) {
    LOG(ERROR) << __func__ << ": failed to set inquiry event filter";
    p_inq->state = BTM_INQ_INACTIVE_STATE;
@@ -1227,49 +1198,15 @@ tINQ_DB_ENT* btm_inq_db_new(const RawAddress& p_bda) {
 *                  BTM_ILLEGAL_VALUE if a bad parameter was detected
 *
 ******************************************************************************/
static tBTM_STATUS btm_set_inq_event_filter(uint8_t filter_cond_type,
                                            tBTM_INQ_FILT_COND* p_filt_cond) {
  uint8_t condition_length = DEV_CLASS_LEN * 2;
static tBTM_STATUS btm_set_inq_event_filter() {
  uint8_t condition_length = 0;
  uint8_t condition_buf[DEV_CLASS_LEN * 2];
  uint8_t* p_cond = condition_buf; /* points to the condition to pass to HCI */

#if (BTM_INQ_DEBUG == TRUE)
  BTM_TRACE_DEBUG(
      "btm_set_inq_event_filter: filter type %d [Clear-0, COD-1, BDADDR-2]",
      filter_cond_type);
  VLOG(2) << "condition " << p_filt_cond->bdaddr_cond;
#endif

  /* Load the correct filter condition to pass to the lower layer */
  switch (filter_cond_type) {
    case BTM_FILTER_COND_DEVICE_CLASS:
      /* copy the device class and device class fields into contiguous memory to
       * send to HCI */
      memcpy(condition_buf, p_filt_cond->cod_cond.dev_class, DEV_CLASS_LEN);
      memcpy(&condition_buf[DEV_CLASS_LEN],
             p_filt_cond->cod_cond.dev_class_mask, DEV_CLASS_LEN);

      /* condition length should already be set as the default */
      break;

    case BTM_FILTER_COND_BD_ADDR:
      p_cond = (uint8_t*)&p_filt_cond->bdaddr_cond;

      /* condition length should already be set as the default */
      break;

    case BTM_CLR_INQUIRY_FILTER:
      condition_length = 0;
      break;

    default:
      return (BTM_ILLEGAL_VALUE); /* Bad parameter was passed in */
  }

  btm_cb.btm_inq_vars.inqfilt_active = true;

  /* Filter the inquiry results for the specified condition type and value */
  btsnd_hcic_set_event_filter(HCI_FILTER_INQUIRY_RESULT, filter_cond_type,
  btsnd_hcic_set_event_filter(HCI_FILTER_INQUIRY_RESULT, BTM_CLR_INQUIRY_FILTER,
                              p_cond, condition_length);
  return (BTM_CMD_STARTED);
}
@@ -1348,8 +1285,7 @@ void btm_event_filter_complete(uint8_t* p) {

      /* Check to see if a new filter needs to be set up */
      if (p_inq->state == BTM_INQ_CLR_FILT_STATE) {
        status = btm_set_inq_event_filter(p_inq->inqparms.filter_cond_type,
                                          &p_inq->inqparms.filter_cond);
        status = btm_set_inq_event_filter();
        if (status == BTM_CMD_STARTED) {
          p_inq->state = BTM_INQ_SET_FILT_STATE;
        } else /* Error setting the filter: Call the initiator's callback
+0 −5
Original line number Diff line number Diff line
@@ -154,10 +154,6 @@ typedef void(tBTM_VSC_CMPL_CB)(tBTM_VSC_CMPL* p1);
/* Inquiry Filter Condition types (see tBTM_INQ_PARMS) */
/* Inquiry Filtering is turned off */
#define BTM_CLR_INQUIRY_FILTER 0
/* Filter on device class */
#define BTM_FILTER_COND_DEVICE_CLASS HCI_FILTER_COND_DEVICE_CLASS
/* Filter on device addr */
#define BTM_FILTER_COND_BD_ADDR HCI_FILTER_COND_BD_ADDR

/****************************
 * minor device class field
@@ -423,7 +419,6 @@ typedef struct /* contains the parameters passed to the inquiry functions */
  uint8_t max_resps; /* maximum number of responses to return */
  bool report_dup; /* report duplicated inquiry response with higher RSSI value
                      */
  uint8_t filter_cond_type; /* new devices, BD ADDR, COD, or No filtering */
  tBTM_INQ_FILT_COND filter_cond; /* filter value based on filter cond type */
} tBTM_INQ_PARMS;