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

Commit fd6def42 authored by Prerepa Viswanadham's avatar Prerepa Viswanadham Committed by Android Git Automerger
Browse files

am 736b6e1d: am 6951dbb9: Refactor configuring scan params to scan manager

* commit '736b6e1d':
  Refactor configuring scan params to scan manager
parents 4ada86c9 736b6e1d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.
@@ -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},
};

+0 −56
Original line number Diff line number Diff line
@@ -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;

    /**
@@ -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());
@@ -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);

+68 −1
Original line number Diff line number Diff line
@@ -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;
@@ -185,7 +187,7 @@ public class ScanManager {
                mScanNative.startBatchScan(client);
            } else {
                mRegularScanClients.add(client);
                mScanNative.startRegularScan(client);
                mScanNative.configureRegularScanParams();
            }
        }

@@ -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);
@@ -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;
@@ -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();
@@ -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,