summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/bta/dm/bta_dm_disc.cc21
-rw-r--r--system/bta/include/bta_api.h26
-rw-r--r--system/bta/test/bta_disc_test.cc12
-rw-r--r--system/bta/test/bta_dm_test.cc1
-rw-r--r--system/btif/src/btif_dm.cc50
5 files changed, 48 insertions, 62 deletions
diff --git a/system/bta/dm/bta_dm_disc.cc b/system/bta/dm/bta_dm_disc.cc
index 4142a2930f..71f5890451 100644
--- a/system/bta/dm/bta_dm_disc.cc
+++ b/system/bta/dm/bta_dm_disc.cc
@@ -729,14 +729,9 @@ static void bta_dm_sdp_result(tBTA_DM_MSG* p_data) {
tSDP_DI_GET_RECORD di_record;
if (get_legacy_stack_sdp_api()->device_id.SDP_GetDiRecord(
1, &di_record, bta_dm_search_cb.p_sdp_db) == SDP_SUCCESS) {
- tBTA_DM_SEARCH result;
- result.did_res.bd_addr = bta_dm_search_cb.peer_bdaddr;
- result.did_res.vendor_id_src = di_record.rec.vendor_id_source;
- result.did_res.vendor_id = di_record.rec.vendor;
- result.did_res.product_id = di_record.rec.product;
- result.did_res.version = di_record.rec.version;
- bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_DID_RES_EVT,
- &result);
+ bta_dm_search_cb.service_search_cbacks.on_did_received(
+ bta_dm_search_cb.peer_bdaddr, di_record.rec.vendor_id_source,
+ di_record.rec.vendor, di_record.rec.product, di_record.rec.version);
}
#endif
@@ -842,13 +837,9 @@ static void bta_dm_read_dis_cmpl(const RawAddress& addr,
if (!p_dis_value) {
log::warn("read DIS failed");
} else {
- tBTA_DM_SEARCH result;
- result.did_res.bd_addr = addr;
- result.did_res.vendor_id_src = p_dis_value->pnp_id.vendor_id_src;
- result.did_res.vendor_id = p_dis_value->pnp_id.vendor_id;
- result.did_res.product_id = p_dis_value->pnp_id.product_id;
- result.did_res.version = p_dis_value->pnp_id.product_version;
- bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_DID_RES_EVT, &result);
+ bta_dm_search_cb.service_search_cbacks.on_did_received(
+ addr, p_dis_value->pnp_id.vendor_id_src, p_dis_value->pnp_id.vendor_id,
+ p_dis_value->pnp_id.product_id, p_dis_value->pnp_id.product_version);
}
bta_dm_execute_queued_request();
diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h
index 3417ecc1d6..3d3cfe70f9 100644
--- a/system/bta/include/bta_api.h
+++ b/system/bta/include/bta_api.h
@@ -221,10 +221,9 @@ typedef enum : uint8_t {
3, /* GATT services over LE transport discovered */
BTA_DM_DISC_CMPL_EVT = 4, /* Discovery complete. */
BTA_DM_SEARCH_CANCEL_CMPL_EVT = 5, /* Search cancelled */
- BTA_DM_DID_RES_EVT = 6, /* Vendor/Product ID search result */
- BTA_DM_GATT_OVER_SDP_RES_EVT = 7, /* GATT services over SDP discovered */
- BTA_DM_NAME_READ_EVT = 8, /* Name read complete. */
- BTA_DM_OBSERVE_CMPL_EVT = 9, /* Observe complete. */
+ BTA_DM_GATT_OVER_SDP_RES_EVT = 6, /* GATT services over SDP discovered */
+ BTA_DM_NAME_READ_EVT = 7, /* Name read complete. */
+ BTA_DM_OBSERVE_CMPL_EVT = 8, /* Observe complete. */
} tBTA_DM_SEARCH_EVT;
inline std::string bta_dm_search_evt_text(const tBTA_DM_SEARCH_EVT& event) {
@@ -235,7 +234,6 @@ inline std::string bta_dm_search_evt_text(const tBTA_DM_SEARCH_EVT& event) {
CASE_RETURN_TEXT(BTA_DM_GATT_OVER_LE_RES_EVT);
CASE_RETURN_TEXT(BTA_DM_DISC_CMPL_EVT);
CASE_RETURN_TEXT(BTA_DM_SEARCH_CANCEL_CMPL_EVT);
- CASE_RETURN_TEXT(BTA_DM_DID_RES_EVT);
CASE_RETURN_TEXT(BTA_DM_GATT_OVER_SDP_RES_EVT);
CASE_RETURN_TEXT(BTA_DM_NAME_READ_EVT);
CASE_RETURN_TEXT(BTA_DM_OBSERVE_CMPL_EVT);
@@ -297,31 +295,27 @@ typedef struct {
services; /* GATT based Services UUID found on peer device. */
} tBTA_DM_DISC_BLE_RES;
-/* Structure associated with tBTA_DM_DID_RES */
-typedef struct {
- RawAddress bd_addr; /* BD address peer device. */
- uint8_t vendor_id_src;
- uint16_t vendor_id;
- uint16_t product_id;
- uint16_t version;
-} tBTA_DM_DID_RES;
-
/* Union of all search callback structures */
typedef union {
tBTA_DM_INQ_RES inq_res; /* Inquiry result for a peer device. */
tBTA_DM_DISC_RES disc_res; /* Discovery result for a peer device. */
tBTA_DM_DISC_BLE_RES
- disc_ble_res; /* discovery result for GATT based service */
- tBTA_DM_DID_RES did_res; /* Vendor and Product ID of peer device */
+ disc_ble_res; /* discovery result for GATT based service */
tBTA_DM_OBSERVE_CMPL observe_cmpl; /* Observe complete. */
} tBTA_DM_SEARCH;
/* Search callback */
typedef void(tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event,
tBTA_DM_SEARCH* p_data);
+
+typedef void(tBTA_DM_DID_RES_CBACK)(RawAddress bd_addr, uint8_t vendor_id_src,
+ uint16_t vendor_id, uint16_t product_id,
+ uint16_t version);
+
struct service_discovery_callbacks {
/* legacy callback I'll tear apart and get rid of */
tBTA_DM_SEARCH_CBACK* legacy;
+ tBTA_DM_DID_RES_CBACK* on_did_received;
};
/* Execute call back */
diff --git a/system/bta/test/bta_disc_test.cc b/system/bta/test/bta_disc_test.cc
index c8b6743aaa..081aa3b321 100644
--- a/system/bta/test/bta_disc_test.cc
+++ b/system/bta/test/bta_disc_test.cc
@@ -238,22 +238,22 @@ TEST_F(BtaInitializedTest, bta_dm_disc_stop_device_discovery) {
TEST_F(BtaInitializedTest,
bta_dm_disc_start_service_discovery__BT_TRANSPORT_AUTO) {
bta_dm_disc_start_service_discovery(
- {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}}, kRawAddress,
- BT_TRANSPORT_AUTO);
+ {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
+ kRawAddress, BT_TRANSPORT_AUTO);
}
TEST_F(BtaInitializedTest,
bta_dm_disc_start_service_discovery__BT_TRANSPORT_BR_EDR) {
bta_dm_disc_start_service_discovery(
- {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}}, kRawAddress,
- BT_TRANSPORT_BR_EDR);
+ {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
+ kRawAddress, BT_TRANSPORT_BR_EDR);
}
TEST_F(BtaInitializedTest,
bta_dm_disc_start_service_discovery__BT_TRANSPORT_LE) {
bta_dm_disc_start_service_discovery(
- {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}}, kRawAddress,
- BT_TRANSPORT_LE);
+ {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr},
+ kRawAddress, BT_TRANSPORT_LE);
}
TEST_F(BtaInitializedTest,
diff --git a/system/bta/test/bta_dm_test.cc b/system/bta/test/bta_dm_test.cc
index f69822f2d8..5f948a8dcb 100644
--- a/system/bta/test/bta_dm_test.cc
+++ b/system/bta/test/bta_dm_test.cc
@@ -537,7 +537,6 @@ TEST_F(BtaDmTest, bta_dm_search_evt_text) {
std::make_pair(BTA_DM_DISC_CMPL_EVT, "BTA_DM_DISC_CMPL_EVT"),
std::make_pair(BTA_DM_SEARCH_CANCEL_CMPL_EVT,
"BTA_DM_SEARCH_CANCEL_CMPL_EVT"),
- std::make_pair(BTA_DM_DID_RES_EVT, "BTA_DM_DID_RES_EVT"),
std::make_pair(BTA_DM_GATT_OVER_SDP_RES_EVT,
"BTA_DM_GATT_OVER_SDP_RES_EVT"),
std::make_pair(BTA_DM_NAME_READ_EVT, "BTA_DM_NAME_READ_EVT"),
diff --git a/system/btif/src/btif_dm.cc b/system/btif/src/btif_dm.cc
index 3d8208fccc..b298a436a6 100644
--- a/system/btif/src/btif_dm.cc
+++ b/system/btif/src/btif_dm.cc
@@ -2081,29 +2081,6 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
BT_STATUS_SUCCESS, bd_addr, num_properties, prop);
} break;
- case BTA_DM_DID_RES_EVT: {
- bt_property_t prop_did;
- RawAddress& bd_addr = p_data->did_res.bd_addr;
- bt_vendor_product_info_t vp_info;
-
- vp_info.vendor_id_src = p_data->did_res.vendor_id_src;
- vp_info.vendor_id = p_data->did_res.vendor_id;
- vp_info.product_id = p_data->did_res.product_id;
- vp_info.version = p_data->did_res.version;
-
- prop_did.type = BT_PROPERTY_VENDOR_PRODUCT_INFO;
- prop_did.val = &vp_info;
- prop_did.len = sizeof(vp_info);
-
- bt_status_t ret =
- btif_storage_set_remote_device_property(&bd_addr, &prop_did);
- ASSERTC(ret == BT_STATUS_SUCCESS, "storing remote services failed", ret);
-
- /* Send the event to the BTIF */
- GetInterfaceToProfiles()->events->invoke_remote_device_properties_cb(
- BT_STATUS_SUCCESS, bd_addr, 1, &prop_did);
- } break;
-
case BTA_DM_NAME_READ_EVT: {
if (IS_FLAG_ENABLED(rnr_present_during_service_discovery)) {
const tBTA_DM_DISC_RES& disc_res = p_data->disc_res;
@@ -2146,6 +2123,30 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
}
}
+void btif_on_did_received(RawAddress bd_addr, uint8_t vendor_id_src,
+ uint16_t vendor_id, uint16_t product_id,
+ uint16_t version) {
+ bt_property_t prop_did;
+ bt_vendor_product_info_t vp_info;
+
+ vp_info.vendor_id_src = vendor_id_src;
+ vp_info.vendor_id = vendor_id;
+ vp_info.product_id = product_id;
+ vp_info.version = version;
+
+ prop_did.type = BT_PROPERTY_VENDOR_PRODUCT_INFO;
+ prop_did.val = &vp_info;
+ prop_did.len = sizeof(vp_info);
+
+ bt_status_t ret =
+ btif_storage_set_remote_device_property(&bd_addr, &prop_did);
+ ASSERTC(ret == BT_STATUS_SUCCESS, "storing remote services failed", ret);
+
+ /* Send the event to the BTIF */
+ GetInterfaceToProfiles()->events->invoke_remote_device_properties_cb(
+ BT_STATUS_SUCCESS, bd_addr, 1, &prop_did);
+}
+
static void btif_dm_update_allowlisted_media_players() {
uint8_t i = 0, buf_len = 0;
bt_property_t wlplayers_prop;
@@ -3142,7 +3143,8 @@ void btif_dm_get_remote_services(RawAddress remote_addr, const int transport) {
base::StringPrintf("transport:%s", bt_transport_text(transport).c_str()));
BTA_DmDiscover(remote_addr,
- service_discovery_callbacks{btif_dm_search_services_evt},
+ service_discovery_callbacks{btif_dm_search_services_evt,
+ btif_on_did_received},
transport);
}