Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1921abfb authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes If5e43c97,Ic2f97949

* changes:
  Enable le scanner manager test
  Add support for APCF Generic AD Type and RSI AD Type Filter
parents 0eca2b96 447f3969
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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");

@@ -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) {
+15 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
    }
@@ -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;
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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",
    ],
}

+13 −0
Original line number Diff line number Diff line
@@ -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
@@ -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) {
@@ -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