Loading android/app/jni/com_android_bluetooth_gatt.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1587,6 +1587,7 @@ static void gattClientScanFilterAddNative(JNIEnv* env, jobject object, jfieldID nameFid = env->GetFieldID(entryClazz, "name", "Ljava/lang/String;"); jfieldID companyFid = env->GetFieldID(entryClazz, "company", "I"); jfieldID companyMaskFid = env->GetFieldID(entryClazz, "company_mask", "I"); jfieldID adTypeFid = env->GetFieldID(entryClazz, "ad_type", "I"); jfieldID dataFid = env->GetFieldID(entryClazz, "data", "[B"); jfieldID dataMaskFid = env->GetFieldID(entryClazz, "data_mask", "[B"); Loading Loading @@ -1657,6 +1658,8 @@ static void gattClientScanFilterAddNative(JNIEnv* env, jobject object, curr.company_mask = env->GetIntField(current.get(), companyMaskFid); curr.ad_type = env->GetByteField(current.get(), adTypeFid); ScopedLocalRef<jbyteArray> data( env, (jbyteArray)env->GetObjectField(current.get(), dataFid)); if (data.get() != NULL) { Loading android/app/src/com/android/bluetooth/gatt/ScanFilterQueue.java +15 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import java.util.UUID; public static final int TYPE_LOCAL_NAME = 4; public static final int TYPE_MANUFACTURER_DATA = 5; public static final int TYPE_SERVICE_DATA = 6; public static final int TYPE_ADVERTISING_DATA_TYPE = 7; // Max length is 31 - 3(flags) - 2 (one byte for length and one byte for type). private static final int MAX_LEN_PER_FIELD = 26; Loading @@ -56,6 +57,7 @@ import java.util.UUID; public String name; public int company; public int company_mask; public int ad_type; public byte[] data; public byte[] data_mask; } Loading Loading @@ -145,6 +147,15 @@ import java.util.UUID; mEntries.add(entry); } void addAdvertisingDataType(int adType, byte[] data, byte[] dataMask) { Entry entry = new Entry(); entry.type = TYPE_ADVERTISING_DATA_TYPE; entry.ad_type = adType; entry.data = data; entry.data_mask = dataMask; mEntries.add(entry); } Entry pop() { if (mEntries.isEmpty()) { return null; Loading Loading @@ -226,6 +237,10 @@ import java.util.UUID; addServiceData(serviceData, serviceDataMask); } } if (filter.getAdvertisingDataType() > 0) { addAdvertisingDataType(filter.getAdvertisingDataType(), filter.getAdvertisingData(), filter.getAdvertisingDataMask()); } } private byte[] concate(ParcelUuid serviceDataUuid, byte[] serviceData) { Loading system/bta/csis/csis_client.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1171,7 +1171,7 @@ class CsisClientImpl : public CsisClient { void CsisActiveObserverSet(bool enable) { LOG(INFO) << __func__ << " CSIS Discovery SET: " << enable; bluetooth::shim::set_empty_filter(enable); bluetooth::shim::set_ad_type_rsi_filter(enable); BTA_DmBleCsisObserve( enable, [](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) { /* If there's no instance we are most likely shutting Loading system/gd/hci/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ filegroup { "controller_unittest.cc", "hci_packets_test.cc", "uuid_unittest.cc", "le_periodic_sync_manager_test.cc" "le_periodic_sync_manager_test.cc", "le_scanning_manager_test.cc", ], } Loading system/gd/hci/hci_packets.pdl +13 −0 Original line number Diff line number Diff line Loading @@ -4827,6 +4827,7 @@ enum ApcfOpcode : 8 { LOCAL_NAME = 0x05, MANUFACTURER_DATA = 0x06, SERVICE_DATA = 0x07, AD_TYPE = 0x08, } // https://source.android.com/devices/bluetooth/hci_requirements#advertising-packet-content-filter Loading Loading @@ -4870,6 +4871,7 @@ enum ApcfFilterType : 8 { LOCAL_NAME = 0x04, MANUFACTURER_DATA = 0x05, SERVICE_DATA = 0x06, AD_TYPE = 0x07, } packet LeAdvFilterSetFilteringParameters : LeAdvFilter (apcf_opcode = SET_FILTERING_PARAMETERS) { Loading Loading @@ -4982,6 +4984,17 @@ packet LeAdvFilterServiceDataComplete : LeAdvFilterComplete (apcf_opcode = SERVI apcf_available_spaces : 8, } packet LeAdvFilterADType : LeAdvFilter (apcf_opcode = AD_TYPE) { apcf_action : ApcfAction, apcf_filter_index : 8, apcf_ad_type_data : 8[], } packet LeAdvFilterADTypeComplete : LeAdvFilterComplete (apcf_opcode = AD_TYPE) { apcf_action : ApcfAction, apcf_available_spaces : 8, } packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { } Loading Loading
android/app/jni/com_android_bluetooth_gatt.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1587,6 +1587,7 @@ static void gattClientScanFilterAddNative(JNIEnv* env, jobject object, jfieldID nameFid = env->GetFieldID(entryClazz, "name", "Ljava/lang/String;"); jfieldID companyFid = env->GetFieldID(entryClazz, "company", "I"); jfieldID companyMaskFid = env->GetFieldID(entryClazz, "company_mask", "I"); jfieldID adTypeFid = env->GetFieldID(entryClazz, "ad_type", "I"); jfieldID dataFid = env->GetFieldID(entryClazz, "data", "[B"); jfieldID dataMaskFid = env->GetFieldID(entryClazz, "data_mask", "[B"); Loading Loading @@ -1657,6 +1658,8 @@ static void gattClientScanFilterAddNative(JNIEnv* env, jobject object, curr.company_mask = env->GetIntField(current.get(), companyMaskFid); curr.ad_type = env->GetByteField(current.get(), adTypeFid); ScopedLocalRef<jbyteArray> data( env, (jbyteArray)env->GetObjectField(current.get(), dataFid)); if (data.get() != NULL) { Loading
android/app/src/com/android/bluetooth/gatt/ScanFilterQueue.java +15 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import java.util.UUID; public static final int TYPE_LOCAL_NAME = 4; public static final int TYPE_MANUFACTURER_DATA = 5; public static final int TYPE_SERVICE_DATA = 6; public static final int TYPE_ADVERTISING_DATA_TYPE = 7; // Max length is 31 - 3(flags) - 2 (one byte for length and one byte for type). private static final int MAX_LEN_PER_FIELD = 26; Loading @@ -56,6 +57,7 @@ import java.util.UUID; public String name; public int company; public int company_mask; public int ad_type; public byte[] data; public byte[] data_mask; } Loading Loading @@ -145,6 +147,15 @@ import java.util.UUID; mEntries.add(entry); } void addAdvertisingDataType(int adType, byte[] data, byte[] dataMask) { Entry entry = new Entry(); entry.type = TYPE_ADVERTISING_DATA_TYPE; entry.ad_type = adType; entry.data = data; entry.data_mask = dataMask; mEntries.add(entry); } Entry pop() { if (mEntries.isEmpty()) { return null; Loading Loading @@ -226,6 +237,10 @@ import java.util.UUID; addServiceData(serviceData, serviceDataMask); } } if (filter.getAdvertisingDataType() > 0) { addAdvertisingDataType(filter.getAdvertisingDataType(), filter.getAdvertisingData(), filter.getAdvertisingDataMask()); } } private byte[] concate(ParcelUuid serviceDataUuid, byte[] serviceData) { Loading
system/bta/csis/csis_client.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1171,7 +1171,7 @@ class CsisClientImpl : public CsisClient { void CsisActiveObserverSet(bool enable) { LOG(INFO) << __func__ << " CSIS Discovery SET: " << enable; bluetooth::shim::set_empty_filter(enable); bluetooth::shim::set_ad_type_rsi_filter(enable); BTA_DmBleCsisObserve( enable, [](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) { /* If there's no instance we are most likely shutting Loading
system/gd/hci/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ filegroup { "controller_unittest.cc", "hci_packets_test.cc", "uuid_unittest.cc", "le_periodic_sync_manager_test.cc" "le_periodic_sync_manager_test.cc", "le_scanning_manager_test.cc", ], } Loading
system/gd/hci/hci_packets.pdl +13 −0 Original line number Diff line number Diff line Loading @@ -4827,6 +4827,7 @@ enum ApcfOpcode : 8 { LOCAL_NAME = 0x05, MANUFACTURER_DATA = 0x06, SERVICE_DATA = 0x07, AD_TYPE = 0x08, } // https://source.android.com/devices/bluetooth/hci_requirements#advertising-packet-content-filter Loading Loading @@ -4870,6 +4871,7 @@ enum ApcfFilterType : 8 { LOCAL_NAME = 0x04, MANUFACTURER_DATA = 0x05, SERVICE_DATA = 0x06, AD_TYPE = 0x07, } packet LeAdvFilterSetFilteringParameters : LeAdvFilter (apcf_opcode = SET_FILTERING_PARAMETERS) { Loading Loading @@ -4982,6 +4984,17 @@ packet LeAdvFilterServiceDataComplete : LeAdvFilterComplete (apcf_opcode = SERVI apcf_available_spaces : 8, } packet LeAdvFilterADType : LeAdvFilter (apcf_opcode = AD_TYPE) { apcf_action : ApcfAction, apcf_filter_index : 8, apcf_ad_type_data : 8[], } packet LeAdvFilterADTypeComplete : LeAdvFilterComplete (apcf_opcode = AD_TYPE) { apcf_action : ApcfAction, apcf_available_spaces : 8, } packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { } Loading