已合并
ble connection supprt third party device #10916
wangJE创建于 2025年9月16日
ble connection supprt third party device #10916
已合并
共 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 + serviceDataMask | 264 | // 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 | |||
| 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 | + | ||
| 775 | static bool CheckScanResultDataIsMatch(const uint32_t managerId, BroadcastPayload *bcData) | 801 | static 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 | + | ||
| 1364 | static int32_t CopyScanFilterServiceInfo(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter) | 1412 | static 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 | + | ||
| 1388 | static int32_t CopySoftBusBcScanFilter(const BcScanFilter *srcFilter, SoftBusBcScanFilter *dstFilter) | 1464 | static 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 | ||
| 38 | enum ConnectionLoopMsgType { | 40 | enum 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 fields | 705 | // 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; | ||
添加日志,三方设备不交换UDID ![]() ![]() | |||
| 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 | ||
| 93 | typedef int32_t (*DistActionInitFunc)(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb); | 93 | typedef int32_t (*DistActionInitFunc)(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb); |
| 94 | typedef void (*DistActionDeinitFunc)(void); | 94 | typedef void (*DistActionDeinitFunc)(void); |
| 95 | +typedef bool (*IsUnknownDeviceFunc)(const char *bleMacStr); | ||
| 95 | 96 | ||
| 96 | typedef struct TagDiscEnhanceFuncList { | 97 | typedef 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 | ||
| 156 | DiscEnhanceFuncList *DiscEnhanceFuncListGet(void); | 158 | DiscEnhanceFuncList *DiscEnhanceFuncListGet(void); |
| @@ -93,6 +93,7 @@ void DistGetActionParamPacked(DiscActionParam *action); | |||
| 93 | bool DistActionProcessConPacketPacked(DeviceWrapper *wrapperDevice, const uint8_t *key, uint32_t len); | 93 | bool DistActionProcessConPacketPacked(DeviceWrapper *wrapperDevice, const uint8_t *key, uint32_t len); |
| 94 | int32_t DistActionInitPacked(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb); | 94 | int32_t DistActionInitPacked(DiscActionUpdateBleCallback *updateAdvCb, DiscInnerCallback *innerCb); |
| 95 | void DistActionDeinitPacked(void); | 95 | void DistActionDeinitPacked(void); |
| 96 | +bool IsUnknownDevicePacked(const char *bleMacAddr); | ||
| 96 | #ifdef __cplusplus | 97 | #ifdef __cplusplus |
| 97 | } | 98 | } |
| 98 | #endif | 99 | #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 | */ |
| 173 | typedef struct { | 174 | typedef 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 { | |||
| 334 | typedef enum { | 334 | typedef 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 | */ |
| 440 | typedef struct { | 442 | typedef 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 0x09 | 65 | #define LOCAL_NAME_BC_TYPE 0x09 |
| 66 | #define SERVICE_BC_TYPE 0x16 | 66 | #define SERVICE_BC_TYPE 0x16 |
| 67 | #define MANUFACTURE_BC_TYPE 0xFF | 67 | #define MANUFACTURE_BC_TYPE 0xFF |
| 68 | +#define SERVICEUUID_BC_TYPE 0x03 | ||
| 68 | 69 | ||
| 69 | // scan rsp head | 70 | // scan rsp head |
| 70 | #define RSP_HEAD_LEN 4 | 71 | #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 | ||
| 134 | typedef struct { | 136 | typedef 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" ] |


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