Loading android/app/jni/com_android_bluetooth_gatt.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1731,6 +1731,7 @@ static JNINativeMethod sScanMethods[] = { {"gattClientScanFilterDeleteNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterDeleteNative}, {"gattClientScanFilterClearNative", "(II)V", (void *) gattClientScanFilterClearNative}, {"gattClientScanFilterEnableNative", "(IZ)V", (void *) gattClientScanFilterEnableNative}, {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, }; // JNI functions defined in GattService class. Loading Loading @@ -1774,7 +1775,6 @@ static JNINativeMethod sMethods[] = { {"gattServerSendResponseNative", "(IIIIII[BI)V", (void *) gattServerSendResponseNative}, {"gattSetAdvDataNative", "(IZZZIII[B[B[B)V", (void *) gattSetAdvDataNative}, {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, {"gattTestNative", "(IJJLjava/lang/String;IIIII)V", (void *) gattTestNative}, }; Loading android/app/src/com/android/bluetooth/gatt/GattService.java +0 −56 Original line number Diff line number Diff line Loading @@ -110,7 +110,6 @@ public class GattService extends ProfileService { HandleMap mHandleMap = new HandleMap(); private List<UUID> mAdvertisingServiceUuids = new ArrayList<UUID>(); private static int lastConfiguredScanSetting = Integer.MIN_VALUE; private int mMaxScanFilters; /** Loading Loading @@ -1211,59 +1210,6 @@ public class GattService extends ProfileService { mScanManager.flushBatchScanResults(new ScanClient(clientIf, isServer)); } // TODO: Move this to ScanManager. void configureScanParams(int appIf) { if (DBG) Log.d(TAG, "configureScanParams() - queue=" + mScanManager.scanQueue().size()); int curScanSetting = Integer.MIN_VALUE; for(ScanClient client : mScanManager.scanQueue()) { // ScanClient scan settings are assumed to be monotonically increasing in value for more // power hungry(higher duty cycle) operation if (client.settings.getScanMode() > curScanSetting) { curScanSetting = client.settings.getScanMode(); } } if (DBG) Log.d(TAG, "configureScanParams() - ScanSetting Scan mode=" + curScanSetting + " lastConfiguredScanSetting=" + lastConfiguredScanSetting); if (curScanSetting != Integer.MIN_VALUE) { if (curScanSetting != lastConfiguredScanSetting) { int scanWindow, scanInterval; switch (curScanSetting){ case ScanSettings.SCAN_MODE_LOW_POWER: scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_BALANCED: scanWindow = SCAN_MODE_BALANCED_WINDOW_MS; scanInterval = SCAN_MODE_BALANCED_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_LOW_LATENCY: scanWindow = SCAN_MODE_LOW_LATENCY_WINDOW_MS; scanInterval = SCAN_MODE_LOW_LATENCY_INTERVAL_MS; break; default: Log.e(TAG, "Invalid value for curScanSetting " + curScanSetting); scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; } // convert scanWindow and scanInterval from ms to LE scan units(0.625ms) scanWindow = (scanWindow * 1000)/625; scanInterval = (scanInterval * 1000)/625; // Presence of scan clients means scan is active. mScanManager.stopScan(new ScanClient(appIf, false)); gattSetScanParametersNative(scanInterval, scanWindow); lastConfiguredScanSetting = curScanSetting; } } else { lastConfiguredScanSetting = curScanSetting; mScanManager.stopScan(new ScanClient(appIf, false)); if (DBG) Log.d(TAG, "configureScanParams() - queue emtpy, scan stopped"); } } void stopScan(int appIf, boolean isServer) { enforceAdminPermission(); if (DBG) Log.d(TAG, "stopScan() - queue=" + mScanManager.scanQueue().size()); Loading Loading @@ -2144,8 +2090,6 @@ public class GattService extends ProfileService { private native void gattClientUnregisterAppNative(int clientIf); private native void gattSetScanParametersNative(int scan_interval, int scan_window); private native void gattClientConnectNative(int clientIf, String address, boolean isDirect, int transport); Loading android/app/src/com/android/bluetooth/gatt/ScanManager.java +68 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class ScanManager { // Timeout for each controller operation. private static final int OPERATION_TIME_OUT_MILLIS = 500; private static int lastConfiguredScanSetting = Integer.MIN_VALUE; private GattService mService; private ScanNative mScanNative; private ClientHandler mHandler; Loading Loading @@ -185,7 +187,7 @@ public class ScanManager { mScanNative.startBatchScan(client); } else { mRegularScanClients.add(client); mScanNative.startRegularScan(client); mScanNative.configureRegularScanParams(); } } Loading @@ -193,6 +195,7 @@ public class ScanManager { Utils.enforceAdminPermission(mService); if (mRegularScanClients.contains(client)) { mRegularScanClients.remove(client); mScanNative.configureRegularScanParams(); mScanNative.stopRegularScan(client); } else { mBatchClients.remove(client); Loading Loading @@ -240,6 +243,17 @@ public class ScanManager { private static final int ALLOW_ALL_FILTER_INDEX = 1; private static final int ALLOW_ALL_FILTER_SELECTION = 0; /** * Scan params corresponding to scan setting */ private static final int SCAN_MODE_LOW_POWER_WINDOW_MS = 500; private static final int SCAN_MODE_LOW_POWER_INTERVAL_MS = 5000; private static final int SCAN_MODE_BALANCED_WINDOW_MS = 2000; private static final int SCAN_MODE_BALANCED_INTERVAL_MS = 5000; private static final int SCAN_MODE_LOW_LATENCY_WINDOW_MS = 5000; private static final int SCAN_MODE_LOW_LATENCY_INTERVAL_MS = 5000; // The logic is AND for each filter field. private static final int LIST_LOGIC_TYPE = 0x1111111; private static final int FILTER_LOGIC_TYPE = 1; Loading Loading @@ -290,6 +304,56 @@ public class ScanManager { } } void configureRegularScanParams() { if (DBG) Log.d(TAG, "configureRegularScanParams() - queue=" + mRegularScanClients.size()); int curScanSetting = Integer.MIN_VALUE; for(ScanClient client : mRegularScanClients) { // ScanClient scan settings are assumed to be monotonically increasing in value for more // power hungry(higher duty cycle) operation if (client.settings.getScanMode() > curScanSetting) { curScanSetting = client.settings.getScanMode(); } } if (DBG) Log.d(TAG, "configureRegularScanParams() - ScanSetting Scan mode=" + curScanSetting + " lastConfiguredScanSetting=" + lastConfiguredScanSetting); if (curScanSetting != Integer.MIN_VALUE) { if (curScanSetting != lastConfiguredScanSetting) { int scanWindow, scanInterval; switch (curScanSetting){ case ScanSettings.SCAN_MODE_LOW_POWER: scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_BALANCED: scanWindow = SCAN_MODE_BALANCED_WINDOW_MS; scanInterval = SCAN_MODE_BALANCED_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_LOW_LATENCY: scanWindow = SCAN_MODE_LOW_LATENCY_WINDOW_MS; scanInterval = SCAN_MODE_LOW_LATENCY_INTERVAL_MS; break; default: Log.e(TAG, "Invalid value for curScanSetting " + curScanSetting); scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; } // convert scanWindow and scanInterval from ms to LE scan units(0.625ms) scanWindow = (scanWindow * 1000)/625; scanInterval = (scanInterval * 1000)/625; gattSetScanParametersNative(scanInterval, scanWindow); lastConfiguredScanSetting = curScanSetting; } } else { lastConfiguredScanSetting = curScanSetting; if (DBG) Log.d(TAG, "configureRegularScanParams() - queue emtpy, scan stopped"); } } void startRegularScan(ScanClient client) { if (mFilterIndexStack.isEmpty() && isFilteringSupported()) { initFilterIndexStack(); Loading Loading @@ -548,6 +612,9 @@ public class ScanManager { /************************** Regular scan related native methods **************************/ private native void gattClientScanNative(boolean start); private native void gattSetScanParametersNative(int scan_interval, int scan_window); /************************** Filter related native methods ********************************/ private native void gattClientScanFilterAddNative(int client_if, int filter_type, int filter_index, int company_id, Loading Loading
android/app/jni/com_android_bluetooth_gatt.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1731,6 +1731,7 @@ static JNINativeMethod sScanMethods[] = { {"gattClientScanFilterDeleteNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterDeleteNative}, {"gattClientScanFilterClearNative", "(II)V", (void *) gattClientScanFilterClearNative}, {"gattClientScanFilterEnableNative", "(IZ)V", (void *) gattClientScanFilterEnableNative}, {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, }; // JNI functions defined in GattService class. Loading Loading @@ -1774,7 +1775,6 @@ static JNINativeMethod sMethods[] = { {"gattServerSendResponseNative", "(IIIIII[BI)V", (void *) gattServerSendResponseNative}, {"gattSetAdvDataNative", "(IZZZIII[B[B[B)V", (void *) gattSetAdvDataNative}, {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, {"gattTestNative", "(IJJLjava/lang/String;IIIII)V", (void *) gattTestNative}, }; Loading
android/app/src/com/android/bluetooth/gatt/GattService.java +0 −56 Original line number Diff line number Diff line Loading @@ -110,7 +110,6 @@ public class GattService extends ProfileService { HandleMap mHandleMap = new HandleMap(); private List<UUID> mAdvertisingServiceUuids = new ArrayList<UUID>(); private static int lastConfiguredScanSetting = Integer.MIN_VALUE; private int mMaxScanFilters; /** Loading Loading @@ -1211,59 +1210,6 @@ public class GattService extends ProfileService { mScanManager.flushBatchScanResults(new ScanClient(clientIf, isServer)); } // TODO: Move this to ScanManager. void configureScanParams(int appIf) { if (DBG) Log.d(TAG, "configureScanParams() - queue=" + mScanManager.scanQueue().size()); int curScanSetting = Integer.MIN_VALUE; for(ScanClient client : mScanManager.scanQueue()) { // ScanClient scan settings are assumed to be monotonically increasing in value for more // power hungry(higher duty cycle) operation if (client.settings.getScanMode() > curScanSetting) { curScanSetting = client.settings.getScanMode(); } } if (DBG) Log.d(TAG, "configureScanParams() - ScanSetting Scan mode=" + curScanSetting + " lastConfiguredScanSetting=" + lastConfiguredScanSetting); if (curScanSetting != Integer.MIN_VALUE) { if (curScanSetting != lastConfiguredScanSetting) { int scanWindow, scanInterval; switch (curScanSetting){ case ScanSettings.SCAN_MODE_LOW_POWER: scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_BALANCED: scanWindow = SCAN_MODE_BALANCED_WINDOW_MS; scanInterval = SCAN_MODE_BALANCED_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_LOW_LATENCY: scanWindow = SCAN_MODE_LOW_LATENCY_WINDOW_MS; scanInterval = SCAN_MODE_LOW_LATENCY_INTERVAL_MS; break; default: Log.e(TAG, "Invalid value for curScanSetting " + curScanSetting); scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; } // convert scanWindow and scanInterval from ms to LE scan units(0.625ms) scanWindow = (scanWindow * 1000)/625; scanInterval = (scanInterval * 1000)/625; // Presence of scan clients means scan is active. mScanManager.stopScan(new ScanClient(appIf, false)); gattSetScanParametersNative(scanInterval, scanWindow); lastConfiguredScanSetting = curScanSetting; } } else { lastConfiguredScanSetting = curScanSetting; mScanManager.stopScan(new ScanClient(appIf, false)); if (DBG) Log.d(TAG, "configureScanParams() - queue emtpy, scan stopped"); } } void stopScan(int appIf, boolean isServer) { enforceAdminPermission(); if (DBG) Log.d(TAG, "stopScan() - queue=" + mScanManager.scanQueue().size()); Loading Loading @@ -2144,8 +2090,6 @@ public class GattService extends ProfileService { private native void gattClientUnregisterAppNative(int clientIf); private native void gattSetScanParametersNative(int scan_interval, int scan_window); private native void gattClientConnectNative(int clientIf, String address, boolean isDirect, int transport); Loading
android/app/src/com/android/bluetooth/gatt/ScanManager.java +68 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class ScanManager { // Timeout for each controller operation. private static final int OPERATION_TIME_OUT_MILLIS = 500; private static int lastConfiguredScanSetting = Integer.MIN_VALUE; private GattService mService; private ScanNative mScanNative; private ClientHandler mHandler; Loading Loading @@ -185,7 +187,7 @@ public class ScanManager { mScanNative.startBatchScan(client); } else { mRegularScanClients.add(client); mScanNative.startRegularScan(client); mScanNative.configureRegularScanParams(); } } Loading @@ -193,6 +195,7 @@ public class ScanManager { Utils.enforceAdminPermission(mService); if (mRegularScanClients.contains(client)) { mRegularScanClients.remove(client); mScanNative.configureRegularScanParams(); mScanNative.stopRegularScan(client); } else { mBatchClients.remove(client); Loading Loading @@ -240,6 +243,17 @@ public class ScanManager { private static final int ALLOW_ALL_FILTER_INDEX = 1; private static final int ALLOW_ALL_FILTER_SELECTION = 0; /** * Scan params corresponding to scan setting */ private static final int SCAN_MODE_LOW_POWER_WINDOW_MS = 500; private static final int SCAN_MODE_LOW_POWER_INTERVAL_MS = 5000; private static final int SCAN_MODE_BALANCED_WINDOW_MS = 2000; private static final int SCAN_MODE_BALANCED_INTERVAL_MS = 5000; private static final int SCAN_MODE_LOW_LATENCY_WINDOW_MS = 5000; private static final int SCAN_MODE_LOW_LATENCY_INTERVAL_MS = 5000; // The logic is AND for each filter field. private static final int LIST_LOGIC_TYPE = 0x1111111; private static final int FILTER_LOGIC_TYPE = 1; Loading Loading @@ -290,6 +304,56 @@ public class ScanManager { } } void configureRegularScanParams() { if (DBG) Log.d(TAG, "configureRegularScanParams() - queue=" + mRegularScanClients.size()); int curScanSetting = Integer.MIN_VALUE; for(ScanClient client : mRegularScanClients) { // ScanClient scan settings are assumed to be monotonically increasing in value for more // power hungry(higher duty cycle) operation if (client.settings.getScanMode() > curScanSetting) { curScanSetting = client.settings.getScanMode(); } } if (DBG) Log.d(TAG, "configureRegularScanParams() - ScanSetting Scan mode=" + curScanSetting + " lastConfiguredScanSetting=" + lastConfiguredScanSetting); if (curScanSetting != Integer.MIN_VALUE) { if (curScanSetting != lastConfiguredScanSetting) { int scanWindow, scanInterval; switch (curScanSetting){ case ScanSettings.SCAN_MODE_LOW_POWER: scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_BALANCED: scanWindow = SCAN_MODE_BALANCED_WINDOW_MS; scanInterval = SCAN_MODE_BALANCED_INTERVAL_MS; break; case ScanSettings.SCAN_MODE_LOW_LATENCY: scanWindow = SCAN_MODE_LOW_LATENCY_WINDOW_MS; scanInterval = SCAN_MODE_LOW_LATENCY_INTERVAL_MS; break; default: Log.e(TAG, "Invalid value for curScanSetting " + curScanSetting); scanWindow = SCAN_MODE_LOW_POWER_WINDOW_MS; scanInterval = SCAN_MODE_LOW_POWER_INTERVAL_MS; break; } // convert scanWindow and scanInterval from ms to LE scan units(0.625ms) scanWindow = (scanWindow * 1000)/625; scanInterval = (scanInterval * 1000)/625; gattSetScanParametersNative(scanInterval, scanWindow); lastConfiguredScanSetting = curScanSetting; } } else { lastConfiguredScanSetting = curScanSetting; if (DBG) Log.d(TAG, "configureRegularScanParams() - queue emtpy, scan stopped"); } } void startRegularScan(ScanClient client) { if (mFilterIndexStack.isEmpty() && isFilteringSupported()) { initFilterIndexStack(); Loading Loading @@ -548,6 +612,9 @@ public class ScanManager { /************************** Regular scan related native methods **************************/ private native void gattClientScanNative(boolean start); private native void gattSetScanParametersNative(int scan_interval, int scan_window); /************************** Filter related native methods ********************************/ private native void gattClientScanFilterAddNative(int client_if, int filter_type, int filter_index, int company_id, Loading