Pobrałem kod źródłowy AOSP dla Lollipop 5.0. Na poziomie 21 api, w ustawieniach bluetooth niskiego zużycia energii dostępne są trzy opcje skanowania urządzeń - SCAN_MODE_BALANCED, SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_POWER
. Czy są oparte na różnych odstępach czasu skanowania i okna skanowania? Jeśli tak, to gdzie mogę znaleźć wartości zdefiniowane dla tych makr w katalogu kodu źródłowego.Android AOSP - Definicja interwału skanowania i okna skanowania w kodzie źródłowym Androida
Odpowiedz
znalazłem poniżej wartości w http://androidxref.com/5.0.0_r2/xref/packages/apps/Bluetooth/src/com/android/bluetooth/gatt/ScanManager.java podczas greping słowa kluczowego "SCAN_MODE_BALANCED":
/**
* Scan params corresponding to regular 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;
/**
* Scan params corresponding to batch scan setting
*/
private static final int SCAN_MODE_BATCH_LOW_POWER_WINDOW_MS = 1500;
private static final int SCAN_MODE_BATCH_LOW_POWER_INTERVAL_MS = 150000;
private static final int SCAN_MODE_BATCH_BALANCED_WINDOW_MS = 1500;
private static final int SCAN_MODE_BATCH_BALANCED_INTERVAL_MS = 15000;
private static final int SCAN_MODE_BATCH_LOW_LATENCY_WINDOW_MS = 1500;
private static final int SCAN_MODE_BATCH_LOW_LATENCY_INTERVAL_MS = 5000;
kasy też, ScanManager.ScanNative.configureRegularScanParams(). Dwie parametry: scanWindow
i scanInterval
są ustawiane zgodnie z ustawieniem skanowania (ScanSettings.SCAN_MODE_LOW_POWER
, ScanSettings.SCAN_MODE_BALANCED
, ScanSettings.SCAN_MODE_LOW_LATENCY
), przekształcane w jednostki BLE, a następnie przekazywane do gattSetScanParametersNative().
Mam nadzieję, że to pomoże.
Nie jestem pewien, czy to jest dokładna lub czy można nawet używać go znaleźć wartości, których potrzebujesz, ale znalazłem kilka code from Google regarding scanning settings:
// Constants for Scan Cycle
// Low Power: 2.5 minute period with 1.5 seconds active (1% duty cycle)
/* @VisibleForTesting */ static final int LOW_POWER_IDLE_MILLIS = 148500;
/* @VisibleForTesting */ static final int LOW_POWER_ACTIVE_MILLIS = 1500;
// Balanced: 15 second period with 1.5 second active (10% duty cycle)
/* @VisibleForTesting */ static final int BALANCED_IDLE_MILLIS = 13500;
/* @VisibleForTesting */ static final int BALANCED_ACTIVE_MILLIS = 1500;
// Low Latency: 1.67 second period with 1.5 seconds active (90% duty cycle)
/* @VisibleForTesting */ static final int LOW_LATENCY_IDLE_MILLIS = 167;
/* @VisibleForTesting */ static final int LOW_LATENCY_ACTIVE_MILLIS = 1500;
Dziękuję Tim. Ale nie mogłem znaleźć takich definicji w kodzie źródłowym Google Android. Po wyszukaniu na poziomie sterownika znalazłem coś tutaj: http://androidxref.com/5.0.0_r2/xref/external/bluetooth/bluedroid/stack/btm/btm_ble_int .h #define BTM_BLE_GAP_DISC_SCAN_INT 18/* Interval (scan_int) = 11,25 ms = 0x0010 * 0.625 ms */ #define BTM_BLE_GAP_DISC_SCAN_WIN 18/* scan_window = 11.25 ms = 0x0010 * 0.625 ms */ – HRG
to powyższe odnosi się do okna skanowania i interwał skanowania. Ale zastanawiam się, jak definiują wartości dla SCAN_MODE_BALANCED, SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_POWER! – HRG
Thankyou @yanoken !! – HRG
Co to dokładnie oznacza, jeśli mówię, że ustawiłem ustawienia skanowania na SCAN_MODE_LOW_LATENCY? Czy to oznacza, że skanuje co 5 sekund przez 5 sekund, a następnie rozpoczyna skanowanie ponownie - nie sądzę, że tak jest, ponieważ mam aplikację, w której aktualizacje są szybsze niż co 5 sekund. Czy mógłbyś wyjaśnić interpretację tych wartości? – BigPenguin