Loading system/main/shim/btm.cc +0 −67 Original line number Diff line number Diff line Loading @@ -175,73 +175,6 @@ Btm::Btm(os::Handler* handler, neighbor::InquiryModule* inquiry) : scanning_timer_(handler), observing_timer_(handler) { ASSERT(handler != nullptr); ASSERT(inquiry != nullptr); bluetooth::neighbor::InquiryCallbacks inquiry_callbacks = { .result = std::bind(&Btm::OnInquiryResult, this, std::placeholders::_1), .result_with_rssi = std::bind(&Btm::OnInquiryResultWithRssi, this, std::placeholders::_1), .extended_result = std::bind(&Btm::OnExtendedInquiryResult, this, std::placeholders::_1), .complete = std::bind(&Btm::OnInquiryComplete, this, std::placeholders::_1)}; inquiry->RegisterCallbacks(std::move(inquiry_callbacks)); } void Btm::OnInquiryResult(bluetooth::hci::InquiryResultView view) { for (auto& response : view.GetResponses()) { btm_api_process_inquiry_result( ToRawAddress(response.bd_addr_), static_cast<uint8_t>(response.page_scan_repetition_mode_), response.class_of_device_.data(), response.clock_offset_); } } void Btm::OnInquiryResultWithRssi( bluetooth::hci::InquiryResultWithRssiView view) { for (auto& response : view.GetResponses()) { btm_api_process_inquiry_result_with_rssi( ToRawAddress(response.address_), static_cast<uint8_t>(response.page_scan_repetition_mode_), response.class_of_device_.data(), response.clock_offset_, response.rssi_); } } void Btm::OnExtendedInquiryResult( bluetooth::hci::ExtendedInquiryResultView view) { constexpr size_t kMaxExtendedInquiryResponse = 240; uint8_t gap_data_buffer[kMaxExtendedInquiryResponse]; uint8_t* data = nullptr; size_t data_len = 0; if (!view.GetExtendedInquiryResponse().empty()) { bzero(gap_data_buffer, sizeof(gap_data_buffer)); uint8_t* p = gap_data_buffer; for (auto gap_data : view.GetExtendedInquiryResponse()) { *p++ = gap_data.data_.size() + sizeof(gap_data.data_type_); *p++ = static_cast<uint8_t>(gap_data.data_type_); p = (uint8_t*)memcpy(p, &gap_data.data_[0], gap_data.data_.size()) + gap_data.data_.size(); } data = gap_data_buffer; data_len = p - data; } btm_api_process_extended_inquiry_result( ToRawAddress(view.GetAddress()), static_cast<uint8_t>(view.GetPageScanRepetitionMode()), view.GetClassOfDevice().data(), view.GetClockOffset(), view.GetRssi(), data, data_len); } void Btm::OnInquiryComplete(bluetooth::hci::ErrorCode status) { limited_inquiry_active_ = false; general_inquiry_active_ = false; legacy_inquiry_complete_callback_((static_cast<uint16_t>(status) == 0) ? (BTM_SUCCESS) : (BTM_ERR_PROCESSING), active_inquiry_mode_); active_inquiry_mode_ = kInquiryModeOff; } void Btm::SetStandardInquiryResultMode() { Loading system/main/shim/btm.h +0 −6 Original line number Diff line number Diff line Loading @@ -89,12 +89,6 @@ class Btm { Btm(os::Handler* handler, neighbor::InquiryModule* inquiry); ~Btm() = default; // Inquiry result callbacks void OnInquiryResult(bluetooth::hci::InquiryResultView view); void OnInquiryResultWithRssi(bluetooth::hci::InquiryResultWithRssiView view); void OnExtendedInquiryResult(bluetooth::hci::ExtendedInquiryResultView view); void OnInquiryComplete(bluetooth::hci::ErrorCode status); void SetStandardInquiryResultMode(); void SetInquiryWithRssiResultMode(); void SetExtendedInquiryResultMode(); Loading system/main/shim/btm_api.cc +0 −169 Original line number Diff line number Diff line Loading @@ -78,175 +78,6 @@ void btm_set_eir_uuid(const uint8_t* p_eir, tBTM_INQ_RESULTS* p_results); void btm_sort_inq_result(void); void btm_process_inq_complete(tHCI_STATUS status, uint8_t result_type); static bool is_classic_device(tBT_DEVICE_TYPE device_type) { return device_type == BT_DEVICE_TYPE_BREDR; } static bool has_classic_device(tBT_DEVICE_TYPE device_type) { return device_type & BT_DEVICE_TYPE_BREDR; } void btm_api_process_inquiry_result(const RawAddress& raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); CHECK(p_i != nullptr); } else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && is_classic_device(p_i->inq_info.results.device_type)) { return; } p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, nullptr, 0); } void btm_api_process_inquiry_result_with_rssi(RawAddress raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset, int8_t rssi) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); bool update = false; if (btm_inq_find_bdaddr(raw_address)) { if (p_i != nullptr && (rssi > p_i->inq_info.results.rssi || p_i->inq_info.results.rssi == 0 || has_classic_device(p_i->inq_info.results.device_type))) { update = true; } } bool is_new = true; if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); CHECK(p_i != nullptr); } else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && is_classic_device(p_i->inq_info.results.device_type)) { is_new = false; } p_i->inq_info.results.rssi = rssi; if (is_new) { p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } if (is_new || update) { (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, nullptr, 0); } } void btm_api_process_extended_inquiry_result(RawAddress raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset, int8_t rssi, const uint8_t* eir_data, size_t eir_len) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); bool update = false; if (btm_inq_find_bdaddr(raw_address) && p_i != nullptr) { update = true; } bool is_new = true; if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); } 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; } p_i->inq_info.results.rssi = rssi; if (is_new) { p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } if (is_new || update) { memset(p_i->inq_info.results.eir_uuid, 0, BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8)); btm_set_eir_uuid(const_cast<uint8_t*>(eir_data), &p_i->inq_info.results); uint8_t* p_eir_data = const_cast<uint8_t*>(eir_data); (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, p_eir_data, eir_len); } } namespace { std::unordered_map<bluetooth::hci::AddressWithType, bt_bdname_t> address_name_map_; Loading Loading
system/main/shim/btm.cc +0 −67 Original line number Diff line number Diff line Loading @@ -175,73 +175,6 @@ Btm::Btm(os::Handler* handler, neighbor::InquiryModule* inquiry) : scanning_timer_(handler), observing_timer_(handler) { ASSERT(handler != nullptr); ASSERT(inquiry != nullptr); bluetooth::neighbor::InquiryCallbacks inquiry_callbacks = { .result = std::bind(&Btm::OnInquiryResult, this, std::placeholders::_1), .result_with_rssi = std::bind(&Btm::OnInquiryResultWithRssi, this, std::placeholders::_1), .extended_result = std::bind(&Btm::OnExtendedInquiryResult, this, std::placeholders::_1), .complete = std::bind(&Btm::OnInquiryComplete, this, std::placeholders::_1)}; inquiry->RegisterCallbacks(std::move(inquiry_callbacks)); } void Btm::OnInquiryResult(bluetooth::hci::InquiryResultView view) { for (auto& response : view.GetResponses()) { btm_api_process_inquiry_result( ToRawAddress(response.bd_addr_), static_cast<uint8_t>(response.page_scan_repetition_mode_), response.class_of_device_.data(), response.clock_offset_); } } void Btm::OnInquiryResultWithRssi( bluetooth::hci::InquiryResultWithRssiView view) { for (auto& response : view.GetResponses()) { btm_api_process_inquiry_result_with_rssi( ToRawAddress(response.address_), static_cast<uint8_t>(response.page_scan_repetition_mode_), response.class_of_device_.data(), response.clock_offset_, response.rssi_); } } void Btm::OnExtendedInquiryResult( bluetooth::hci::ExtendedInquiryResultView view) { constexpr size_t kMaxExtendedInquiryResponse = 240; uint8_t gap_data_buffer[kMaxExtendedInquiryResponse]; uint8_t* data = nullptr; size_t data_len = 0; if (!view.GetExtendedInquiryResponse().empty()) { bzero(gap_data_buffer, sizeof(gap_data_buffer)); uint8_t* p = gap_data_buffer; for (auto gap_data : view.GetExtendedInquiryResponse()) { *p++ = gap_data.data_.size() + sizeof(gap_data.data_type_); *p++ = static_cast<uint8_t>(gap_data.data_type_); p = (uint8_t*)memcpy(p, &gap_data.data_[0], gap_data.data_.size()) + gap_data.data_.size(); } data = gap_data_buffer; data_len = p - data; } btm_api_process_extended_inquiry_result( ToRawAddress(view.GetAddress()), static_cast<uint8_t>(view.GetPageScanRepetitionMode()), view.GetClassOfDevice().data(), view.GetClockOffset(), view.GetRssi(), data, data_len); } void Btm::OnInquiryComplete(bluetooth::hci::ErrorCode status) { limited_inquiry_active_ = false; general_inquiry_active_ = false; legacy_inquiry_complete_callback_((static_cast<uint16_t>(status) == 0) ? (BTM_SUCCESS) : (BTM_ERR_PROCESSING), active_inquiry_mode_); active_inquiry_mode_ = kInquiryModeOff; } void Btm::SetStandardInquiryResultMode() { Loading
system/main/shim/btm.h +0 −6 Original line number Diff line number Diff line Loading @@ -89,12 +89,6 @@ class Btm { Btm(os::Handler* handler, neighbor::InquiryModule* inquiry); ~Btm() = default; // Inquiry result callbacks void OnInquiryResult(bluetooth::hci::InquiryResultView view); void OnInquiryResultWithRssi(bluetooth::hci::InquiryResultWithRssiView view); void OnExtendedInquiryResult(bluetooth::hci::ExtendedInquiryResultView view); void OnInquiryComplete(bluetooth::hci::ErrorCode status); void SetStandardInquiryResultMode(); void SetInquiryWithRssiResultMode(); void SetExtendedInquiryResultMode(); Loading
system/main/shim/btm_api.cc +0 −169 Original line number Diff line number Diff line Loading @@ -78,175 +78,6 @@ void btm_set_eir_uuid(const uint8_t* p_eir, tBTM_INQ_RESULTS* p_results); void btm_sort_inq_result(void); void btm_process_inq_complete(tHCI_STATUS status, uint8_t result_type); static bool is_classic_device(tBT_DEVICE_TYPE device_type) { return device_type == BT_DEVICE_TYPE_BREDR; } static bool has_classic_device(tBT_DEVICE_TYPE device_type) { return device_type & BT_DEVICE_TYPE_BREDR; } void btm_api_process_inquiry_result(const RawAddress& raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); CHECK(p_i != nullptr); } else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && is_classic_device(p_i->inq_info.results.device_type)) { return; } p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, nullptr, 0); } void btm_api_process_inquiry_result_with_rssi(RawAddress raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset, int8_t rssi) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); bool update = false; if (btm_inq_find_bdaddr(raw_address)) { if (p_i != nullptr && (rssi > p_i->inq_info.results.rssi || p_i->inq_info.results.rssi == 0 || has_classic_device(p_i->inq_info.results.device_type))) { update = true; } } bool is_new = true; if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); CHECK(p_i != nullptr); } else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && is_classic_device(p_i->inq_info.results.device_type)) { is_new = false; } p_i->inq_info.results.rssi = rssi; if (is_new) { p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } if (is_new || update) { (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, nullptr, 0); } } void btm_api_process_extended_inquiry_result(RawAddress raw_address, uint8_t page_scan_rep_mode, DEV_CLASS device_class, uint16_t clock_offset, int8_t rssi, const uint8_t* eir_data, size_t eir_len) { tINQ_DB_ENT* p_i = btm_inq_db_find(raw_address); bool update = false; if (btm_inq_find_bdaddr(raw_address) && p_i != nullptr) { update = true; } bool is_new = true; if (p_i == nullptr) { p_i = btm_inq_db_new(raw_address); } 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; } p_i->inq_info.results.rssi = rssi; if (is_new) { p_i->inq_info.results.page_scan_rep_mode = page_scan_rep_mode; p_i->inq_info.results.page_scan_per_mode = 0; // RESERVED p_i->inq_info.results.page_scan_mode = 0; // RESERVED p_i->inq_info.results.dev_class[0] = device_class[0]; p_i->inq_info.results.dev_class[1] = device_class[1]; p_i->inq_info.results.dev_class[2] = device_class[2]; p_i->inq_info.results.clock_offset = clock_offset | BTM_CLOCK_OFFSET_VALID; p_i->inq_info.results.inq_result_type = BTM_INQ_RESULT_BR; p_i->time_of_resp = bluetooth::common::time_get_os_boottime_ms(); p_i->inq_count = btm_cb.btm_inq_vars.inq_counter; p_i->inq_info.appl_knows_rem_name = false; if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { p_i->inq_info.results.device_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; p_i->scan_rsp = false; } else { p_i->inq_info.results.device_type |= BT_DEVICE_TYPE_BREDR; } } if (btm_cb.btm_inq_vars.p_inq_results_cb == nullptr) { return; } if (is_new || update) { memset(p_i->inq_info.results.eir_uuid, 0, BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8)); btm_set_eir_uuid(const_cast<uint8_t*>(eir_data), &p_i->inq_info.results); uint8_t* p_eir_data = const_cast<uint8_t*>(eir_data); (btm_cb.btm_inq_vars.p_inq_results_cb)(&p_i->inq_info.results, p_eir_data, eir_len); } } namespace { std::unordered_map<bluetooth::hci::AddressWithType, bt_bdname_t> address_name_map_; Loading