已合并
ble connection supprt third party device #10916
ble connection supprt third party device #10916
已合并
wangJE创建于 2025年9月16日
共 18 个文件变更+192-54
@@ -253,21 +253,24 @@ void SoftbusFilterToBt(BleScanNativeFilter *nativeFilter, const SoftBusBcScanFil
253 (nativeFilter + filterSize)->manufactureDataMask = (unsigned char *)(filter + filterSize)->manufactureDataMask;253 (nativeFilter + filterSize)->manufactureDataMask = (unsigned char *)(filter + filterSize)->manufactureDataMask;
254 (nativeFilter + filterSize)->manufactureId = (unsigned short)(filter + filterSize)->manufactureId;254 (nativeFilter + filterSize)->manufactureId = (unsigned short)(filter + filterSize)->manufactureId;
255 (nativeFilter + filterSize)->advIndReport = (filter + filterSize)->advIndReport;255 (nativeFilter + filterSize)->advIndReport = (filter + filterSize)->advIndReport;
256+ (nativeFilter + filterSize)->serviceUuid = (unsigned char *)(filter + filterSize)->serviceUuid;
257+ (nativeFilter + filterSize)->serviceUuidMask = (unsigned char *)(filter + filterSize)->serviceUuidMask;
258+ (nativeFilter + filterSize)->serviceUuidLength = (unsigned int)(filter + filterSize)->serviceUuidLength;
256 259 
257 if ((filter + filterSize)->serviceData == NULL || (filter + filterSize)->serviceDataMask == NULL) {260 if ((filter + filterSize)->serviceData == NULL || (filter + filterSize)->serviceDataMask == NULL) {
258 continue;261 continue;
259 }262 }
260 263 
261 // serviceData = uuid + serviceData, serviceDataMask = 0xFFFF + serviceDataMask264 // serviceData = uuid + serviceData, serviceDataMask = 0xFFFF + serviceDataMask
262- uint16_t serviceUuid = (filter + filterSize)->serviceUuid;265+ uint16_t serviceId = (filter + filterSize)->serviceId;
263 uint16_t serviceDataLen = (filter + filterSize)->serviceDataLength + 2;266 uint16_t serviceDataLen = (filter + filterSize)->serviceDataLength + 2;
264 uint8_t *serviceData = (uint8_t *)SoftBusCalloc(serviceDataLen);267 uint8_t *serviceData = (uint8_t *)SoftBusCalloc(serviceDataLen);
265 if (serviceData == NULL) {268 if (serviceData == NULL) {
266 DISC_LOGW(DISC_BLE_ADAPTER, "malloc service data failed");269 DISC_LOGW(DISC_BLE_ADAPTER, "malloc service data failed");
267 continue;270 continue;
268 }271 }
269- serviceData[0] = serviceUuid & BC_BYTE_MASK;272+ serviceData[0] = serviceId & BC_BYTE_MASK;
270- serviceData[1] = (serviceUuid >> BC_SHIFT_BIT) & BC_BYTE_MASK;273+ serviceData[1] = (serviceId >> BC_SHIFT_BIT) & BC_BYTE_MASK;
271 if (memcpy_s(serviceData + UUID_LEN, serviceDataLen - UUID_LEN, (filter + filterSize)->serviceData,274 if (memcpy_s(serviceData + UUID_LEN, serviceDataLen - UUID_LEN, (filter + filterSize)->serviceData,
272 serviceDataLen - UUID_LEN) != EOK) {275 serviceDataLen - UUID_LEN) != EOK) {
273 DISC_LOGW(DISC_BLE_ADAPTER, "copy service data failed");276 DISC_LOGW(DISC_BLE_ADAPTER, "copy service data failed");
@@ -501,8 +504,9 @@ int32_t ParseScanResult(const uint8_t *advData, uint8_t advLen, SoftBusBcScanRes
501 } else if (type == SHORTENED_LOCAL_NAME_BC_TYPE || type == LOCAL_NAME_BC_TYPE) {504 } else if (type == SHORTENED_LOCAL_NAME_BC_TYPE || type == LOCAL_NAME_BC_TYPE) {
502 DISC_CHECK_AND_RETURN_RET_LOGE(ParseLocalName(advData, advLen, dst, index, len) == SOFTBUS_OK,505 DISC_CHECK_AND_RETURN_RET_LOGE(ParseLocalName(advData, advLen, dst, index, len) == SOFTBUS_OK,
503 SOFTBUS_BC_ADAPTER_PARSE_FAIL, DISC_BLE_ADAPTER, "parse local name failed");506 SOFTBUS_BC_ADAPTER_PARSE_FAIL, DISC_BLE_ADAPTER, "parse local name failed");
507+ dst->nameTruncated = (type == SHORTENED_LOCAL_NAME_BC_TYPE);
504 } else {508 } else {
505- if (type != SERVICE_BC_TYPE && type != MANUFACTURE_BC_TYPE) {509+ if (type != SERVICE_BC_TYPE && type != MANUFACTURE_BC_TYPE && type != SERVICEUUID_BC_TYPE) {
506 index += len;510 index += len;
507 DISC_LOGD(DISC_BLE_ADAPTER, "unsupported type, type=%{public}hhu", type);511 DISC_LOGD(DISC_BLE_ADAPTER, "unsupported type, type=%{public}hhu", type);
508 continue;512 continue;
@@ -759,7 +759,7 @@ static bool CheckServiceIsMatch(const BcScanFilter *filter, const BroadcastPaylo
759 DISC_LOGD(DISC_BROADCAST, "payload is too short");759 DISC_LOGD(DISC_BROADCAST, "payload is too short");
760 return false;760 return false;
761 }761 }
762- if (filter->serviceUuid != bcData->id) {762+ if (filter->serviceId != bcData->id) {
763 DISC_LOGD(DISC_BROADCAST, "serviceUuid not match");763 DISC_LOGD(DISC_BROADCAST, "serviceUuid not match");
764 return false;764 return false;
765 }765 }
@@ -772,11 +772,38 @@ static bool CheckServiceIsMatch(const BcScanFilter *filter, const BroadcastPaylo
772 return true;772 return true;
773}773}
774 774 
775+static bool CheckServiceUuidIsMatch(const BcScanFilter *filter, const BroadcastPayload *bcData)
776+{
777+ DISC_CHECK_AND_RETURN_RET_LOGE(filter != NULL, false, DISC_BROADCAST, "filter is nullptr");
778+ DISC_CHECK_AND_RETURN_RET_LOGE(bcData != NULL, false, DISC_BROADCAST, "bcData is nullptr");
779+ 
780+ uint8_t dataLen = bcData->payloadLen;
781+ uint32_t filterLen = filter->serviceUuidDataLength;
782+ if ((uint32_t)dataLen < filterLen) {
783+ DISC_LOGD(DISC_BROADCAST, "payload is too short");
784+ return false;
785+ }
786+
787+ if (filter->serviceUuidId != bcData->id) {
S
Ssongzhengteng2025年9月17日

把下面的概念收束定义清楚: serviceid serviceuuid serviceuuidid id manufactureId

likedislike
788+ DISC_LOGD(DISC_BROADCAST, "serviceUuid not match");
789+ return false;
790+ }
791+ 
792+ for (uint32_t i = 0; i < filterLen; i++) {
793+ if ((filter->serviceUuidData[i] & filter->serviceUuidDataMask[i]) !=
794+ (bcData->payload[i] & filter->serviceUuidDataMask[i])) {
795+ return false;
796+ }
797+ }
798+ return true;
799+}
800+ 
775static bool CheckScanResultDataIsMatch(const uint32_t managerId, BroadcastPayload *bcData)801static bool CheckScanResultDataIsMatch(const uint32_t managerId, BroadcastPayload *bcData)
776{802{
777 DISC_CHECK_AND_RETURN_RET_LOGE(bcData != NULL, false, DISC_BROADCAST, "bcData is nullptr");803 DISC_CHECK_AND_RETURN_RET_LOGE(bcData != NULL, false, DISC_BROADCAST, "bcData is nullptr");
778 804 
779- if (bcData->type != BC_DATA_TYPE_SERVICE && bcData->type != BC_DATA_TYPE_MANUFACTURER) {805+ if (bcData->type != BC_DATA_TYPE_SERVICE && bcData->type != BC_DATA_TYPE_MANUFACTURER &&
806+ bcData->type != BC_DATA_TYPE_SERVICE_UUID) {
780 DISC_LOGE(DISC_BROADCAST, "not support type, type=%{public}d", bcData->type);807 DISC_LOGE(DISC_BROADCAST, "not support type, type=%{public}d", bcData->type);
781 return false;808 return false;
782 }809 }
@@ -790,6 +817,9 @@ static bool CheckScanResultDataIsMatch(const uint32_t managerId, BroadcastPayloa
790 if (bcData->type == BC_DATA_TYPE_MANUFACTURER && CheckManufactureIsMatch(&filter, bcData)) {817 if (bcData->type == BC_DATA_TYPE_MANUFACTURER && CheckManufactureIsMatch(&filter, bcData)) {
791 return true;818 return true;
792 }819 }
820+ if (bcData->type == BC_DATA_TYPE_SERVICE_UUID && CheckServiceUuidIsMatch(&filter, bcData)) {
821+ return true;
822+ }
793 }823 }
794 return false;824 return false;
795}825}
@@ -876,6 +906,10 @@ static int32_t BuildBroadcastReportInfo(const SoftBusBcScanResult *reportData, B
876{906{
877 DISC_CHECK_AND_RETURN_RET_LOGE(reportData != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "reportData is nullptr");907 DISC_CHECK_AND_RETURN_RET_LOGE(reportData != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "reportData is nullptr");
878 DISC_CHECK_AND_RETURN_RET_LOGE(bcInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "bcInfo is nullptr");908 DISC_CHECK_AND_RETURN_RET_LOGE(bcInfo != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "bcInfo is nullptr");
909+ errno_t result = memcpy_s(bcInfo->localName, sizeof(bcInfo->localName),
910+ reportData->localName, sizeof(reportData->localName));
911+ DISC_CHECK_AND_RETURN_RET_LOGE(result == EOK, SOFTBUS_MEM_ERR, DISC_BROADCAST,
912+ "cpy localName failed, ret=%{public}d", result);
879 913 
880 // 1. Build BroadcastReportInfo from SoftBusBcScanResult except BroadcastPacket.914 // 1. Build BroadcastReportInfo from SoftBusBcScanResult except BroadcastPacket.
881 int32_t ret = BuildBcInfoCommon(reportData, bcInfo);915 int32_t ret = BuildBcInfoCommon(reportData, bcInfo);
@@ -1326,6 +1360,8 @@ static void ReleaseBcScanFilter(int listenerId)
1326 SoftBusFree((filter + filterSize)->serviceDataMask);1360 SoftBusFree((filter + filterSize)->serviceDataMask);
1327 SoftBusFree((filter + filterSize)->manufactureData);1361 SoftBusFree((filter + filterSize)->manufactureData);
1328 SoftBusFree((filter + filterSize)->manufactureDataMask);1362 SoftBusFree((filter + filterSize)->manufactureDataMask);
1363+ SoftBusFree((filter + filterSize)->serviceUuidData);
1364+ SoftBusFree((filter + filterSize)->serviceUuidDataMask);
1329 }1365 }
1330 SoftBusFree(filter);1366 SoftBusFree(filter);
1331 g_scanManager[listenerId].filterSize = 0;1367 g_scanManager[listenerId].filterSize = 0;
@@ -1361,30 +1397,70 @@ static bool CheckNeedUpdateScan(int32_t listenerId, int32_t *liveListenerId)
1361 return false;1397 return false;
1362}1398}
1363 1399 
1400+static int32_t DupData(uint8_t *srcData, uint32_t srcDataLen, uint8_t **outData)
1401+{
1402+ if (srcData != NULL && srcDataLen > 0) {
1403+ uint8_t *dupData = (uint8_t *)SoftBusCalloc(srcDataLen);
1404+ DISC_CHECK_AND_RETURN_RET_LOGE(srcData != NULL, SOFTBUS_MALLOC_ERR, DISC_BROADCAST, "calloc failed");
1405+ (void)memcpy_s(dupData, srcDataLen, srcData, srcDataLen);
1406+ *outData = dupData;
1407+ }
1408+
1409+ return SOFTBUS_OK;
1410+}
1411+ 
1364static int32_t CopyScanFilterServiceInfo(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)1412static int32_t CopyScanFilterServiceInfo(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)
1365{1413{
1366 DISC_CHECK_AND_RETURN_RET_LOGE(srcFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "srcFilter is nullptr");1414 DISC_CHECK_AND_RETURN_RET_LOGE(srcFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "srcFilter is nullptr");
1367 DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "dstFilter is nullptr");1415 DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "dstFilter is nullptr");
1368 1416 
1369- dstFilter->serviceUuid = srcFilter->serviceUuid;1417+ dstFilter->serviceId = srcFilter->serviceId;
1370 dstFilter->serviceDataLength = srcFilter->serviceDataLength;1418 dstFilter->serviceDataLength = srcFilter->serviceDataLength;
1371- if (srcFilter->serviceData != NULL && srcFilter->serviceDataLength > 0) {1419+
1372- dstFilter->serviceData = (uint8_t *)SoftBusCalloc(dstFilter->serviceDataLength);1420+ int32_t ret = DupData(srcFilter->serviceData, srcFilter->serviceDataLength, &dstFilter->serviceData);
1373- DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter->serviceData != NULL &&1421+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST,
1374- memcpy_s(dstFilter->serviceData, dstFilter->serviceDataLength,1422+ "dup serviceData failed, ret=%{public}d", ret);
1375- srcFilter->serviceData, srcFilter->serviceDataLength) == EOK,1423+ 
1376- SOFTBUS_MEM_ERR, DISC_BROADCAST, "copy filter serviceData failed");1424+ ret = DupData(srcFilter->serviceDataMask, srcFilter->serviceDataLength, &dstFilter->serviceDataMask);
1377- }1425+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST,
1378- if (srcFilter->serviceDataMask != NULL && srcFilter->serviceDataLength > 0) {1426+ "dup serviceDataMask failed, ret=%{public}d", ret);
1379- dstFilter->serviceDataMask = (uint8_t *)SoftBusCalloc(dstFilter->serviceDataLength);
1380- DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter->serviceDataMask != NULL &&
1381- memcpy_s(dstFilter->serviceDataMask, dstFilter->serviceDataLength,
1382- srcFilter->serviceDataMask, srcFilter->serviceDataLength) == EOK,
1383- SOFTBUS_MEM_ERR, DISC_BROADCAST, "copy filter serviceDataMask failed");
1384- }
1385 return SOFTBUS_OK;1427 return SOFTBUS_OK;
1386}1428}
1387 1429 
1430+static int32_t CopyScanFilterServiceUuid(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)
1431+{
1432+ dstFilter->serviceId = srcFilter->serviceId;
1433+ dstFilter->serviceUuidMask = srcFilter->serviceUuidMask;
1434+ dstFilter->serviceUuidLength = srcFilter->serviceUuidLength;
1435+ 
1436+ dstFilter->serviceUuidId = srcFilter->serviceUuidId;
1437+ dstFilter->serviceUuidDataLength = srcFilter->serviceUuidDataLength;
1438+ int32_t ret = DupData(srcFilter->serviceUuidData, srcFilter->serviceUuidDataLength, &dstFilter->serviceUuidData);
1439+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
1440+ DISC_BROADCAST, "dup serviceUuidData failed, ret=%{public}d", ret);
1441+ 
1442+ ret = DupData(srcFilter->serviceUuidDataMask, srcFilter->serviceUuidDataLength, &dstFilter->serviceUuidDataMask);
1443+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST,
1444+ "dup serviceUuidDataMask failed, ret=%{public}d", ret);
1445+ return SOFTBUS_OK;
1446+}
1447+ 
1448+static int32_t CopyScanFilterManufacture(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)
1449+{
1450+ dstFilter->manufactureId = srcFilter->manufactureId;
1451+ dstFilter->manufactureDataLength = srcFilter->manufactureDataLength;
1452+
1453+ int32_t ret = DupData(srcFilter->manufactureData, srcFilter->serviceUuidDataLength, &dstFilter->manufactureData);
1454+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret,
1455+ DISC_BROADCAST, "dup serviceUuidData failed,ret=%{public}d", ret);
1456+
1457+ ret = DupData(srcFilter->manufactureDataMask, srcFilter->serviceUuidDataLength, &dstFilter->manufactureDataMask);
1458+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST,
1459+ "dup serviceUuidDataMask failed, ret=%{public}d", ret);
1460+ return SOFTBUS_OK;
1461+}
1462+ 
1463+ 
1388static int32_t CopySoftBusBcScanFilter(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)1464static int32_t CopySoftBusBcScanFilter(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter)
1389{1465{
1390 DISC_CHECK_AND_RETURN_RET_LOGE(srcFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "srcFilter is NULL");1466 DISC_CHECK_AND_RETURN_RET_LOGE(srcFilter != NULL, SOFTBUS_INVALID_PARAM, DISC_BROADCAST, "srcFilter is NULL");
@@ -1406,26 +1482,12 @@ static int32_t CopySoftBusBcScanFilter(const BcScanFilter *srcFilter, SoftBusBcS
1406 }1482 }
1407 1483 
1408 int ret = CopyScanFilterServiceInfo(srcFilter, dstFilter);1484 int ret = CopyScanFilterServiceInfo(srcFilter, dstFilter);
1409- if (ret != SOFTBUS_OK) {1485+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST, "cpy service data failed=%{public}d", ret);
1410- return ret;1486+ ret = CopyScanFilterServiceUuid(srcFilter, dstFilter);
1411- }1487+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST, "cpy service uuid failed=%{public}d", ret);
1412 1488 
1413- dstFilter->manufactureId = srcFilter->manufactureId;1489+ ret = CopyScanFilterManufacture(srcFilter, dstFilter);
1414- dstFilter->manufactureDataLength = srcFilter->manufactureDataLength;1490+ DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, DISC_BROADCAST, "cpy manufacture failed=%{public}d", ret);
1415- if (srcFilter->manufactureData != NULL && srcFilter->manufactureDataLength > 0) {
1416- dstFilter->manufactureData = (uint8_t *)SoftBusCalloc(dstFilter->manufactureDataLength);
1417- DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter->manufactureData != NULL &&
1418- memcpy_s(dstFilter->manufactureData, dstFilter->manufactureDataLength,
1419- srcFilter->manufactureData, srcFilter->manufactureDataLength) == EOK,
1420- SOFTBUS_MEM_ERR, DISC_BROADCAST, "copy filter manufactureData failed");
1421- }
1422- if (srcFilter->manufactureDataMask != NULL && srcFilter->manufactureDataLength > 0) {
1423- dstFilter->manufactureDataMask = (uint8_t *)SoftBusCalloc(dstFilter->manufactureDataLength);
1424- DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter->manufactureDataMask != NULL &&
1425- memcpy_s(dstFilter->manufactureDataMask, dstFilter->manufactureDataLength,
1426- srcFilter->manufactureDataMask, srcFilter->manufactureDataLength) == EOK,
1427- SOFTBUS_MEM_ERR, DISC_BROADCAST, "copy filter manufactureDataMask failed");
1428- }
1429 if (srcFilter->filterIndex == 0) {1491 if (srcFilter->filterIndex == 0) {
1430 DISC_LOGD(DISC_BROADCAST, "invaild filterIndex");1492 DISC_LOGD(DISC_BROADCAST, "invaild filterIndex");
1431 }1493 }
@@ -1471,6 +1533,12 @@ static void ReleaseSoftBusBcScanFilter(SoftBusBcScanFilter *filter, int32_t size
1471 if ((filter + size)->manufactureDataMask != NULL) {1533 if ((filter + size)->manufactureDataMask != NULL) {
1472 SoftBusFree((filter + size)->manufactureDataMask);1534 SoftBusFree((filter + size)->manufactureDataMask);
1473 }1535 }
1536+ if ((filter + size)->serviceUuidData != NULL) {
1537+ SoftBusFree((filter + size)->serviceUuidData);
1538+ }
1539+ if ((filter + size)->serviceUuidDataMask != NULL) {
1540+ SoftBusFree((filter + size)->serviceUuidDataMask);
1541+ }
1474 }1542 }
1475 SoftBusFree(filter);1543 SoftBusFree(filter);
1476 }1544 }
@@ -2718,7 +2786,7 @@ bool CompareSameFilter(BcScanFilter *srcFilter, BcScanFilter *dstFilter)
2718 DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter != NULL, false, DISC_BROADCAST, "right filter is null");2786 DISC_CHECK_AND_RETURN_RET_LOGE(dstFilter != NULL, false, DISC_BROADCAST, "right filter is null");
2719 2787 
2720 return srcFilter->advIndReport == dstFilter->advIndReport &&2788 return srcFilter->advIndReport == dstFilter->advIndReport &&
2721- srcFilter->serviceUuid == dstFilter->serviceUuid &&2789+ srcFilter->serviceId == dstFilter->serviceId &&
2722 srcFilter->serviceDataLength == dstFilter->serviceDataLength &&2790 srcFilter->serviceDataLength == dstFilter->serviceDataLength &&
2723 srcFilter->manufactureId == dstFilter->manufactureId &&2791 srcFilter->manufactureId == dstFilter->manufactureId &&
2724 srcFilter->manufactureDataLength == dstFilter->manufactureDataLength &&2792 srcFilter->manufactureDataLength == dstFilter->manufactureDataLength &&
@@ -21,6 +21,7 @@
21#include "conn_log.h"21#include "conn_log.h"
22#include "bus_center_manager.h"22#include "bus_center_manager.h"
23#include "softbus_adapter_mem.h"23#include "softbus_adapter_mem.h"
24+#include "g_enhance_disc_func_pack.h"
24#include "softbus_conn_ble_manager.h"25#include "softbus_conn_ble_manager.h"
25#include "softbus_conn_ble_trans.h"26#include "softbus_conn_ble_trans.h"
26#include "softbus_conn_common.h"27#include "softbus_conn_common.h"
@@ -34,6 +35,7 @@
34#define BASIC_INFO_KEY_ROLE "type"35#define BASIC_INFO_KEY_ROLE "type"
35#define BASIC_INFO_KEY_DEVTYPE "devtype"36#define BASIC_INFO_KEY_DEVTYPE "devtype"
36#define BASIC_INFO_KEY_FEATURE "FEATURE_SUPPORT"37#define BASIC_INFO_KEY_FEATURE "FEATURE_SUPPORT"
38+#define UNKNOWN_DEVICE_TYPE 0xFF
37 39 
38enum ConnectionLoopMsgType {40enum ConnectionLoopMsgType {
39 MSG_CONNECTION_RETRY_SERVER_STATE_CONSISTENT = 100,41 MSG_CONNECTION_RETRY_SERVER_STATE_CONSISTENT = 100,
@@ -613,8 +615,11 @@ static int32_t SendBasicInfo(ConnBleConnection *connection)
613 char *payload = NULL;615 char *payload = NULL;
614 featureBitSet |= g_featureBitSet;616 featureBitSet |= g_featureBitSet;
615 do {617 do {
616- if (!AddStringToJsonObject(json, BASIC_INFO_KEY_DEVID, devId) ||618+ if (!connection->isUnknownDevice && !AddStringToJsonObject(json, BASIC_INFO_KEY_DEVID, devId)) {
617- !AddNumberToJsonObject(json, BASIC_INFO_KEY_ROLE, connection->side) ||619+ status = SOFTBUS_CREATE_JSON_ERR;
620+ break;
621+ }
622+ if (!AddNumberToJsonObject(json, BASIC_INFO_KEY_ROLE, connection->side) ||
618 !AddNumberToJsonObject(json, BASIC_INFO_KEY_DEVTYPE, deviceType) ||623 !AddNumberToJsonObject(json, BASIC_INFO_KEY_DEVTYPE, deviceType) ||
619 !AddNumberToJsonObject(json, BASIC_INFO_KEY_FEATURE, featureBitSet)) {624 !AddNumberToJsonObject(json, BASIC_INFO_KEY_FEATURE, featureBitSet)) {
620 CONN_LOGE(CONN_BLE, "add json info fail, connId=%{public}u", connection->connectionId);625 CONN_LOGE(CONN_BLE, "add json info fail, connId=%{public}u", connection->connectionId);
@@ -698,8 +703,11 @@ static int32_t ParsePeerBasicInfoInner(ConnBleConnection *connection, const uint
698 return SOFTBUS_PARSE_JSON_ERR;703 return SOFTBUS_PARSE_JSON_ERR;
699 }704 }
700 // mandatory fields705 // mandatory fields
701- if (!GetJsonObjectStringItem(json, BASIC_INFO_KEY_DEVID, baseInfo->devId, DEVID_BUFF_LEN) ||706+ if (!GetJsonObjectStringItem(json, BASIC_INFO_KEY_DEVID, baseInfo->devId, DEVID_BUFF_LEN)) {
702- !GetJsonObjectNumberItem(json, BASIC_INFO_KEY_ROLE, &(baseInfo->type))) {707+ CONN_LOGI(CONN_BLE, "parse devId fail, connId=%{public}u", connection->connectionId);
708+ // fall through
709+ }
710+ if (!GetJsonObjectNumberItem(json, BASIC_INFO_KEY_ROLE, &(baseInfo->type))) {
703 cJSON_Delete(json);711 cJSON_Delete(json);
704 CONN_LOGE(CONN_BLE, "basic info field not exist, connId=%{public}u", connection->connectionId);712 CONN_LOGE(CONN_BLE, "basic info field not exist, connId=%{public}u", connection->connectionId);
705 return SOFTBUS_CONN_BLE_INTERNAL_ERR;713 return SOFTBUS_CONN_BLE_INTERNAL_ERR;
@@ -726,6 +734,8 @@ static int32_t ParseBasicInfo(ConnBleConnection *connection, const uint8_t *data
726 CONN_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, CONN_BLE, "ble parse data fail, error=%{public}d", ret);734 CONN_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, CONN_BLE, "ble parse data fail, error=%{public}d", ret);
727 bool isSupportNetWorkIdExchange = ((uint32_t)(baseInfo.feature) &735 bool isSupportNetWorkIdExchange = ((uint32_t)(baseInfo.feature) &
728 (1 << BLE_FEATURE_SUPPORT_SUPPORT_NETWORKID_BASICINFO_EXCAHNGE)) != 0;736 (1 << BLE_FEATURE_SUPPORT_SUPPORT_NETWORKID_BASICINFO_EXCAHNGE)) != 0;
737+ connection->isUnknownDevice = ((baseInfo.deviceType) == UNKNOWN_DEVICE_TYPE);
738+ 
729 ret = SoftBusMutexLock(&connection->lock);739 ret = SoftBusMutexLock(&connection->lock);
730 CONN_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_LOCK_ERR, CONN_BLE,740 CONN_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_LOCK_ERR, CONN_BLE,
731 "try to lock fail, connId=%{public}u, err=%{public}d", connection->connectionId, ret);741 "try to lock fail, connId=%{public}u, err=%{public}d", connection->connectionId, ret);
@@ -777,6 +787,7 @@ void BleOnClientConnected(uint32_t connectionId)
777{787{
778 ConnBleConnection *connection = ConnBleGetConnectionById(connectionId);788 ConnBleConnection *connection = ConnBleGetConnectionById(connectionId);
779 CONN_CHECK_AND_RETURN_LOGW(connection != NULL, CONN_BLE, "connection not exist, connId=%{public}u", connectionId);789 CONN_CHECK_AND_RETURN_LOGW(connection != NULL, CONN_BLE, "connection not exist, connId=%{public}u", connectionId);
790+ connection->isUnknownDevice = IsUnknownDevicePacked(connection->addr);
780 int32_t status = SOFTBUS_OK;791 int32_t status = SOFTBUS_OK;
781 do {792 do {
782 status = SoftBusMutexLock(&connection->lock);793 status = SoftBusMutexLock(&connection->lock);
@@ -319,6 +319,10 @@ static int32_t BleConvert2ConnectionInfo(ConnBleConnection *connection, Connecti
319 return SOFTBUS_OK;319 return SOFTBUS_OK;
320 }320 }
321 }321 }
322+ if (connection->isUnknownDevice) {
323+ CONN_LOGI(CONN_BLE, "is thirdParty device not exchange udid");
324+ return SOFTBUS_OK;
Marion
MarionMarion2025年9月17日

添加日志,三方设备不交换UDID

likedislike
325+ }
322 status = SoftBusGenerateStrHash(326 status = SoftBusGenerateStrHash(
323 (unsigned char *)connection->udid, strlen(connection->udid), (unsigned char *)info->bleInfo.deviceIdHash);327 (unsigned char *)connection->udid, strlen(connection->udid), (unsigned char *)info->bleInfo.deviceIdHash);
324 CONN_CHECK_AND_RETURN_RET_LOGE(status == SOFTBUS_OK, status, CONN_BLE,328 CONN_CHECK_AND_RETURN_RET_LOGE(status == SOFTBUS_OK, status, CONN_BLE,
@@ -2483,7 +2483,7 @@ static void DiscBleFillSingleFilter(BcScanFilter *filter, DiscBleFilterOption *f
2483 DISC_CHECK_AND_RETURN_LOGE(filter != NULL, DISC_BLE, "filter is nullptr");2483 DISC_CHECK_AND_RETURN_LOGE(filter != NULL, DISC_BLE, "filter is nullptr");
2484 DISC_CHECK_AND_RETURN_LOGE(filterOption != NULL, DISC_BLE, "filterOption is nullptr");2484 DISC_CHECK_AND_RETURN_LOGE(filterOption != NULL, DISC_BLE, "filterOption is nullptr");
2485 2485 
2486- filter->serviceUuid = SERVICE_UUID;2486+ filter->serviceId = SERVICE_UUID;
2487 filter->serviceDataLength = BLE_SCAN_FILTER_LEN;2487 filter->serviceDataLength = BLE_SCAN_FILTER_LEN;
2488 filter->serviceData[POS_VERSION] = 0x0;2488 filter->serviceData[POS_VERSION] = 0x0;
2489 filter->serviceData[POS_BUSINESS] = DISTRIBUTE_BUSINESS;2489 filter->serviceData[POS_BUSINESS] = DISTRIBUTE_BUSINESS;
@@ -92,6 +92,7 @@ typedef bool (*DistActionProcessConPacketFunc)(DeviceWrapper *wrapperDevice, con
92 92 
93typedef int32_t (*DistActionInitFunc)(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb);93typedef int32_t (*DistActionInitFunc)(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb);
94typedef void (*DistActionDeinitFunc)(void);94typedef void (*DistActionDeinitFunc)(void);
95+typedef bool (*IsUnknownDeviceFunc)(const char *bleMacStr);
95 96 
96typedef struct TagDiscEnhanceFuncList {97typedef struct TagDiscEnhanceFuncList {
97 DiscTouchBleInitFunc discTouchBleInit;98 DiscTouchBleInitFunc discTouchBleInit;
@@ -151,6 +152,7 @@ typedef struct TagDiscEnhanceFuncList {
151 DistActionProcessConPacketFunc distActionProcessConPacket;152 DistActionProcessConPacketFunc distActionProcessConPacket;
152 DistActionInitFunc distActionInit;153 DistActionInitFunc distActionInit;
153 DistActionDeinitFunc distActionDeinit;154 DistActionDeinitFunc distActionDeinit;
155+ IsUnknownDeviceFunc isUnknownDevice;
154} DiscEnhanceFuncList;156} DiscEnhanceFuncList;
155 157 
156DiscEnhanceFuncList *DiscEnhanceFuncListGet(void);158DiscEnhanceFuncList *DiscEnhanceFuncListGet(void);
@@ -93,6 +93,7 @@ void DistGetActionParamPacked(DiscActionParam *action);
93bool DistActionProcessConPacketPacked(DeviceWrapper *wrapperDevice, const uint8_t *key, uint32_t len);93bool DistActionProcessConPacketPacked(DeviceWrapper *wrapperDevice, const uint8_t *key, uint32_t len);
94int32_t DistActionInitPacked(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb);94int32_t DistActionInitPacked(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb);
95void DistActionDeinitPacked(void);95void DistActionDeinitPacked(void);
96+bool IsUnknownDevicePacked(const char *bleMacAddr);
96#ifdef __cplusplus97#ifdef __cplusplus
97}98}
98#endif99#endif
@@ -92,7 +92,7 @@ int32_t DiscRegisterEnhanceFunc(void *soHandle)
92 g_discEnhanceFuncList.distActionProcessConPacket = dlsym(soHandle, "DistActionProcessConPacket");92 g_discEnhanceFuncList.distActionProcessConPacket = dlsym(soHandle, "DistActionProcessConPacket");
93 g_discEnhanceFuncList.distActionInit = dlsym(soHandle, "DistActionInit");93 g_discEnhanceFuncList.distActionInit = dlsym(soHandle, "DistActionInit");
94 g_discEnhanceFuncList.distActionDeinit = dlsym(soHandle, "DistActionDeinit");94 g_discEnhanceFuncList.distActionDeinit = dlsym(soHandle, "DistActionDeinit");
95- 95+ g_discEnhanceFuncList.isUnknownDevice = dlsym(soHandle, "IsUnknownDevice");
96 (void)DiscFeatureRegisterEnhanceFunc(soHandle);96 (void)DiscFeatureRegisterEnhanceFunc(soHandle);
97 return SOFTBUS_OK;97 return SOFTBUS_OK;
98}98}
@@ -861,3 +861,12 @@ void DistActionDeinitPacked(void)
861 DISC_CHECK_AND_RETURN_LOGD(ret == SOFTBUS_OK, DISC_BLE, "not find DistActionDeinit");861 DISC_CHECK_AND_RETURN_LOGD(ret == SOFTBUS_OK, DISC_BLE, "not find DistActionDeinit");
862 return pfnDiscEnhanceFuncList->distActionDeinit();862 return pfnDiscEnhanceFuncList->distActionDeinit();
863}863}
864+ 
865+bool IsUnknownDevicePacked(const char *bleMacAddr)
866+{
867+ DiscEnhanceFuncList *pfnDiscEnhanceFuncList = DiscEnhanceFuncListGet();
868+ 
869+ int32_t ret = DiscCheckFuncPointer((void *)pfnDiscEnhanceFuncList->isUnknownDevice(bleMacAddr));
870+ DISC_CHECK_AND_RETURN_RET_LOGD(ret == SOFTBUS_OK, false, DISC_BLE, "not find isUnknownDevice");
871+ return pfnDiscEnhanceFuncList->isUnknownDevice(bleMacAddr);
872+}
@@ -121,6 +121,7 @@ typedef struct {
121 uint8_t addrType;121 uint8_t addrType;
122 SoftbusMacAddr addr;122 SoftbusMacAddr addr;
123 uint8_t localName[SOFTBUS_LOCAL_NAME_LEN_MAX];123 uint8_t localName[SOFTBUS_LOCAL_NAME_LEN_MAX];
124+ bool nameTruncated;
124 int8_t *deviceName;125 int8_t *deviceName;
125 SoftbusBroadcastData data;126 SoftbusBroadcastData data;
126} SoftBusBcScanResult;127} SoftBusBcScanResult;
@@ -172,7 +173,7 @@ typedef struct {
172 */173 */
173typedef struct {174typedef struct {
174 bool advIndReport;175 bool advIndReport;
175- uint16_t serviceUuid;176+ uint16_t serviceId;
176 uint32_t serviceDataLength;177 uint32_t serviceDataLength;
177 uint16_t manufactureId;178 uint16_t manufactureId;
178 uint32_t manufactureDataLength;179 uint32_t manufactureDataLength;
@@ -182,6 +183,16 @@ typedef struct {
182 uint8_t *serviceDataMask;183 uint8_t *serviceDataMask;
183 uint8_t *manufactureData;184 uint8_t *manufactureData;
184 uint8_t *manufactureDataMask;185 uint8_t *manufactureDataMask;
186+
187+ uint16_t serviceUuidId;
188+ uint8_t *serviceUuidData;
189+ uint8_t *serviceUuidDataMask;
190+ uint32_t serviceUuidDataLength;
191+ 
192+ uint8_t *serviceUuid;
193+ uint8_t *serviceUuidMask;
194+ uint32_t serviceUuidLength;
195+ 
185 uint8_t filterIndex;196 uint8_t filterIndex;
186} SoftBusBcScanFilter;197} SoftBusBcScanFilter;
187 198 
@@ -334,6 +334,7 @@ typedef enum {
334typedef enum {334typedef enum {
335 BC_DATA_TYPE_SERVICE, // The broadcast data type is service data.335 BC_DATA_TYPE_SERVICE, // The broadcast data type is service data.
336 BC_DATA_TYPE_MANUFACTURER, // The broadcast data type is manufacturer data.336 BC_DATA_TYPE_MANUFACTURER, // The broadcast data type is manufacturer data.
337+ BC_DATA_TYPE_SERVICE_UUID, // The broadcast data type is service uuid.
337 BC_DATA_TYPE_BUTT,338 BC_DATA_TYPE_BUTT,
338} BroadcastDataType;339} BroadcastDataType;
339 340 
@@ -403,6 +404,7 @@ typedef struct {
403 uint8_t localName[BC_LOCAL_NAME_LEN_MAX];404 uint8_t localName[BC_LOCAL_NAME_LEN_MAX];
404 BcMacAddr addr;405 BcMacAddr addr;
405 int8_t *deviceName;406 int8_t *deviceName;
407+ bool nameTruncated;
406 BroadcastPacket packet;408 BroadcastPacket packet;
407} BroadcastReportInfo;409} BroadcastReportInfo;
408 410 
@@ -439,7 +441,7 @@ typedef struct {
439 */441 */
440typedef struct {442typedef struct {
441 bool advIndReport;443 bool advIndReport;
442- uint16_t serviceUuid;444+ uint16_t serviceId;
443 uint32_t serviceDataLength;445 uint32_t serviceDataLength;
444 uint16_t manufactureId;446 uint16_t manufactureId;
445 uint32_t manufactureDataLength;447 uint32_t manufactureDataLength;
@@ -449,6 +451,15 @@ typedef struct {
449 uint8_t *serviceDataMask;451 uint8_t *serviceDataMask;
450 uint8_t *manufactureData;452 uint8_t *manufactureData;
451 uint8_t *manufactureDataMask;453 uint8_t *manufactureDataMask;
454+ 
455+ uint16_t serviceUuidId;
456+ uint8_t *serviceUuidData;
457+ uint8_t *serviceUuidDataMask;
458+ uint32_t serviceUuidDataLength;
459+ 
460+ uint8_t *serviceUuid;
461+ uint8_t *serviceUuidMask;
462+ uint32_t serviceUuidLength;
452 uint8_t filterIndex;463 uint8_t filterIndex;
453} BcScanFilter;464} BcScanFilter;
454 465 
@@ -65,6 +65,7 @@ extern "C"{
65#define LOCAL_NAME_BC_TYPE 0x0965#define LOCAL_NAME_BC_TYPE 0x09
66#define SERVICE_BC_TYPE 0x1666#define SERVICE_BC_TYPE 0x16
67#define MANUFACTURE_BC_TYPE 0xFF67#define MANUFACTURE_BC_TYPE 0xFF
68+#define SERVICEUUID_BC_TYPE 0x03
68 69 
69// scan rsp head70// scan rsp head
70#define RSP_HEAD_LEN 471#define RSP_HEAD_LEN 4
@@ -129,6 +129,8 @@ typedef struct {
129 129 
130 bool isNeedSetIdleTimeout;130 bool isNeedSetIdleTimeout;
131 bool isOccupied;131 bool isOccupied;
132+ 
133+ bool isUnknownDevice;
132} ConnBleConnection;134} ConnBleConnection;
133 135 
134typedef struct {136typedef struct {
@@ -198,7 +198,7 @@ static BcScanFilter *GetBcScanFilter(void)
198 goto EXIT;198 goto EXIT;
199 }199 }
200 200 
201- filter->serviceUuid = SERVICE_UUID;201+ filter->serviceId = SERVICE_UUID;
202 filter->serviceData = data;202 filter->serviceData = data;
203 filter->serviceDataMask = mask;203 filter->serviceDataMask = mask;
204 filter->serviceDataLength = serviceDataLength;204 filter->serviceDataLength = serviceDataLength;
@@ -850,7 +850,7 @@ HWTEST_F(SoftbusBleGattTest, SoftbusStartScan002, TestSize.Level1)
850 SoftBusBcScanFilter softBusBcScanFilter = {};850 SoftBusBcScanFilter softBusBcScanFilter = {};
851 softBusBcScanFilter.address = (int8_t *)"address";851 softBusBcScanFilter.address = (int8_t *)"address";
852 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";852 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";
853- softBusBcScanFilter.serviceUuid = 1;853+ softBusBcScanFilter.serviceId = 1;
854 softBusBcScanFilter.serviceDataLength = 1;854 softBusBcScanFilter.serviceDataLength = 1;
855 softBusBcScanFilter.manufactureId = 1;855 softBusBcScanFilter.manufactureId = 1;
856 softBusBcScanFilter.manufactureDataLength = 1;856 softBusBcScanFilter.manufactureDataLength = 1;
@@ -883,7 +883,7 @@ HWTEST_F(SoftbusBleGattTest, SoftbusStartScan003, TestSize.Level1)
883 SoftBusBcScanFilter softBusBcScanFilter = {};883 SoftBusBcScanFilter softBusBcScanFilter = {};
884 softBusBcScanFilter.address = (int8_t *)"address";884 softBusBcScanFilter.address = (int8_t *)"address";
885 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";885 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";
886- softBusBcScanFilter.serviceUuid = 1;886+ softBusBcScanFilter.serviceId = 1;
887 softBusBcScanFilter.serviceDataLength = 1;887 softBusBcScanFilter.serviceDataLength = 1;
888 softBusBcScanFilter.manufactureId = 1;888 softBusBcScanFilter.manufactureId = 1;
889 softBusBcScanFilter.manufactureDataLength = 1;889 softBusBcScanFilter.manufactureDataLength = 1;
@@ -301,7 +301,7 @@ HWTEST(SoftbusBleUtilsTest, SoftbusFilterToBt001, TestSize.Level3)
301 SoftBusBcScanFilter softBusBcScanFilter = {};301 SoftBusBcScanFilter softBusBcScanFilter = {};
302 softBusBcScanFilter.address = (int8_t *)"address";302 softBusBcScanFilter.address = (int8_t *)"address";
303 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";303 softBusBcScanFilter.deviceName = (int8_t *)"deviceName";
304- softBusBcScanFilter.serviceUuid = 1;304+ softBusBcScanFilter.serviceId = 1;
305 softBusBcScanFilter.serviceDataLength = 1;305 softBusBcScanFilter.serviceDataLength = 1;
306 softBusBcScanFilter.manufactureId = 1;306 softBusBcScanFilter.manufactureId = 1;
307 softBusBcScanFilter.manufactureDataLength = 1;307 softBusBcScanFilter.manufactureDataLength = 1;
@@ -191,7 +191,7 @@ static BcScanFilter BuildScanFilter()
191 g_baseFuzzPos = 0;191 g_baseFuzzPos = 0;
192 BcScanFilter scanFilter;192 BcScanFilter scanFilter;
193 scanFilter.advIndReport = GetData<bool>();193 scanFilter.advIndReport = GetData<bool>();
194- scanFilter.serviceUuid = GetData<uint16_t>();194+ scanFilter.serviceId = GetData<uint16_t>();
195 scanFilter.serviceDataLength = GetData<uint32_t>();195 scanFilter.serviceDataLength = GetData<uint32_t>();
196 scanFilter.manufactureId = GetData<uint16_t>();196 scanFilter.manufactureId = GetData<uint16_t>();
197 scanFilter.manufactureDataLength = GetData<uint32_t>();197 scanFilter.manufactureDataLength = GetData<uint32_t>();
@@ -127,6 +127,10 @@ ohos_unittest("BleConnectionManagerTest") {
127 "$dsoftbus_root_path/adapter/default_config/spec_config",127 "$dsoftbus_root_path/adapter/default_config/spec_config",
128 "$dsoftbus_root_path/core/frame/common/include",128 "$dsoftbus_root_path/core/frame/common/include",
129 "$dsoftbus_root_path/core/connection/proxy",129 "$dsoftbus_root_path/core/connection/proxy",
130+ "$dsoftbus_root_path/core/discovery/ble/dispatcher/include",
131+ "$dsoftbus_root_path/core/discovery/usb/dispatcher/include",
132+ "$dsoftbus_root_path/components/nstackx/nstackx_ctrl/interface",
133+ "$dsoftbus_root_path/adapter/common/net/bluetooth/broadcast/interface",
130 ]134 ]
131 public_configs = [ ":softbus_connection_ble_test_config" ]135 public_configs = [ ":softbus_connection_ble_test_config" ]
132 sources = [136 sources = [
@@ -221,6 +225,10 @@ ohos_unittest("BleClientTest") {
221 "$dsoftbus_root_path/interfaces/kits/connect",225 "$dsoftbus_root_path/interfaces/kits/connect",
222 "$dsoftbus_root_path/interfaces/kits/disc",226 "$dsoftbus_root_path/interfaces/kits/disc",
223 "$dsoftbus_root_path/interfaces/kits/adapter",227 "$dsoftbus_root_path/interfaces/kits/adapter",
228+ "$dsoftbus_root_path/core/discovery/ble/dispatcher/include",
229+ "$dsoftbus_root_path/core/discovery/usb/dispatcher/include",
230+ "$dsoftbus_root_path/components/nstackx/nstackx_ctrl/interface",
231+ "$dsoftbus_root_path/adapter/common/net/bluetooth/broadcast/interface",
224 ]232 ]
225 sources = [233 sources = [
226 "$dsoftbus_root_path/core/connection/ble/src/ble_protocol_interface_factory.c",234 "$dsoftbus_root_path/core/connection/ble/src/ble_protocol_interface_factory.c",
@@ -232,6 +240,8 @@ ohos_unittest("BleClientTest") {
232 "./mock/softbus_conn_ble_client_mock.cpp",240 "./mock/softbus_conn_ble_client_mock.cpp",
233 "softbus_conn_client_test.cpp",241 "softbus_conn_client_test.cpp",
234 "$dsoftbus_root_path/core/frame/init/src/g_enhance_conn_func_pack.c",242 "$dsoftbus_root_path/core/frame/init/src/g_enhance_conn_func_pack.c",
243+ "$dsoftbus_root_path/core/frame/init/src/g_enhance_disc_func_pack.c",
244+ "$dsoftbus_root_path/core/frame/init/src/g_enhance_disc_func.c",
235 ]245 ]
236 246 
237 deps = [247 deps = [
@@ -273,6 +283,10 @@ ohos_unittest("BleHidumperTest") {
273 "$dsoftbus_root_path/core/frame/init/include",283 "$dsoftbus_root_path/core/frame/init/include",
274 "$dsoftbus_root_path/core/frame/common/include",284 "$dsoftbus_root_path/core/frame/common/include",
275 "$dsoftbus_root_path/core/connection/proxy",285 "$dsoftbus_root_path/core/connection/proxy",
286+ "$dsoftbus_root_path/core/discovery/ble/dispatcher/include",
287+ "$dsoftbus_root_path/core/discovery/usb/dispatcher/include",
288+ "$dsoftbus_root_path/components/nstackx/nstackx_ctrl/interface",
289+ "$dsoftbus_root_path/adapter/common/net/bluetooth/broadcast/interface",
276 ]290 ]
277 291 
278 public_configs = [ ":softbus_connection_ble_test_config" ]292 public_configs = [ ":softbus_connection_ble_test_config" ]