diff options
-rw-r--r-- | jni/com_android_bluetooth_gatt.cpp | 117 | ||||
-rw-r--r-- | src/com/android/bluetooth/btservice/AdapterProperties.java | 24 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo.java | 1 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/FilterParams.java | 1 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/GattService.java | 29 | ||||
-rw-r--r-- | src/com/android/bluetooth/gatt/ScanManager.java | 24 |
6 files changed, 147 insertions, 49 deletions
diff --git a/jni/com_android_bluetooth_gatt.cpp b/jni/com_android_bluetooth_gatt.cpp index 02a0669bf..5b6fa819e 100644 --- a/jni/com_android_bluetooth_gatt.cpp +++ b/jni/com_android_bluetooth_gatt.cpp @@ -171,8 +171,11 @@ static jmethodID method_onBatchScanStorageConfigured; static jmethodID method_onBatchScanStartStopped; static jmethodID method_onBatchScanReports; static jmethodID method_onBatchScanThresholdCrossed; + +static jmethodID method_CreateonTrackAdvFoundLostObject; static jmethodID method_onTrackAdvFoundLost; + /** * Server callback methods */ @@ -549,18 +552,42 @@ void btgattc_batchscan_threshold_cb(int client_if) checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } -void btgattc_track_adv_event_cb(int client_if, int filt_index, int addr_type, - bt_bdaddr_t* bda, int adv_state) +void btgattc_track_adv_event_cb(btgatt_track_adv_info_t *p_adv_track_info) { CHECK_CALLBACK_ENV char c_address[32]; + jobject trackadv_obj = NULL; + snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", - bda->address[0], bda->address[1], bda->address[2], - bda->address[3], bda->address[4], bda->address[5]); + p_adv_track_info->bd_addr.address[0], p_adv_track_info->bd_addr.address[1], + p_adv_track_info->bd_addr.address[2], p_adv_track_info->bd_addr.address[3], + p_adv_track_info->bd_addr.address[4], p_adv_track_info->bd_addr.address[5]); + jstring address = sCallbackEnv->NewStringUTF(c_address); - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost, - filt_index, addr_type, address, adv_state, client_if); + + jbyteArray jb_adv_pkt = sCallbackEnv->NewByteArray(p_adv_track_info->adv_pkt_len); + jbyteArray jb_scan_rsp = sCallbackEnv->NewByteArray(p_adv_track_info->scan_rsp_len); + + sCallbackEnv->SetByteArrayRegion(jb_adv_pkt, 0, p_adv_track_info->adv_pkt_len, + (jbyte *) p_adv_track_info->p_adv_pkt_data); + + sCallbackEnv->SetByteArrayRegion(jb_scan_rsp, 0, p_adv_track_info->scan_rsp_len, + (jbyte *) p_adv_track_info->p_scan_rsp_data); + + trackadv_obj = sCallbackEnv->CallObjectMethod(mCallbacksObj, method_CreateonTrackAdvFoundLostObject, + p_adv_track_info->client_if, p_adv_track_info->adv_pkt_len, jb_adv_pkt, + p_adv_track_info->scan_rsp_len, jb_scan_rsp, p_adv_track_info->filt_index, + p_adv_track_info->advertiser_state, p_adv_track_info->advertiser_info_present, + address, p_adv_track_info->addr_type, p_adv_track_info->tx_power, + p_adv_track_info->rssi_value, p_adv_track_info->time_stamp); + + if (NULL != trackadv_obj) + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost, trackadv_obj); + sCallbackEnv->DeleteLocalRef(address); + sCallbackEnv->DeleteLocalRef(jb_adv_pkt); + sCallbackEnv->DeleteLocalRef(jb_scan_rsp); + checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } @@ -849,9 +876,11 @@ static void classInitNative(JNIEnv* env, jclass clazz) { method_onBatchScanStartStopped = env->GetMethodID(clazz, "onBatchScanStartStopped", "(III)V"); method_onBatchScanReports = env->GetMethodID(clazz, "onBatchScanReports", "(IIII[B)V"); method_onBatchScanThresholdCrossed = env->GetMethodID(clazz, "onBatchScanThresholdCrossed", "(I)V"); - method_onTrackAdvFoundLost = env->GetMethodID(clazz, "onTrackAdvFoundLost", "(IILjava/lang/String;II)V"); + method_CreateonTrackAdvFoundLostObject = env->GetMethodID(clazz, "CreateonTrackAdvFoundLostObject", "(II[BI[BIIILjava/lang/String;IIII)Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;"); + method_onTrackAdvFoundLost = env->GetMethodID(clazz, "onTrackAdvFoundLost", + "(Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;)V"); - // Server callbacks + // Server callbacks method_onServerRegistered = env->GetMethodID(clazz, "onServerRegistered", "(IIJJ)V"); method_onClientConnected = env->GetMethodID(clazz, "onClientConnected", "(Ljava/lang/String;ZII)V"); @@ -1285,18 +1314,55 @@ static void gattSetScanParametersNative(JNIEnv* env, jobject object, sGattIf->client->set_scan_parameters(scan_interval_unit, scan_window_unit); } -static void gattClientScanFilterParamAddNative(JNIEnv* env, jobject object, - jint client_if, jint filt_index, - jint feat_seln, jint list_logic_type, jint filt_logic_type, - jint rssi_high_thres, jint rssi_low_thres, - jint dely_mode, jint found_timeout, jint lost_timeout, jint found_timeout_cnt) +static void gattClientScanFilterParamAddNative(JNIEnv* env, jobject object, jobject params) { if (!sGattIf) return; const int add_scan_filter_params_action = 0; - sGattIf->client->scan_filter_param_setup(client_if, add_scan_filter_params_action, filt_index, - feat_seln, list_logic_type, filt_logic_type, - rssi_high_thres, rssi_low_thres, - dely_mode, found_timeout, lost_timeout, found_timeout_cnt); + btgatt_filt_param_setup_t filt_params; + + jmethodID methodId = 0; + jclass filtparam = env->GetObjectClass(params); + + methodId = env->GetMethodID(filtparam, "getClientIf", "()I"); + filt_params.client_if = env->CallIntMethod(params, methodId);; + + filt_params.action = add_scan_filter_params_action; + + methodId = env->GetMethodID(filtparam, "getFiltIndex", "()I"); + filt_params.filt_index = env->CallIntMethod(params, methodId);; + + methodId = env->GetMethodID(filtparam, "getFeatSeln", "()I"); + filt_params.feat_seln = env->CallIntMethod(params, methodId);; + + methodId = env->GetMethodID(filtparam, "getListLogicType", "()I"); + filt_params.list_logic_type = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getFiltLogicType", "()I"); + filt_params.filt_logic_type = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getDelyMode", "()I"); + filt_params.dely_mode = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getFoundTimeout", "()I"); + filt_params.found_timeout = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getLostTimeout", "()I"); + filt_params.lost_timeout = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getFoundTimeOutCnt", "()I"); + filt_params.found_timeout_cnt = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getNumOfTrackEntries", "()I"); + filt_params.num_of_tracking_entries = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getRSSIHighValue", "()I"); + filt_params.rssi_high_thres = env->CallIntMethod(params, methodId); + + methodId = env->GetMethodID(filtparam, "getRSSILowValue", "()I"); + filt_params.rssi_low_thres = env->CallIntMethod(params, methodId); + + env->DeleteLocalRef(filtparam); + sGattIf->client->scan_filter_param_setup(filt_params); } static void gattClientScanFilterParamDeleteNative(JNIEnv* env, jobject object, @@ -1304,16 +1370,23 @@ static void gattClientScanFilterParamDeleteNative(JNIEnv* env, jobject object, { if (!sGattIf) return; const int delete_scan_filter_params_action = 1; - sGattIf->client->scan_filter_param_setup(client_if, delete_scan_filter_params_action, - filt_index, 0, 0, 0, 0, 0, 0, 0, 0, 0); + btgatt_filt_param_setup_t filt_params; + memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); + filt_params.client_if = client_if; + filt_params.action = delete_scan_filter_params_action; + filt_params.filt_index = filt_index; + sGattIf->client->scan_filter_param_setup(filt_params); } static void gattClientScanFilterParamClearAllNative(JNIEnv* env, jobject object, jint client_if) { if (!sGattIf) return; const int clear_scan_filter_params_action = 2; - sGattIf->client->scan_filter_param_setup(client_if, clear_scan_filter_params_action, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + btgatt_filt_param_setup_t filt_params; + memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); + filt_params.client_if = client_if; + filt_params.action = clear_scan_filter_params_action; + sGattIf->client->scan_filter_param_setup(filt_params); } static void gattClientScanFilterAddRemoveNative(JNIEnv* env, jobject object, @@ -1738,7 +1811,7 @@ static JNINativeMethod sScanMethods[] = { {"gattClientStopBatchScanNative", "(I)V", (void *) gattClientStopBatchScanNative}, {"gattClientReadScanReportsNative", "(II)V", (void *) gattClientReadScanReportsNative}, // Scan filter JNI functions. - {"gattClientScanFilterParamAddNative", "(IIIIIIIIIII)V", (void *) gattClientScanFilterParamAddNative}, + {"gattClientScanFilterParamAddNative", "(Lcom/android/bluetooth/gatt/FilterParams;)V", (void *) gattClientScanFilterParamAddNative}, {"gattClientScanFilterParamDeleteNative", "(II)V", (void *) gattClientScanFilterParamDeleteNative}, {"gattClientScanFilterParamClearAllNative", "(I)V", (void *) gattClientScanFilterParamClearAllNative}, {"gattClientScanFilterAddNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterAddNative}, diff --git a/src/com/android/bluetooth/btservice/AdapterProperties.java b/src/com/android/bluetooth/btservice/AdapterProperties.java index f89404e4d..7e550a7e2 100644 --- a/src/com/android/bluetooth/btservice/AdapterProperties.java +++ b/src/com/android/bluetooth/btservice/AdapterProperties.java @@ -64,6 +64,8 @@ class AdapterProperties { private int mNumOfOffloadedIrkSupported; private int mNumOfOffloadedScanFilterSupported; private int mOffloadedScanResultStorageBytes; + private int mVersSupported; + private int mTotNumOfTrackableAdv; private boolean mIsActivityAndEnergyReporting; // Lock for all getters and setters. @@ -550,13 +552,17 @@ class AdapterProperties { } void updateFeatureSupport(byte[] val) { - mNumOfAdvertisementInstancesSupported = (0xFF & ((int)val[1])); - mRpaOffloadSupported = ((0xFF & ((int)val[2]))!= 0); - mNumOfOffloadedIrkSupported = (0xFF & ((int)val[3])); - mNumOfOffloadedScanFilterSupported = (0xFF & ((int)val[4])); - mOffloadedScanResultStorageBytes = ((0xFF & ((int)val[6])) << 8) - + (0xFF & ((int)val[5])); + mVersSupported = ((0xFF & ((int)val[1])) << 8) + + (0xFF & ((int)val[0])); + mNumOfAdvertisementInstancesSupported = (0xFF & ((int)val[3])); + mRpaOffloadSupported = ((0xFF & ((int)val[4]))!= 0); + mNumOfOffloadedIrkSupported = (0xFF & ((int)val[5])); + mNumOfOffloadedScanFilterSupported = (0xFF & ((int)val[6])); mIsActivityAndEnergyReporting = ((0xFF & ((int)val[7])) != 0); + mOffloadedScanResultStorageBytes = ((0xFF & ((int)val[9])) << 8) + + (0xFF & ((int)val[8])); + mTotNumOfTrackableAdv = ((0xFF & ((int)val[11])) << 8) + + (0xFF & ((int)val[10])); Log.d(TAG, "BT_PROPERTY_LOCAL_LE_FEATURES: update from BT controller" + " mNumOfAdvertisementInstancesSupported = " @@ -569,7 +575,11 @@ class AdapterProperties { + " mOffloadedScanResultStorageBytes= " + mOffloadedScanResultStorageBytes + " mIsActivityAndEnergyReporting = " - + mIsActivityAndEnergyReporting); + + mIsActivityAndEnergyReporting + +" mVersSupported = " + + mVersSupported + + " mTotNumOfTrackableAdv = " + + mTotNumOfTrackableAdv); } void onBluetoothReady() { diff --git a/src/com/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo.java b/src/com/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo.java new file mode 100644 index 000000000..d06396ca6 --- /dev/null +++ b/src/com/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo.java @@ -0,0 +1 @@ +/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bluetooth.gatt;
import android.annotation.Nullable;
/** @hide */
public class AdvtFilterOnFoundOnLostInfo {
private int mClientIf;
private int mAdvPktLen;
@Nullable
private byte[] mAdvPkt;
private int mScanRspLen;
@Nullable
private byte[] mScanRsp;
private int mFiltIndex;
private int mAdvState;
private int mAdvInfoPresent;
private String mAddress;
private int mAddrType;
private int mTxPower;
private int mRssiValue;
private int mTimeStamp;
public AdvtFilterOnFoundOnLostInfo(int client_if, int adv_pkt_len, byte[] adv_pkt,
int scan_rsp_len, byte[] scan_rsp, int filt_index, int adv_state,
int adv_info_present, String address, int addr_type, int tx_power,
int rssi_value, int time_stamp){
mClientIf = client_if;
mAdvPktLen = adv_pkt_len;
mAdvPkt = adv_pkt;
mScanRspLen = scan_rsp_len;
mScanRsp = scan_rsp;
mFiltIndex = filt_index;
mAdvState = adv_state;
mAdvInfoPresent = adv_info_present;
mAddress = address;
mAddrType = addr_type;
mTxPower = tx_power;
mRssiValue = rssi_value;
mTimeStamp = time_stamp;
}
public int getClientIf () {
return mClientIf;
}
public int getFiltIndex () {
return mFiltIndex;
}
public int getAdvState () {
return mAdvState;
}
public int getTxPower () {
return mTxPower;
}
public int getTimeStamp () {
return mTimeStamp;
}
public int getRSSIValue () {
return mRssiValue;
}
public int getAdvInfoPresent () {
return mAdvInfoPresent;
}
public String getAddress() {
return mAddress;
}
public int getAddressType() {
return mAddrType;
}
public byte[] getAdvPacketData() {
return mAdvPkt;
}
public int getAdvPacketLen() {
return mAdvPktLen;
}
public byte[] getScanRspData() {
return mScanRsp;
}
public int getScanRspLen() {
return mScanRspLen;
}
}
\ No newline at end of file diff --git a/src/com/android/bluetooth/gatt/FilterParams.java b/src/com/android/bluetooth/gatt/FilterParams.java new file mode 100644 index 000000000..3b702794f --- /dev/null +++ b/src/com/android/bluetooth/gatt/FilterParams.java @@ -0,0 +1 @@ +/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.bluetooth.gatt;
/** @hide */
public class FilterParams {
private int mClientIf;
private int mFiltIndex;
private int mFeatSeln;
private int mListLogicType;
private int mFiltLogicType;
private int mRssiHighValue;
private int mRssiLowValue;
private int mDelyMode;
private int mFoundTimeOut;
private int mLostTimeOut;
private int mFoundTimeOutCnt;
private int mNumOfTrackEntries;
public FilterParams(int client_if, int filt_index,
int feat_seln, int list_logic_type, int filt_logic_type,
int rssi_high_thres, int rssi_low_thres, int dely_mode,
int found_timeout, int lost_timeout, int found_timeout_cnt,
int num_of_tracking_entries) {
mClientIf = client_if;
mFiltIndex = filt_index;
mFeatSeln = feat_seln;
mListLogicType = list_logic_type;
mFiltLogicType = filt_logic_type;
mRssiHighValue = rssi_high_thres;
mRssiLowValue = rssi_low_thres;
mDelyMode = dely_mode;
mFoundTimeOut = found_timeout;
mLostTimeOut = lost_timeout;
mFoundTimeOutCnt = found_timeout_cnt;
mNumOfTrackEntries = num_of_tracking_entries;
}
public int getClientIf () {
return mClientIf;
}
public int getFiltIndex () {
return mFiltIndex;
}
public int getFeatSeln () {
return mFeatSeln;
}
public int getDelyMode () {
return mDelyMode;
}
public int getListLogicType () {
return mListLogicType;
}
public int getFiltLogicType () {
return mFiltLogicType;
}
public int getRSSIHighValue () {
return mRssiHighValue;
}
public int getRSSILowValue () {
return mRssiLowValue;
}
public int getFoundTimeout () {
return mFoundTimeOut;
}
public int getFoundTimeOutCnt () {
return mFoundTimeOutCnt;
}
public int getLostTimeout () {
return mLostTimeOut;
}
public int getNumOfTrackEntries () {
return mNumOfTrackEntries;
}
}
\ No newline at end of file diff --git a/src/com/android/bluetooth/gatt/GattService.java b/src/com/android/bluetooth/gatt/GattService.java index c428cf832..71f11827b 100644 --- a/src/com/android/bluetooth/gatt/GattService.java +++ b/src/com/android/bluetooth/gatt/GattService.java @@ -1132,24 +1132,37 @@ public class GattService extends ProfileService { flushPendingBatchResults(clientIf, isServer); } - void onTrackAdvFoundLost(int filterIndex, int addrType, String address, int advState, - int clientIf) throws RemoteException { - if (DBG) Log.d(TAG, "onClientAdvertiserFoundLost() - clientIf=" - + clientIf + "address = " + address + "adv_state = " - + advState + "client_if = " + clientIf); - ClientMap.App app = mClientMap.getById(clientIf); + AdvtFilterOnFoundOnLostInfo CreateonTrackAdvFoundLostObject(int client_if, int adv_pkt_len, + byte[] adv_pkt, int scan_rsp_len, byte[] scan_rsp, int filt_index, int adv_state, + int adv_info_present, String address, int addr_type, int tx_power, int rssi_value, + int time_stamp) { + + return new AdvtFilterOnFoundOnLostInfo(client_if, adv_pkt_len, adv_pkt, + scan_rsp_len, scan_rsp, filt_index, adv_state, + adv_info_present, address, addr_type, tx_power, + rssi_value, time_stamp); + } + + void onTrackAdvFoundLost(AdvtFilterOnFoundOnLostInfo trackingInfo) throws RemoteException { + if (DBG) Log.d(TAG, "onTrackAdvFoundLost() - clientIf=" + + trackingInfo.getClientIf() + "address = " + trackingInfo.getAddress() + + "adv_state = " + trackingInfo.getAdvState()+ "address type=" + + trackingInfo.getAddressType() + + "ADV packet data =" + trackingInfo.getAdvPacketLen()); + + ClientMap.App app = mClientMap.getById(trackingInfo.getClientIf()); if (app == null || app.callback == null) { Log.e(TAG, "app or callback is null"); return; } // use hw signal for only onlost reporting - if (advState != ADVT_STATE_ONLOST) { + if (trackingInfo.getAdvState() != ADVT_STATE_ONLOST) { return; } for (ScanClient client : mScanManager.getRegularScanQueue()) { - if (client.clientIf == clientIf) { + if (client.clientIf == trackingInfo.getClientIf()) { ScanSettings settings = client.settings; if ((settings.getCallbackType() & ScanSettings.CALLBACK_TYPE_MATCH_LOST) != 0) { diff --git a/src/com/android/bluetooth/gatt/ScanManager.java b/src/com/android/bluetooth/gatt/ScanManager.java index d93e4106a..ae5a76ff6 100644 --- a/src/com/android/bluetooth/gatt/ScanManager.java +++ b/src/com/android/bluetooth/gatt/ScanManager.java @@ -657,6 +657,8 @@ public class ScanManager { private void configureScanFilters(ScanClient client) { int clientIf = client.clientIf; int deliveryMode = getDeliveryMode(client); + // TBD - The value needs to be handled appropriately + int trackEntries = 5; if (!shouldAddAllPassFilterToController(client, deliveryMode)) { return; } @@ -669,7 +671,8 @@ public class ScanManager { int filterIndex = (deliveryMode == DELIVERY_MODE_BATCH) ? ALL_PASS_FILTER_INDEX_BATCH_SCAN : ALL_PASS_FILTER_INDEX_REGULAR_SCAN; resetCountDownLatch(); - configureFilterParamter(clientIf, client, ALL_PASS_FILTER_SELECTION, filterIndex); + configureFilterParamter(clientIf, client, ALL_PASS_FILTER_SELECTION, filterIndex, + trackEntries); waitForCallback(); } else { Deque<Integer> clientFilterIndices = new ArrayDeque<Integer>(); @@ -684,7 +687,8 @@ public class ScanManager { waitForCallback(); } resetCountDownLatch(); - configureFilterParamter(clientIf, client, featureSelection, filterIndex); + configureFilterParamter(clientIf, client, featureSelection, filterIndex, + trackEntries); waitForCallback(); clientFilterIndices.add(filterIndex); } @@ -834,14 +838,14 @@ public class ScanManager { // Configure filter parameters. private void configureFilterParamter(int clientIf, ScanClient client, int featureSelection, - int filterIndex) { + int filterIndex, int num_of_tracking_entries) { int deliveryMode = getDeliveryMode(client); int rssiThreshold = Byte.MIN_VALUE; int timeout = getOnfoundLostTimeout(client); - gattClientScanFilterParamAddNative( - clientIf, filterIndex, featureSelection, LIST_LOGIC_TYPE, - FILTER_LOGIC_TYPE, rssiThreshold, rssiThreshold, deliveryMode, - timeout, timeout, ONFOUND_SIGHTINGS); + FilterParams FiltValue = new FilterParams(clientIf, filterIndex, featureSelection, + LIST_LOGIC_TYPE, FILTER_LOGIC_TYPE, rssiThreshold, rssiThreshold, deliveryMode, + timeout, timeout, ONFOUND_SIGHTINGS, num_of_tracking_entries); + gattClientScanFilterParamAddNative(FiltValue); } // Get delivery mode based on scan settings. @@ -892,11 +896,7 @@ public class ScanManager { long uuid_mask_lsb, long uuid_mask_msb, String name, String address, byte addr_type, byte[] data, byte[] mask); - private native void gattClientScanFilterParamAddNative( - int client_if, int filt_index, int feat_seln, - int list_logic_type, int filt_logic_type, int rssi_high_thres, - int rssi_low_thres, int dely_mode, int found_timeout, - int lost_timeout, int found_timeout_cnt); + private native void gattClientScanFilterParamAddNative(FilterParams FiltValue); // Note this effectively remove scan filters for ALL clients. private native void gattClientScanFilterParamClearAllNative( |