Ho scaricato il codice sorgente AOSP per Lollipop 5.0. In api livello 21, sotto le impostazioni di scansione a basso consumo di bluetooth ci sono tre opzioni per la scansione dei dispositivi ble - SCAN_MODE_BALANCED, SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_POWER
. Sono basati su diversi intervalli di scansione e valori della finestra di scansione? In tal caso, dove posso trovare i valori definiti per queste macro nella directory del codice sorgente.Android AOSP - Definizione dell'intervallo di scansione e finestra di scansione nel codice sorgente Android
risposta
ho trovato di sotto dei valori in http://androidxref.com/5.0.0_r2/xref/packages/apps/Bluetooth/src/com/android/bluetooth/gatt/ScanManager.java mentre greping la parola chiave "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;
checkout anche fuori ScanManager.ScanNative.configureRegularScanParams(). Due parametri scanWindow
e scanInterval
sono impostati in base all'impostazione di scansione (ScanSettings.SCAN_MODE_LOW_POWER
, ScanSettings.SCAN_MODE_BALANCED
, ScanSettings.SCAN_MODE_LOW_LATENCY
), convertiti in unità BLE e quindi passati a gattSetScanParametersNative().
Spero che questo aiuti.
Non sono sicuro se questo è accurato o se si può anche utilizzare per trovare i valori che avete bisogno, ma ho trovato un po 'di 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;
Grazie Tim. Ma non riuscivo a trovare questo tipo di definizioni nel codice sorgente di Google Android. Dopo aver cercato al livello di driver ho trovato qualcosa come questo 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/* Intervallo (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
corrisponde alla finestra di scansione e intervallo di scansione. Ma mi chiedo come definiscono i valori per SCAN_MODE_BALANCED, SCAN_MODE_LOW_LATENCY, SCAN_MODE_LOW_POWER! – HRG
Grazie @yanoken !! – HRG
Che cosa significa esattamente se dico che ho impostato i miei ScanSettings su SCAN_MODE_LOW_LATENCY? Si dice che scansiona ogni 5 secondi per 5 secondi e poi ricomincia a scansionare? Non penso che sia così perché ho un'applicazione in cui gli aggiornamenti sono più veloci di ogni 5 secondi. Potresti per favore approfondire l'interpretazione di questi valori? – BigPenguin