Loading system/bta/ag/bta_ag_sdp.cc +7 −6 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,8 @@ #include "sdp_api.h" #include "sdp_api.h" #include "utl.h" #include "utl.h" using bluetooth::Uuid; /* Number of protocol elements in protocol element list. */ /* Number of protocol elements in protocol element list. */ #define BTA_AG_NUM_PROTO_ELEMS 2 #define BTA_AG_NUM_PROTO_ELEMS 2 Loading Loading @@ -374,7 +376,7 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { * * ******************************************************************************/ ******************************************************************************/ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { tSDP_UUID uuid_list[1]; Uuid uuid_list[1]; uint16_t num_uuid = 1; uint16_t num_uuid = 1; uint16_t attr_list[4]; uint16_t attr_list[4]; uint8_t num_attr; uint8_t num_attr; Loading @@ -387,7 +389,7 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; num_attr = 4; num_attr = 4; uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HF_HANDSFREE); } } /* HFP acceptor; get features */ /* HFP acceptor; get features */ else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) { else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) { Loading @@ -395,7 +397,7 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; num_attr = 3; num_attr = 3; uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HF_HANDSFREE); } } /* HSP initiator; get proto list */ /* HSP initiator; get proto list */ else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { Loading @@ -409,9 +411,9 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { // UUID_SERVCLASS_HEADSET (0x1108) to store its service record. However, // UUID_SERVCLASS_HEADSET (0x1108) to store its service record. However, // most of such devices are HSP 1.0 devices. // most of such devices are HSP 1.0 devices. if (p_scb->hsp_version >= HSP_VERSION_1_2) { if (p_scb->hsp_version >= HSP_VERSION_1_2) { uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET_HS; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HEADSET_HS); } else { } else { uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HEADSET); } } } } /* HSP acceptor; no discovery */ /* HSP acceptor; no discovery */ Loading @@ -422,7 +424,6 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { /* allocate buffer for sdp database */ /* allocate buffer for sdp database */ p_scb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AG_DISC_BUF_SIZE); p_scb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AG_DISC_BUF_SIZE); /* set up service discovery database; attr happens to be attr_list len */ /* set up service discovery database; attr happens to be attr_list len */ uuid_list[0].len = LEN_UUID_16; db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, num_uuid, uuid_list, num_attr, attr_list); num_uuid, uuid_list, num_attr, attr_list); Loading system/bta/dm/bta_dm_act.cc +79 −81 Original line number Original line Diff line number Diff line Loading @@ -52,6 +52,8 @@ #include "gap_api.h" #include "gap_api.h" #endif #endif using bluetooth::Uuid; static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir, static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir, uint16_t eir_len); uint16_t eir_len); static void bta_dm_inq_cmpl_cb(void* p_result); static void bta_dm_inq_cmpl_cb(void* p_result); Loading Loading @@ -1103,7 +1105,7 @@ void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data) { void bta_dm_search_start(tBTA_DM_MSG* p_data) { void bta_dm_search_start(tBTA_DM_MSG* p_data) { tBTM_INQUIRY_CMPL result; tBTM_INQUIRY_CMPL result; size_t len = sizeof(tBT_UUID) * p_data->search.num_uuid; size_t len = sizeof(Uuid) * p_data->search.num_uuid; bta_dm_gattc_register(); bta_dm_gattc_register(); APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, Loading @@ -1125,8 +1127,8 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data) { if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && p_data->search.p_uuid != NULL) { p_data->search.p_uuid != NULL) { bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); bta_dm_search_cb.p_srvc_uuid = (Uuid*)osi_malloc(len); memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); *bta_dm_search_cb.p_srvc_uuid = *p_data->search.p_uuid; } } result.status = BTM_StartInquiry((tBTM_INQ_PARMS*)&p_data->search.inq_params, result.status = BTM_StartInquiry((tBTM_INQ_PARMS*)&p_data->search.inq_params, bta_dm_inq_results_cb, bta_dm_inq_results_cb, Loading Loading @@ -1196,7 +1198,7 @@ void bta_dm_search_cancel(UNUSED_ATTR tBTA_DM_MSG* p_data) { * * ******************************************************************************/ ******************************************************************************/ void bta_dm_discover(tBTA_DM_MSG* p_data) { void bta_dm_discover(tBTA_DM_MSG* p_data) { size_t len = sizeof(tBT_UUID) * p_data->discover.num_uuid; size_t len = sizeof(Uuid) * p_data->discover.num_uuid; APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, p_data->discover.services, p_data->discover.sdp_search); p_data->discover.services, p_data->discover.sdp_search); Loading @@ -1207,8 +1209,8 @@ void bta_dm_discover(tBTA_DM_MSG* p_data) { osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && p_data->discover.p_uuid != NULL) { p_data->discover.p_uuid != NULL) { bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); bta_dm_search_cb.p_srvc_uuid = (Uuid*)osi_malloc(len); memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len); *bta_dm_search_cb.p_srvc_uuid = *p_data->discover.p_uuid; } } bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; Loading @@ -1223,7 +1225,7 @@ void bta_dm_discover(tBTA_DM_MSG* p_data) { bta_dm_search_cb.transport = p_data->discover.transport; bta_dm_search_cb.transport = p_data->discover.transport; bta_dm_search_cb.name_discover_done = false; bta_dm_search_cb.name_discover_done = false; memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID)); bta_dm_search_cb.uuid = p_data->discover.uuid; bta_dm_discover_device(p_data->discover.bd_addr); bta_dm_discover_device(p_data->discover.bd_addr); } } Loading Loading @@ -1475,12 +1477,10 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { uint16_t service = 0xFFFF; uint16_t service = 0xFFFF; tSDP_PROTOCOL_ELEM pe; tSDP_PROTOCOL_ELEM pe; tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid; Uuid* p_uuid = bta_dm_search_cb.p_srvc_uuid; tBTA_DM_SEARCH result; tBTA_DM_SEARCH result; tBT_UUID service_uuid; uint32_t num_uuids = 0; std::vector<Uuid> uuid_list; uint8_t uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services if ((p_data->sdp_event.sdp_result == SDP_SUCCESS) || if ((p_data->sdp_event.sdp_result == SDP_SUCCESS) || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) || Loading @@ -1490,7 +1490,7 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_sdp_rec = NULL; p_sdp_rec = NULL; if (bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID + 1)) { if (bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID + 1)) { p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec); bta_dm_search_cb.uuid, p_sdp_rec); if (p_sdp_rec && SDP_FindProtocolListElemInRec( if (p_sdp_rec && SDP_FindProtocolListElemInRec( p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { Loading @@ -1510,7 +1510,7 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_uuid += p_uuid += (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); /* only support 16 bits UUID for now */ /* only support 16 bits UUID for now */ service = p_uuid->uu.uuid16; service = p_uuid->As16Bit(); } } /* all GATT based services */ /* all GATT based services */ do { do { Loading @@ -1518,14 +1518,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_sdp_rec = p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 0, p_sdp_rec); SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 0, p_sdp_rec); if (p_sdp_rec) { if (p_sdp_rec) { Uuid service_uuid; if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { /* send result back to app now, one by one */ /* send result back to app now, one by one */ result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); BD_NAME_LEN); result.disc_ble_res.service.len = service_uuid.len; result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16; result.disc_ble_res.service = service_uuid; bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); } } } } Loading @@ -1540,16 +1540,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || (p_sdp_rec != NULL)) { (p_sdp_rec != NULL)) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { uint16_t tmp_svc = 0xFFFF; bta_dm_search_cb.services_found |= bta_dm_search_cb.services_found |= (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( bta_dm_search_cb.service_index - 1)); bta_dm_search_cb.service_index - 1)); tmp_svc = uint16_t tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - 1]; 1]; /* Add to the list of UUIDs */ /* Add to the list of UUIDs */ sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]); uuid_list.push_back(Uuid::From16Bit(tmp_svc)); num_uuids++; } } } } } } Loading @@ -1575,14 +1573,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { p_sdp_rec = NULL; p_sdp_rec = NULL; do { do { tBT_UUID temp_uuid; /* find a service record, report it */ /* find a service record, report it */ p_sdp_rec = p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); if (p_sdp_rec) { if (p_sdp_rec) { // SDP_FindServiceUUIDInRec_128bit is used only once, refactor? Uuid temp_uuid; if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE); uuid_list.push_back(temp_uuid); num_uuids++; } } } } } while (p_sdp_rec); } while (p_sdp_rec); Loading @@ -1603,13 +1601,15 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; p_msg->disc_result.result.disc_res.p_raw_data = NULL; p_msg->disc_result.result.disc_res.p_raw_data = NULL; p_msg->disc_result.result.disc_res.raw_data_size = 0; p_msg->disc_result.result.disc_res.raw_data_size = 0; p_msg->disc_result.result.disc_res.num_uuids = num_uuids; p_msg->disc_result.result.disc_res.num_uuids = uuid_list.size(); p_msg->disc_result.result.disc_res.p_uuid_list = NULL; p_msg->disc_result.result.disc_res.p_uuid_list = NULL; if (num_uuids > 0) { if (uuid_list.size() > 0) { // TODO(jpawlowski): make p_uuid_list into vector, and just copy // vectors, but first get rid of bta_sys_sendmsg below. p_msg->disc_result.result.disc_res.p_uuid_list = p_msg->disc_result.result.disc_res.p_uuid_list = (uint8_t*)osi_malloc(num_uuids * MAX_UUID_SIZE); (Uuid*)osi_malloc(uuid_list.size() * sizeof(Uuid)); memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list, memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list.data(), num_uuids * MAX_UUID_SIZE); uuid_list.size() * sizeof(Uuid)); } } // Copy the raw_data to the discovery result structure // Copy the raw_data to the discovery result structure if (bta_dm_search_cb.p_sdp_db != NULL && if (bta_dm_search_cb.p_sdp_db != NULL && Loading Loading @@ -1904,11 +1904,9 @@ void bta_dm_search_cancel_notify(UNUSED_ATTR tBTA_DM_MSG* p_data) { * * ******************************************************************************/ ******************************************************************************/ static void bta_dm_find_services(const RawAddress& bd_addr) { static void bta_dm_find_services(const RawAddress& bd_addr) { tSDP_UUID uuid; memset(&uuid, 0, sizeof(tSDP_UUID)); while (bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) { while (bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) { Uuid uuid = Uuid::kEmpty; if (bta_dm_search_cb.services_to_search & if (bta_dm_search_cb.services_to_search & (tBTA_SERVICE_MASK)( (tBTA_SERVICE_MASK)( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) { BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) { Loading @@ -1921,10 +1919,10 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, bta_dm_search_cb.services_to_search); bta_dm_search_cb.services_to_search); if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0]; uuid = Uuid::From16Bit(bta_service_id_to_uuid_lkup_tbl[0]); bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; } else { } else { uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP; uuid = Uuid::From16Bit(UUID_PROTOCOL_L2CAP); bta_dm_search_cb.services_to_search = 0; bta_dm_search_cb.services_to_search = 0; } } } else { } else { Loading @@ -1932,15 +1930,14 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { if (bta_dm_search_cb.uuid_to_search > 0 && if (bta_dm_search_cb.uuid_to_search > 0 && bta_dm_search_cb.p_srvc_uuid) { bta_dm_search_cb.p_srvc_uuid) { memcpy(&uuid, (const void*)(bta_dm_search_cb.p_srvc_uuid + uuid = *(bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); bta_dm_search_cb.uuid_to_search), sizeof(tBT_UUID)); bta_dm_search_cb.uuid_to_search--; bta_dm_search_cb.uuid_to_search--; } else { } else { uuid.uu.uuid16 = uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb .service_index]); } } /* last one? clear the BLE service bit if all discovery has been done /* last one? clear the BLE service bit if all discovery has been done Loading @@ -1954,18 +1951,17 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { /* remove the service from services to be searched */ /* remove the service from services to be searched */ bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); uuid.uu.uuid16 = uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); } } } } if (uuid.len == 0) uuid.len = LEN_UUID_16; if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID)); uuid = bta_dm_search_cb.uuid; } } LOG_INFO(LOG_TAG, "%s search UUID = %04x", __func__, uuid.uu.uuid16); LOG_INFO(LOG_TAG, "%s search UUID = %s", __func__, uuid.ToString().c_str()); SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, 0, NULL); &uuid, 0, NULL); Loading Loading @@ -3461,16 +3457,16 @@ static void bta_dm_set_eir(char* local_name) { if (local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len) { if (local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len) { /* get number of UUID 16-bit list */ /* get number of UUID 16-bit list */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) #if (BTA_EIR_CANNED_UUID_LIST == TRUE) num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / Uuid::kNumBytes16; #else // BTA_EIR_CANNED_UUID_LIST #else // BTA_EIR_CANNED_UUID_LIST max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes16; data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid); max_num_uuid, &num_uuid); p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ #endif // BTA_EIR_CANNED_UUID_LIST #endif // BTA_EIR_CANNED_UUID_LIST /* if UUID doesn't fit remaing space, shorten local name */ /* if UUID doesn't fit remaing space, shorten local name */ if (local_name_len > (free_eir_length - 4 - num_uuid * LEN_UUID_16)) { if (local_name_len > (free_eir_length - 4 - num_uuid * Uuid::kNumBytes16)) { local_name_len = find_utf8_char_boundary( local_name_len = find_utf8_char_boundary( local_name, p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); local_name, p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, Loading @@ -3494,23 +3490,24 @@ static void bta_dm_set_eir(char* local_name) { /* if UUID list is provided as static data in configuration */ /* if UUID list is provided as static data in configuration */ if ((p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0) && if ((p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0) && (p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) { (p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) { if (free_eir_length > LEN_UUID_16 + 2) { if (free_eir_length > Uuid::kNumBytes16 + 2) { free_eir_length -= 2; free_eir_length -= 2; if (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) { if (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) { num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / Uuid::kNumBytes16; data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; } else /* not enough room for all UUIDs */ } else /* not enough room for all UUIDs */ { { APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); num_uuid = free_eir_length / LEN_UUID_16; num_uuid = free_eir_length / Uuid::kNumBytes16; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; } } UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1); UINT8_TO_STREAM(p, num_uuid * Uuid::kNumBytes16 + 1); UINT8_TO_STREAM(p, data_type); UINT8_TO_STREAM(p, data_type); memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16); memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, p += num_uuid * LEN_UUID_16; num_uuid * Uuid::kNumBytes16); free_eir_length -= num_uuid * LEN_UUID_16; p += num_uuid * Uuid::kNumBytes16; free_eir_length -= num_uuid * Uuid::kNumBytes16; } } } } #else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ #else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ Loading @@ -3520,7 +3517,7 @@ static void bta_dm_set_eir(char* local_name) { p_type = p++; p_type = p++; num_uuid = 0; num_uuid = 0; max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes16; data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid); max_num_uuid, &num_uuid); Loading @@ -3532,10 +3529,10 @@ static void bta_dm_set_eir(char* local_name) { for (custom_uuid_idx = 0; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes16) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { UINT16_TO_STREAM(p, UINT16_TO_STREAM(p, curr.As16Bit()); bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; Loading @@ -3547,9 +3544,9 @@ static void bta_dm_set_eir(char* local_name) { } } #endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ #endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes16 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_16 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes16 + 2; } } #endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ #endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ Loading @@ -3561,13 +3558,14 @@ static void bta_dm_set_eir(char* local_name) { num_uuid = 0; num_uuid = 0; data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; max_num_uuid = (free_eir_length - 2) / LEN_UUID_32; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes32; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes32) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32); UINT32_TO_STREAM(p, curr.As32Bit()); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; Loading @@ -3577,9 +3575,9 @@ static void bta_dm_set_eir(char* local_name) { } } } } UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes32 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_32 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes32 + 2; } } /* Adding 128-bit UUID list */ /* Adding 128-bit UUID list */ Loading @@ -3589,14 +3587,14 @@ static void bta_dm_set_eir(char* local_name) { num_uuid = 0; num_uuid = 0; data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; max_num_uuid = (free_eir_length - 2) / LEN_UUID_128; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes128; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes128) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { ARRAY16_TO_STREAM(p, ARRAY16_TO_STREAM(p, curr.To128BitBE().data()); bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; Loading @@ -3606,9 +3604,9 @@ static void bta_dm_set_eir(char* local_name) { } } } } UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes128 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_128 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes128 + 2; } } #endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE \ #endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE \ )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ Loading Loading @@ -4443,10 +4441,7 @@ static void bta_dm_gattc_register(void) { * * ******************************************************************************/ ******************************************************************************/ static void btm_dm_start_disc_gatt_services(uint16_t conn_id) { static void btm_dm_start_disc_gatt_services(uint16_t conn_id) { tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - Uuid* p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; bta_dm_search_cb.uuid_to_search; /* always search for all services */ /* always search for all services */ Loading Loading @@ -4474,11 +4469,14 @@ static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) { if (bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < if (bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size) { bta_dm_search_cb.ble_raw_size) { APPL_TRACE_DEBUG( APPL_TRACE_DEBUG( "ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x", "ADDING BLE SERVICE uuid=%s, ble_ptr = 0x%x, ble_raw_used = 0x%x", service_id.uuid.uu.uuid16, bta_dm_search_cb.p_ble_rawdata, service_id.uuid.ToString().c_str(), bta_dm_search_cb.p_ble_rawdata, bta_dm_search_cb.ble_raw_used); bta_dm_search_cb.ble_raw_used); if (bta_dm_search_cb.p_ble_rawdata) { if (bta_dm_search_cb.p_ble_rawdata) { // TODO(jpawlowski): the p_ble_raw data is only sent to btif_dm.cc, but is // never used there. Get rid of this code completly, or implement the // TODOs from btif_dm.cc memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id, sizeof(service_id)); &service_id, sizeof(service_id)); Loading @@ -4494,14 +4492,14 @@ static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) { __func__, bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used); __func__, bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used); } } LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%d ", __func__, LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%zu", __func__, service_id.uuid.len); service_id.uuid.GetShortestRepresentationSize()); if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) { if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) { /* send result back to app now, one by one */ /* send result back to app now, one by one */ result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); BD_NAME_LEN); memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID)); result.disc_ble_res.service = service_id.uuid; bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); } } Loading system/bta/dm/bta_dm_api.cc +18 −15 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,8 @@ #include "osi/include/osi.h" #include "osi/include/osi.h" #include "utl.h" #include "utl.h" using bluetooth::Uuid; /***************************************************************************** /***************************************************************************** * Constants * Constants ****************************************************************************/ ****************************************************************************/ Loading Loading @@ -260,7 +262,7 @@ void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_SERVICE_MASK services, * Returns void * Returns void * * ******************************************************************************/ ******************************************************************************/ void BTA_DmDiscoverUUID(const RawAddress& bd_addr, tSDP_UUID* uuid, void BTA_DmDiscoverUUID(const RawAddress& bd_addr, const Uuid& uuid, tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { tBTA_DM_API_DISCOVER* p_msg = tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); (tBTA_DM_API_DISCOVER*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); Loading @@ -273,8 +275,7 @@ void BTA_DmDiscoverUUID(const RawAddress& bd_addr, tSDP_UUID* uuid, p_msg->num_uuid = 0; p_msg->num_uuid = 0; p_msg->p_uuid = NULL; p_msg->p_uuid = NULL; p_msg->uuid = uuid; memcpy(&p_msg->uuid, uuid, sizeof(tSDP_UUID)); bta_sys_sendmsg(p_msg); bta_sys_sendmsg(p_msg); } } Loading Loading @@ -500,11 +501,11 @@ void BTA_GetEirService(uint8_t* p_eir, size_t eir_len, tBTA_SERVICE_MASK* p_services) { tBTA_SERVICE_MASK* p_services) { uint8_t xx, yy; uint8_t xx, yy; uint8_t num_uuid, max_num_uuid = 32; uint8_t num_uuid, max_num_uuid = 32; uint8_t uuid_list[32 * LEN_UUID_16]; uint8_t uuid_list[32 * Uuid::kNumBytes16]; uint16_t* p_uuid16 = (uint16_t*)uuid_list; uint16_t* p_uuid16 = (uint16_t*)uuid_list; tBTA_SERVICE_MASK mask; tBTA_SERVICE_MASK mask; BTM_GetEirUuidList(p_eir, eir_len, LEN_UUID_16, &num_uuid, uuid_list, BTM_GetEirUuidList(p_eir, eir_len, Uuid::kNumBytes16, &num_uuid, uuid_list, max_num_uuid); max_num_uuid); for (xx = 0; xx < num_uuid; xx++) { for (xx = 0; xx < num_uuid; xx++) { mask = 1; mask = 1; Loading Loading @@ -815,8 +816,9 @@ static void bta_dm_discover_send_msg(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback, tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search, bool sdp_search, tBTA_TRANSPORT transport) { tBTA_TRANSPORT transport) { const size_t len = p_services ? (sizeof(tBTA_DM_API_DISCOVER) + const size_t len = sizeof(tBT_UUID) * p_services->num_uuid) p_services ? (sizeof(tBTA_DM_API_DISCOVER) + sizeof(Uuid) * p_services->num_uuid) : sizeof(tBTA_DM_API_DISCOVER); : sizeof(tBTA_DM_API_DISCOVER); tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_calloc(len); tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_calloc(len); Loading @@ -830,9 +832,9 @@ static void bta_dm_discover_send_msg(const RawAddress& bd_addr, p_msg->services = p_services->srvc_mask; p_msg->services = p_services->srvc_mask; p_msg->num_uuid = p_services->num_uuid; p_msg->num_uuid = p_services->num_uuid; if (p_services->num_uuid != 0) { if (p_services->num_uuid != 0) { p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); p_msg->p_uuid = (Uuid*)(p_msg + 1); memcpy(p_msg->p_uuid, p_services->p_uuid, memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid); sizeof(Uuid) * p_services->num_uuid); } } } } Loading Loading @@ -906,8 +908,9 @@ void BTA_DmDiscoverExt(const RawAddress& bd_addr, ******************************************************************************/ ******************************************************************************/ void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, tBTA_DM_SEARCH_CBACK* p_cback) { tBTA_DM_SEARCH_CBACK* p_cback) { const size_t len = p_services ? (sizeof(tBTA_DM_API_SEARCH) + const size_t len = sizeof(tBT_UUID) * p_services->num_uuid) p_services ? (sizeof(tBTA_DM_API_SEARCH) + sizeof(Uuid) * p_services->num_uuid) : sizeof(tBTA_DM_API_SEARCH); : sizeof(tBTA_DM_API_SEARCH); tBTA_DM_API_SEARCH* p_msg = (tBTA_DM_API_SEARCH*)osi_calloc(len); tBTA_DM_API_SEARCH* p_msg = (tBTA_DM_API_SEARCH*)osi_calloc(len); Loading @@ -921,9 +924,9 @@ void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, p_msg->num_uuid = p_services->num_uuid; p_msg->num_uuid = p_services->num_uuid; if (p_services->num_uuid != 0) { if (p_services->num_uuid != 0) { p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); p_msg->p_uuid = (Uuid*)(p_msg + 1); memcpy(p_msg->p_uuid, p_services->p_uuid, memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid); sizeof(Uuid) * p_services->num_uuid); } else { } else { p_msg->p_uuid = NULL; p_msg->p_uuid = NULL; } } Loading system/bta/dm/bta_dm_int.h +6 −6 Original line number Original line Diff line number Diff line Loading @@ -151,7 +151,7 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_cback; tBTA_DM_SEARCH_CBACK* p_cback; tBTA_DM_RS_RES rs_res; tBTA_DM_RS_RES rs_res; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_uuid; bluetooth::Uuid* p_uuid; } tBTA_DM_API_SEARCH; } tBTA_DM_API_SEARCH; /* data type for BTA_DM_API_DISCOVER_EVT */ /* data type for BTA_DM_API_DISCOVER_EVT */ Loading @@ -163,8 +163,8 @@ typedef struct { bool sdp_search; bool sdp_search; tBTA_TRANSPORT transport; tBTA_TRANSPORT transport; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_uuid; bluetooth::Uuid* p_uuid; tSDP_UUID uuid; bluetooth::Uuid uuid; } tBTA_DM_API_DISCOVER; } tBTA_DM_API_DISCOVER; /* data type for BTA_DM_API_DI_DISC_EVT */ /* data type for BTA_DM_API_DI_DISC_EVT */ Loading Loading @@ -641,7 +641,7 @@ typedef struct { /* store UUID list for EIR */ /* store UUID list for EIR */ uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; bluetooth::Uuid custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; #endif #endif #endif #endif Loading Loading @@ -669,7 +669,7 @@ typedef struct { cancel stored here */ cancel stored here */ bool wait_disc; bool wait_disc; bool sdp_results; bool sdp_results; tSDP_UUID uuid; bluetooth::Uuid uuid; uint8_t peer_scn; uint8_t peer_scn; bool sdp_search; bool sdp_search; bool cancel_pending; /* inquiry cancel is pending */ bool cancel_pending; /* inquiry cancel is pending */ Loading @@ -677,7 +677,7 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_scan_cback; tBTA_DM_SEARCH_CBACK* p_scan_cback; tBTA_GATTC_IF client_if; tBTA_GATTC_IF client_if; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_srvc_uuid; bluetooth::Uuid* p_srvc_uuid; uint8_t uuid_to_search; uint8_t uuid_to_search; bool gatt_disc_active; bool gatt_disc_active; uint16_t conn_id; uint16_t conn_id; Loading Loading
system/bta/ag/bta_ag_sdp.cc +7 −6 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,8 @@ #include "sdp_api.h" #include "sdp_api.h" #include "utl.h" #include "utl.h" using bluetooth::Uuid; /* Number of protocol elements in protocol element list. */ /* Number of protocol elements in protocol element list. */ #define BTA_AG_NUM_PROTO_ELEMS 2 #define BTA_AG_NUM_PROTO_ELEMS 2 Loading Loading @@ -374,7 +376,7 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { * * ******************************************************************************/ ******************************************************************************/ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { tSDP_UUID uuid_list[1]; Uuid uuid_list[1]; uint16_t num_uuid = 1; uint16_t num_uuid = 1; uint16_t attr_list[4]; uint16_t attr_list[4]; uint8_t num_attr; uint8_t num_attr; Loading @@ -387,7 +389,7 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; num_attr = 4; num_attr = 4; uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HF_HANDSFREE); } } /* HFP acceptor; get features */ /* HFP acceptor; get features */ else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) { else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) { Loading @@ -395,7 +397,7 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; num_attr = 3; num_attr = 3; uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HF_HANDSFREE); } } /* HSP initiator; get proto list */ /* HSP initiator; get proto list */ else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { Loading @@ -409,9 +411,9 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { // UUID_SERVCLASS_HEADSET (0x1108) to store its service record. However, // UUID_SERVCLASS_HEADSET (0x1108) to store its service record. However, // most of such devices are HSP 1.0 devices. // most of such devices are HSP 1.0 devices. if (p_scb->hsp_version >= HSP_VERSION_1_2) { if (p_scb->hsp_version >= HSP_VERSION_1_2) { uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET_HS; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HEADSET_HS); } else { } else { uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET; uuid_list[0] = Uuid::From16Bit(UUID_SERVCLASS_HEADSET); } } } } /* HSP acceptor; no discovery */ /* HSP acceptor; no discovery */ Loading @@ -422,7 +424,6 @@ void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { /* allocate buffer for sdp database */ /* allocate buffer for sdp database */ p_scb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AG_DISC_BUF_SIZE); p_scb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AG_DISC_BUF_SIZE); /* set up service discovery database; attr happens to be attr_list len */ /* set up service discovery database; attr happens to be attr_list len */ uuid_list[0].len = LEN_UUID_16; db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, num_uuid, uuid_list, num_attr, attr_list); num_uuid, uuid_list, num_attr, attr_list); Loading
system/bta/dm/bta_dm_act.cc +79 −81 Original line number Original line Diff line number Diff line Loading @@ -52,6 +52,8 @@ #include "gap_api.h" #include "gap_api.h" #endif #endif using bluetooth::Uuid; static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir, static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir, uint16_t eir_len); uint16_t eir_len); static void bta_dm_inq_cmpl_cb(void* p_result); static void bta_dm_inq_cmpl_cb(void* p_result); Loading Loading @@ -1103,7 +1105,7 @@ void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data) { void bta_dm_search_start(tBTA_DM_MSG* p_data) { void bta_dm_search_start(tBTA_DM_MSG* p_data) { tBTM_INQUIRY_CMPL result; tBTM_INQUIRY_CMPL result; size_t len = sizeof(tBT_UUID) * p_data->search.num_uuid; size_t len = sizeof(Uuid) * p_data->search.num_uuid; bta_dm_gattc_register(); bta_dm_gattc_register(); APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, Loading @@ -1125,8 +1127,8 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data) { if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && p_data->search.p_uuid != NULL) { p_data->search.p_uuid != NULL) { bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); bta_dm_search_cb.p_srvc_uuid = (Uuid*)osi_malloc(len); memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); *bta_dm_search_cb.p_srvc_uuid = *p_data->search.p_uuid; } } result.status = BTM_StartInquiry((tBTM_INQ_PARMS*)&p_data->search.inq_params, result.status = BTM_StartInquiry((tBTM_INQ_PARMS*)&p_data->search.inq_params, bta_dm_inq_results_cb, bta_dm_inq_results_cb, Loading Loading @@ -1196,7 +1198,7 @@ void bta_dm_search_cancel(UNUSED_ATTR tBTA_DM_MSG* p_data) { * * ******************************************************************************/ ******************************************************************************/ void bta_dm_discover(tBTA_DM_MSG* p_data) { void bta_dm_discover(tBTA_DM_MSG* p_data) { size_t len = sizeof(tBT_UUID) * p_data->discover.num_uuid; size_t len = sizeof(Uuid) * p_data->discover.num_uuid; APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, p_data->discover.services, p_data->discover.sdp_search); p_data->discover.services, p_data->discover.sdp_search); Loading @@ -1207,8 +1209,8 @@ void bta_dm_discover(tBTA_DM_MSG* p_data) { osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && p_data->discover.p_uuid != NULL) { p_data->discover.p_uuid != NULL) { bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); bta_dm_search_cb.p_srvc_uuid = (Uuid*)osi_malloc(len); memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len); *bta_dm_search_cb.p_srvc_uuid = *p_data->discover.p_uuid; } } bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; Loading @@ -1223,7 +1225,7 @@ void bta_dm_discover(tBTA_DM_MSG* p_data) { bta_dm_search_cb.transport = p_data->discover.transport; bta_dm_search_cb.transport = p_data->discover.transport; bta_dm_search_cb.name_discover_done = false; bta_dm_search_cb.name_discover_done = false; memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID)); bta_dm_search_cb.uuid = p_data->discover.uuid; bta_dm_discover_device(p_data->discover.bd_addr); bta_dm_discover_device(p_data->discover.bd_addr); } } Loading Loading @@ -1475,12 +1477,10 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { uint16_t service = 0xFFFF; uint16_t service = 0xFFFF; tSDP_PROTOCOL_ELEM pe; tSDP_PROTOCOL_ELEM pe; tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid; Uuid* p_uuid = bta_dm_search_cb.p_srvc_uuid; tBTA_DM_SEARCH result; tBTA_DM_SEARCH result; tBT_UUID service_uuid; uint32_t num_uuids = 0; std::vector<Uuid> uuid_list; uint8_t uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services if ((p_data->sdp_event.sdp_result == SDP_SUCCESS) || if ((p_data->sdp_event.sdp_result == SDP_SUCCESS) || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) || Loading @@ -1490,7 +1490,7 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_sdp_rec = NULL; p_sdp_rec = NULL; if (bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID + 1)) { if (bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID + 1)) { p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec); bta_dm_search_cb.uuid, p_sdp_rec); if (p_sdp_rec && SDP_FindProtocolListElemInRec( if (p_sdp_rec && SDP_FindProtocolListElemInRec( p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { Loading @@ -1510,7 +1510,7 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_uuid += p_uuid += (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); /* only support 16 bits UUID for now */ /* only support 16 bits UUID for now */ service = p_uuid->uu.uuid16; service = p_uuid->As16Bit(); } } /* all GATT based services */ /* all GATT based services */ do { do { Loading @@ -1518,14 +1518,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_sdp_rec = p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 0, p_sdp_rec); SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 0, p_sdp_rec); if (p_sdp_rec) { if (p_sdp_rec) { Uuid service_uuid; if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { /* send result back to app now, one by one */ /* send result back to app now, one by one */ result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); BD_NAME_LEN); result.disc_ble_res.service.len = service_uuid.len; result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16; result.disc_ble_res.service = service_uuid; bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); } } } } Loading @@ -1540,16 +1540,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || (p_sdp_rec != NULL)) { (p_sdp_rec != NULL)) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { uint16_t tmp_svc = 0xFFFF; bta_dm_search_cb.services_found |= bta_dm_search_cb.services_found |= (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( bta_dm_search_cb.service_index - 1)); bta_dm_search_cb.service_index - 1)); tmp_svc = uint16_t tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - 1]; 1]; /* Add to the list of UUIDs */ /* Add to the list of UUIDs */ sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]); uuid_list.push_back(Uuid::From16Bit(tmp_svc)); num_uuids++; } } } } } } Loading @@ -1575,14 +1573,14 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { p_sdp_rec = NULL; p_sdp_rec = NULL; do { do { tBT_UUID temp_uuid; /* find a service record, report it */ /* find a service record, report it */ p_sdp_rec = p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); if (p_sdp_rec) { if (p_sdp_rec) { // SDP_FindServiceUUIDInRec_128bit is used only once, refactor? Uuid temp_uuid; if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE); uuid_list.push_back(temp_uuid); num_uuids++; } } } } } while (p_sdp_rec); } while (p_sdp_rec); Loading @@ -1603,13 +1601,15 @@ void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; p_msg->disc_result.result.disc_res.p_raw_data = NULL; p_msg->disc_result.result.disc_res.p_raw_data = NULL; p_msg->disc_result.result.disc_res.raw_data_size = 0; p_msg->disc_result.result.disc_res.raw_data_size = 0; p_msg->disc_result.result.disc_res.num_uuids = num_uuids; p_msg->disc_result.result.disc_res.num_uuids = uuid_list.size(); p_msg->disc_result.result.disc_res.p_uuid_list = NULL; p_msg->disc_result.result.disc_res.p_uuid_list = NULL; if (num_uuids > 0) { if (uuid_list.size() > 0) { // TODO(jpawlowski): make p_uuid_list into vector, and just copy // vectors, but first get rid of bta_sys_sendmsg below. p_msg->disc_result.result.disc_res.p_uuid_list = p_msg->disc_result.result.disc_res.p_uuid_list = (uint8_t*)osi_malloc(num_uuids * MAX_UUID_SIZE); (Uuid*)osi_malloc(uuid_list.size() * sizeof(Uuid)); memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list, memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list.data(), num_uuids * MAX_UUID_SIZE); uuid_list.size() * sizeof(Uuid)); } } // Copy the raw_data to the discovery result structure // Copy the raw_data to the discovery result structure if (bta_dm_search_cb.p_sdp_db != NULL && if (bta_dm_search_cb.p_sdp_db != NULL && Loading Loading @@ -1904,11 +1904,9 @@ void bta_dm_search_cancel_notify(UNUSED_ATTR tBTA_DM_MSG* p_data) { * * ******************************************************************************/ ******************************************************************************/ static void bta_dm_find_services(const RawAddress& bd_addr) { static void bta_dm_find_services(const RawAddress& bd_addr) { tSDP_UUID uuid; memset(&uuid, 0, sizeof(tSDP_UUID)); while (bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) { while (bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) { Uuid uuid = Uuid::kEmpty; if (bta_dm_search_cb.services_to_search & if (bta_dm_search_cb.services_to_search & (tBTA_SERVICE_MASK)( (tBTA_SERVICE_MASK)( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) { BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) { Loading @@ -1921,10 +1919,10 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, bta_dm_search_cb.services_to_search); bta_dm_search_cb.services_to_search); if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0]; uuid = Uuid::From16Bit(bta_service_id_to_uuid_lkup_tbl[0]); bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; } else { } else { uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP; uuid = Uuid::From16Bit(UUID_PROTOCOL_L2CAP); bta_dm_search_cb.services_to_search = 0; bta_dm_search_cb.services_to_search = 0; } } } else { } else { Loading @@ -1932,15 +1930,14 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { if (bta_dm_search_cb.uuid_to_search > 0 && if (bta_dm_search_cb.uuid_to_search > 0 && bta_dm_search_cb.p_srvc_uuid) { bta_dm_search_cb.p_srvc_uuid) { memcpy(&uuid, (const void*)(bta_dm_search_cb.p_srvc_uuid + uuid = *(bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); bta_dm_search_cb.uuid_to_search), sizeof(tBT_UUID)); bta_dm_search_cb.uuid_to_search--; bta_dm_search_cb.uuid_to_search--; } else { } else { uuid.uu.uuid16 = uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb .service_index]); } } /* last one? clear the BLE service bit if all discovery has been done /* last one? clear the BLE service bit if all discovery has been done Loading @@ -1954,18 +1951,17 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { /* remove the service from services to be searched */ /* remove the service from services to be searched */ bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); uuid.uu.uuid16 = uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); } } } } if (uuid.len == 0) uuid.len = LEN_UUID_16; if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID)); uuid = bta_dm_search_cb.uuid; } } LOG_INFO(LOG_TAG, "%s search UUID = %04x", __func__, uuid.uu.uuid16); LOG_INFO(LOG_TAG, "%s search UUID = %s", __func__, uuid.ToString().c_str()); SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, 0, NULL); &uuid, 0, NULL); Loading Loading @@ -3461,16 +3457,16 @@ static void bta_dm_set_eir(char* local_name) { if (local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len) { if (local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len) { /* get number of UUID 16-bit list */ /* get number of UUID 16-bit list */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) #if (BTA_EIR_CANNED_UUID_LIST == TRUE) num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / Uuid::kNumBytes16; #else // BTA_EIR_CANNED_UUID_LIST #else // BTA_EIR_CANNED_UUID_LIST max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes16; data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid); max_num_uuid, &num_uuid); p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ #endif // BTA_EIR_CANNED_UUID_LIST #endif // BTA_EIR_CANNED_UUID_LIST /* if UUID doesn't fit remaing space, shorten local name */ /* if UUID doesn't fit remaing space, shorten local name */ if (local_name_len > (free_eir_length - 4 - num_uuid * LEN_UUID_16)) { if (local_name_len > (free_eir_length - 4 - num_uuid * Uuid::kNumBytes16)) { local_name_len = find_utf8_char_boundary( local_name_len = find_utf8_char_boundary( local_name, p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); local_name, p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, Loading @@ -3494,23 +3490,24 @@ static void bta_dm_set_eir(char* local_name) { /* if UUID list is provided as static data in configuration */ /* if UUID list is provided as static data in configuration */ if ((p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0) && if ((p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0) && (p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) { (p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) { if (free_eir_length > LEN_UUID_16 + 2) { if (free_eir_length > Uuid::kNumBytes16 + 2) { free_eir_length -= 2; free_eir_length -= 2; if (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) { if (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) { num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / Uuid::kNumBytes16; data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; } else /* not enough room for all UUIDs */ } else /* not enough room for all UUIDs */ { { APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); num_uuid = free_eir_length / LEN_UUID_16; num_uuid = free_eir_length / Uuid::kNumBytes16; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; } } UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1); UINT8_TO_STREAM(p, num_uuid * Uuid::kNumBytes16 + 1); UINT8_TO_STREAM(p, data_type); UINT8_TO_STREAM(p, data_type); memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16); memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, p += num_uuid * LEN_UUID_16; num_uuid * Uuid::kNumBytes16); free_eir_length -= num_uuid * LEN_UUID_16; p += num_uuid * Uuid::kNumBytes16; free_eir_length -= num_uuid * Uuid::kNumBytes16; } } } } #else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ #else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ Loading @@ -3520,7 +3517,7 @@ static void bta_dm_set_eir(char* local_name) { p_type = p++; p_type = p++; num_uuid = 0; num_uuid = 0; max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes16; data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid); max_num_uuid, &num_uuid); Loading @@ -3532,10 +3529,10 @@ static void bta_dm_set_eir(char* local_name) { for (custom_uuid_idx = 0; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes16) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { UINT16_TO_STREAM(p, UINT16_TO_STREAM(p, curr.As16Bit()); bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; Loading @@ -3547,9 +3544,9 @@ static void bta_dm_set_eir(char* local_name) { } } #endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ #endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes16 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_16 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes16 + 2; } } #endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ #endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ Loading @@ -3561,13 +3558,14 @@ static void bta_dm_set_eir(char* local_name) { num_uuid = 0; num_uuid = 0; data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; max_num_uuid = (free_eir_length - 2) / LEN_UUID_32; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes32; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes32) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32); UINT32_TO_STREAM(p, curr.As32Bit()); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; Loading @@ -3577,9 +3575,9 @@ static void bta_dm_set_eir(char* local_name) { } } } } UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes32 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_32 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes32 + 2; } } /* Adding 128-bit UUID list */ /* Adding 128-bit UUID list */ Loading @@ -3589,14 +3587,14 @@ static void bta_dm_set_eir(char* local_name) { num_uuid = 0; num_uuid = 0; data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; max_num_uuid = (free_eir_length - 2) / LEN_UUID_128; max_num_uuid = (free_eir_length - 2) / Uuid::kNumBytes128; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) { custom_uuid_idx++) { if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128) { const Uuid& curr = bta_dm_cb.custom_uuid[custom_uuid_idx]; if (curr.GetShortestRepresentationSize() == Uuid::kNumBytes128) { if (num_uuid < max_num_uuid) { if (num_uuid < max_num_uuid) { ARRAY16_TO_STREAM(p, ARRAY16_TO_STREAM(p, curr.To128BitBE().data()); bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128); num_uuid++; num_uuid++; } else { } else { data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; Loading @@ -3606,9 +3604,9 @@ static void bta_dm_set_eir(char* local_name) { } } } } UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1); UINT8_TO_STREAM(p_length, num_uuid * Uuid::kNumBytes128 + 1); UINT8_TO_STREAM(p_type, data_type); UINT8_TO_STREAM(p_type, data_type); free_eir_length -= num_uuid * LEN_UUID_128 + 2; free_eir_length -= num_uuid * Uuid::kNumBytes128 + 2; } } #endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE \ #endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE \ )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ Loading Loading @@ -4443,10 +4441,7 @@ static void bta_dm_gattc_register(void) { * * ******************************************************************************/ ******************************************************************************/ static void btm_dm_start_disc_gatt_services(uint16_t conn_id) { static void btm_dm_start_disc_gatt_services(uint16_t conn_id) { tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - Uuid* p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; bta_dm_search_cb.uuid_to_search; /* always search for all services */ /* always search for all services */ Loading Loading @@ -4474,11 +4469,14 @@ static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) { if (bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < if (bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size) { bta_dm_search_cb.ble_raw_size) { APPL_TRACE_DEBUG( APPL_TRACE_DEBUG( "ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x", "ADDING BLE SERVICE uuid=%s, ble_ptr = 0x%x, ble_raw_used = 0x%x", service_id.uuid.uu.uuid16, bta_dm_search_cb.p_ble_rawdata, service_id.uuid.ToString().c_str(), bta_dm_search_cb.p_ble_rawdata, bta_dm_search_cb.ble_raw_used); bta_dm_search_cb.ble_raw_used); if (bta_dm_search_cb.p_ble_rawdata) { if (bta_dm_search_cb.p_ble_rawdata) { // TODO(jpawlowski): the p_ble_raw data is only sent to btif_dm.cc, but is // never used there. Get rid of this code completly, or implement the // TODOs from btif_dm.cc memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id, sizeof(service_id)); &service_id, sizeof(service_id)); Loading @@ -4494,14 +4492,14 @@ static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) { __func__, bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used); __func__, bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used); } } LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%d ", __func__, LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%zu", __func__, service_id.uuid.len); service_id.uuid.GetShortestRepresentationSize()); if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) { if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) { /* send result back to app now, one by one */ /* send result back to app now, one by one */ result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr; strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); BD_NAME_LEN); memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID)); result.disc_ble_res.service = service_id.uuid; bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); } } Loading
system/bta/dm/bta_dm_api.cc +18 −15 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,8 @@ #include "osi/include/osi.h" #include "osi/include/osi.h" #include "utl.h" #include "utl.h" using bluetooth::Uuid; /***************************************************************************** /***************************************************************************** * Constants * Constants ****************************************************************************/ ****************************************************************************/ Loading Loading @@ -260,7 +262,7 @@ void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_SERVICE_MASK services, * Returns void * Returns void * * ******************************************************************************/ ******************************************************************************/ void BTA_DmDiscoverUUID(const RawAddress& bd_addr, tSDP_UUID* uuid, void BTA_DmDiscoverUUID(const RawAddress& bd_addr, const Uuid& uuid, tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { tBTA_DM_API_DISCOVER* p_msg = tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); (tBTA_DM_API_DISCOVER*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); Loading @@ -273,8 +275,7 @@ void BTA_DmDiscoverUUID(const RawAddress& bd_addr, tSDP_UUID* uuid, p_msg->num_uuid = 0; p_msg->num_uuid = 0; p_msg->p_uuid = NULL; p_msg->p_uuid = NULL; p_msg->uuid = uuid; memcpy(&p_msg->uuid, uuid, sizeof(tSDP_UUID)); bta_sys_sendmsg(p_msg); bta_sys_sendmsg(p_msg); } } Loading Loading @@ -500,11 +501,11 @@ void BTA_GetEirService(uint8_t* p_eir, size_t eir_len, tBTA_SERVICE_MASK* p_services) { tBTA_SERVICE_MASK* p_services) { uint8_t xx, yy; uint8_t xx, yy; uint8_t num_uuid, max_num_uuid = 32; uint8_t num_uuid, max_num_uuid = 32; uint8_t uuid_list[32 * LEN_UUID_16]; uint8_t uuid_list[32 * Uuid::kNumBytes16]; uint16_t* p_uuid16 = (uint16_t*)uuid_list; uint16_t* p_uuid16 = (uint16_t*)uuid_list; tBTA_SERVICE_MASK mask; tBTA_SERVICE_MASK mask; BTM_GetEirUuidList(p_eir, eir_len, LEN_UUID_16, &num_uuid, uuid_list, BTM_GetEirUuidList(p_eir, eir_len, Uuid::kNumBytes16, &num_uuid, uuid_list, max_num_uuid); max_num_uuid); for (xx = 0; xx < num_uuid; xx++) { for (xx = 0; xx < num_uuid; xx++) { mask = 1; mask = 1; Loading Loading @@ -815,8 +816,9 @@ static void bta_dm_discover_send_msg(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback, tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search, bool sdp_search, tBTA_TRANSPORT transport) { tBTA_TRANSPORT transport) { const size_t len = p_services ? (sizeof(tBTA_DM_API_DISCOVER) + const size_t len = sizeof(tBT_UUID) * p_services->num_uuid) p_services ? (sizeof(tBTA_DM_API_DISCOVER) + sizeof(Uuid) * p_services->num_uuid) : sizeof(tBTA_DM_API_DISCOVER); : sizeof(tBTA_DM_API_DISCOVER); tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_calloc(len); tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_calloc(len); Loading @@ -830,9 +832,9 @@ static void bta_dm_discover_send_msg(const RawAddress& bd_addr, p_msg->services = p_services->srvc_mask; p_msg->services = p_services->srvc_mask; p_msg->num_uuid = p_services->num_uuid; p_msg->num_uuid = p_services->num_uuid; if (p_services->num_uuid != 0) { if (p_services->num_uuid != 0) { p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); p_msg->p_uuid = (Uuid*)(p_msg + 1); memcpy(p_msg->p_uuid, p_services->p_uuid, memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid); sizeof(Uuid) * p_services->num_uuid); } } } } Loading Loading @@ -906,8 +908,9 @@ void BTA_DmDiscoverExt(const RawAddress& bd_addr, ******************************************************************************/ ******************************************************************************/ void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, tBTA_DM_SEARCH_CBACK* p_cback) { tBTA_DM_SEARCH_CBACK* p_cback) { const size_t len = p_services ? (sizeof(tBTA_DM_API_SEARCH) + const size_t len = sizeof(tBT_UUID) * p_services->num_uuid) p_services ? (sizeof(tBTA_DM_API_SEARCH) + sizeof(Uuid) * p_services->num_uuid) : sizeof(tBTA_DM_API_SEARCH); : sizeof(tBTA_DM_API_SEARCH); tBTA_DM_API_SEARCH* p_msg = (tBTA_DM_API_SEARCH*)osi_calloc(len); tBTA_DM_API_SEARCH* p_msg = (tBTA_DM_API_SEARCH*)osi_calloc(len); Loading @@ -921,9 +924,9 @@ void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, p_msg->num_uuid = p_services->num_uuid; p_msg->num_uuid = p_services->num_uuid; if (p_services->num_uuid != 0) { if (p_services->num_uuid != 0) { p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); p_msg->p_uuid = (Uuid*)(p_msg + 1); memcpy(p_msg->p_uuid, p_services->p_uuid, memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid); sizeof(Uuid) * p_services->num_uuid); } else { } else { p_msg->p_uuid = NULL; p_msg->p_uuid = NULL; } } Loading
system/bta/dm/bta_dm_int.h +6 −6 Original line number Original line Diff line number Diff line Loading @@ -151,7 +151,7 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_cback; tBTA_DM_SEARCH_CBACK* p_cback; tBTA_DM_RS_RES rs_res; tBTA_DM_RS_RES rs_res; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_uuid; bluetooth::Uuid* p_uuid; } tBTA_DM_API_SEARCH; } tBTA_DM_API_SEARCH; /* data type for BTA_DM_API_DISCOVER_EVT */ /* data type for BTA_DM_API_DISCOVER_EVT */ Loading @@ -163,8 +163,8 @@ typedef struct { bool sdp_search; bool sdp_search; tBTA_TRANSPORT transport; tBTA_TRANSPORT transport; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_uuid; bluetooth::Uuid* p_uuid; tSDP_UUID uuid; bluetooth::Uuid uuid; } tBTA_DM_API_DISCOVER; } tBTA_DM_API_DISCOVER; /* data type for BTA_DM_API_DI_DISC_EVT */ /* data type for BTA_DM_API_DI_DISC_EVT */ Loading Loading @@ -641,7 +641,7 @@ typedef struct { /* store UUID list for EIR */ /* store UUID list for EIR */ uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; bluetooth::Uuid custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; #endif #endif #endif #endif Loading Loading @@ -669,7 +669,7 @@ typedef struct { cancel stored here */ cancel stored here */ bool wait_disc; bool wait_disc; bool sdp_results; bool sdp_results; tSDP_UUID uuid; bluetooth::Uuid uuid; uint8_t peer_scn; uint8_t peer_scn; bool sdp_search; bool sdp_search; bool cancel_pending; /* inquiry cancel is pending */ bool cancel_pending; /* inquiry cancel is pending */ Loading @@ -677,7 +677,7 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_scan_cback; tBTA_DM_SEARCH_CBACK* p_scan_cback; tBTA_GATTC_IF client_if; tBTA_GATTC_IF client_if; uint8_t num_uuid; uint8_t num_uuid; tBT_UUID* p_srvc_uuid; bluetooth::Uuid* p_srvc_uuid; uint8_t uuid_to_search; uint8_t uuid_to_search; bool gatt_disc_active; bool gatt_disc_active; uint16_t conn_id; uint16_t conn_id; Loading