Android 10 rozszerza interfejs API blokady Wi-Fi, aby umożliwić aplikacji wrażliwych na opóźnienia, aby skonfigurować sieć Wi-Fi małe opóźnienie . Tryb małego opóźnienia uruchamia się, gdy są spełnione wszystkie te warunki:
- Wi-Fi jest włączone, a urządzenie ma dostęp do internetu.
- Aplikacja utworzyła i uzyskała blokadę Wi-Fi. Działa na pierwszym planie.
- Ekran jest włączony.
Aby obsługiwać tryb małego opóźnienia na urządzeniach, producenci muszą zaktualizować sterownika WLAN i kod HAL dostawcy. W trybie niskiego opóźnienia funkcja oszczędzania energii (znane też jako w standardzie IEEE 802.11) jest wyraźnie wyłączone przez platformę. Parametry skanowania i roamingu w warstwie sterownika i oprogramowania układowego mogą być zoptymalizowane pod kątem dalszego zmniejszenia opóźnień Wi-Fi. Dokładne optymalizacje to konkretnego wdrożenia.
Android ma tryb wysokiej wydajności blokady Wi-Fi (opublikowane w interfejsie API na poziomie 12), który działa oddzielnie od trybu małego opóźnienia.
Implementacja
Aby zapewnić obsługę funkcji Wi-Fi w trybie niskiego opóźnienia, zaimplementuj takie
tych funkcji IWifiChip
.
W menu HAL AIDL:
int getFeatureSet()
void setLatencyMode(in LatencyMode mode)
W HAL HIDL (w wersji 1.3 lub nowszej):
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Implementację referencyjną znajdziesz tutaj:
wifi_legacy_hal.cpp
z tymi funkcjami:
wifi_error wifi_get_supported_feature_set(wifi_interface_handle iface, feature_set *set)
wifi_error wifi_set_latency_mode(wifi_interface_handle handle, wifi_latency_mode mode)
W trybie niskiego opóźnienia oszczędzanie energii jest jawnie wyłączone przez
WifiLockManager
z platformy Android.
Aby było to możliwe, sterownik WLAN musi obsługiwać polecenie NL80211,
NL80211_CMD_SET_POWER_SAVE
, by włączyć lub wyłączyć oszczędzanie energii. Gdy zasilanie Wi-Fi
zapisywanie jest wyłączone, system Wi-Fi musi pozostawać w stanie uśpienia i być gotowy do
wysyłania lub odbierania pakietów z minimalnym opóźnieniem.
Wyłącz funkcję
Aby wyłączyć tryb małego opóźnienia, zaktualizuj źródłowy kod
getFeatureSet()
dla AIDL HAL lub
getCapabilities_1_3()
dla HIDL HAL,
tak, aby capabilities & SET_LATENCY_MODE = 0
, gdzie
SET_LATENCY_MODE
jest zdefiniowany w definicji AIDL lub HIDL IWifiChip
.
Gdy ta funkcja jest wyłączona,
platforma wyłącza oszczędzanie energii tylko wtedy, gdy włączony jest tryb małego opóźnienia.
Weryfikacja
Aby sprawdzić, czy tryb niskiego opóźnienia działa, gdy jest włączony, uruchom następujące automatyczne polecenia testów i ręcznych testów opóźnienia ping.
Automatyczne testowanie
Przeprowadź te testy VTS i CTS:
- VTS (AIDL):
hardware/interfaces/wifi/aidl/vts/functional/wifi_chip_aidl_test.cpp
- VTS (HIDL):
hardware/interfaces/wifi/1.3/vts/functional/wifi_chip_hidl_test.cpp
- Punkt końcowy:
cts/tests/tests/net/src/android/net/wifi/cts/WifiLockTest.java
Testy ręczne
Wymagany sprzęt i środowisko testowe
Aby przeprowadzić testy ręczne, musisz skonfigurować tę funkcję:
- Punkt dostępu Wi-Fi
Telefon i komputer testowy w trakcie testowania urządzenia
- Urządzenie DUT musi być połączone z punktem dostępu przez Wi-Fi.
- Komputer testowy musi być połączony z punktem dostępu przez Wi-Fi lub Ethernet.
- Komputer testowy musi być podłączony do urządzenia DUT przez USB.
Test ping linku wychodzącego
Włącz tryb niskiego opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Upewnij się, że komputer jest połączony z telefonem przez ADB. Od powłoce ADB, ciągłym pingiem bramy przez 3 godziny co 1 sekundę interwały.
Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub języka Python aby wygenerować histogram wyników testu czasu oczekiwania na ping.
Powtórz kroki 1–3 przy wyłączonym trybie opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Porównaj wyniki testu, aby upewnić się, że średni czas oczekiwania na ping wynosi gdy włączony jest tryb małego opóźnienia.
Test ping dla pobierania
Włącz tryb niskiego opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Z wiersza poleceń komputera testowego wyślij ping do adresu IP telefonu. przez 3 godziny w 1-sekundowych odstępach.
Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub języka Python aby wygenerować histogram wyników testu czasu oczekiwania na ping.
Powtórz kroki 1–3 przy wyłączonym trybie opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Porównaj wyniki testu, aby upewnić się, że średni czas oczekiwania na ping wynosi gdy włączony jest tryb małego opóźnienia.
Inne testy
Powtórz powyższe testy w różnych środowiskach. Na przykład przy w domu lub w biurze.