اندروید ۱۰ رابط برنامهنویسی کاربردی قفل وایفای را گسترش داده است تا به برنامههای حساس به تأخیر اجازه دهد وایفای را در حالت تأخیر کم پیکربندی کنند. حالت تأخیر کم زمانی شروع میشود که همه شرایط زیر برآورده شوند:
- وای فای فعال است و دستگاه به اینترنت دسترسی دارد.
- این برنامه یک قفل Wi-Fi ایجاد و دریافت کرده است و در پیشزمینه اجرا میشود.
- صفحه نمایش روشن است.
برای پشتیبانی از حالت تأخیر کم در دستگاهها، تولیدکنندگان دستگاه باید درایور WLAN و فروشنده HAL را بهروزرسانی کنند. در حالت تأخیر کم، صرفهجویی در مصرف برق (که در استاندارد IEEE 802.11 به عنوان حالت doze نیز شناخته میشود) به صراحت توسط چارچوب غیرفعال میشود. پارامترهای اسکن و رومینگ در لایههای درایور و میانافزار را میتوان برای کاهش بیشتر تأخیر Wi-Fi بهینه کرد. بهینهسازیهای دقیق، مختص پیادهسازی هستند.
اندروید یک حالت قفل وایفای با عملکرد بالا (معرفیشده در سطح API 12) دارد که جدا از حالت کمتأخیر است.
پیادهسازی
برای پشتیبانی از ویژگی حالت کمتاخیر Wi-Fi، پیادهسازیهایی را برای توابع IWifiChip زیر ارائه دهید.
در AIDL HAL:
-
int getFeatureSet() -
void setLatencyMode(in LatencyMode mode)
در HIDL HAL (1.3 یا جدیدتر):
-
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities) -
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
یک پیادهسازی مرجع را میتوان در wifi_legacy_hal.cpp با توابع زیر یافت:
-
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)
در حالت تأخیر کم، صرفهجویی در مصرف برق به طور صریح توسط WifiLockManager در چارچوب اندروید غیرفعال میشود. برای پشتیبانی از این، درایور WLAN باید از دستور NL80211، NL80211_CMD_SET_POWER_SAVE ، برای فعال و غیرفعال کردن صرفهجویی در مصرف برق پشتیبانی کند. هنگامی که صرفهجویی در مصرف برق Wi-Fi غیرفعال است، سیستم Wi-Fi باید در حالت بیدار (بیدار) بماند و آماده ارسال یا دریافت بستهها با حداقل تأخیر باشد.
غیرفعال کردن ویژگی
برای خاموش کردن ویژگی حالت کمتأخیر، کد زیرین getFeatureSet() را برای AIDL HAL یا getCapabilities_1_3() برای HIDL HAL بهروزرسانی کنید، به طوری که capabilities & SET_LATENCY_MODE = 0 باشد، که در آن SET_LATENCY_MODE در تعریف IWifiChip AIDL یا HIDL تعریف شده است. هنگامی که این ویژگی غیرفعال است، چارچوب فقط زمانی که حالت کمتأخیر فعال است، صرفهجویی در مصرف برق را غیرفعال میکند.
اعتبارسنجی
برای آزمایش اینکه حالت تأخیر کم هنگام فعال بودن کار میکند، تستهای خودکار و تستهای تأخیر پینگ دستی زیر را اجرا کنید.
تست خودکار
با اجرای تستهای Vendor Test Suite (VTS) و Compatibility Test Suite (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 - CTS:
cts/tests/tests/net/src/android/net/wifi/cts/WifiLockTest.java
تست دستی
تجهیزات و محیط آزمایش مورد نیاز
برای تست دستی، تنظیمات زیر مورد نیاز است:
- نقطه دسترسی وایفای (AP)
- گوشی و کامپیوتر تحت آزمایش دستگاه (DUT)
- DUT باید از طریق Wi-Fi به نقطه دسترسی متصل شود.
- کامپیوتر مورد آزمایش باید از طریق وایفای یا اترنت به اکسس پوینت متصل باشد.
- کامپیوتر مورد آزمایش باید از طریق USB به DUT متصل شود.
تست پینگ آپلینک
حالت تأخیر کم را فعال کنید.
adb root adb shell cmd wifi force-low-latency-mode enabledمطمئن شوید که کامپیوتر شما از طریق Android Debug Bridge (ADB) به گوشی متصل است. از طریق ADB shell، به مدت ۳ ساعت و با فواصل ۱ ثانیهای، به طور مداوم به درگاه پینگ (ping) دهید.
خروجی تست را در یک فایل متنی ذخیره کنید و از یک صفحه گسترده یا یک اسکریپت پایتون برای ایجاد یک هیستوگرام از نتایج تست تأخیر پینگ استفاده کنید.
مراحل ۱ تا ۳ را با غیرفعال کردن حالت تأخیر تکرار کنید.
adb root adb shell cmd wifi force-low-latency-mode disabledنتایج آزمایش را مقایسه کنید تا تأیید کنید که با فعال کردن حالت تأخیر کم، میانگین تأخیر پینگ کاهش مییابد.
تست پینگ داونلینک
حالت تأخیر کم را فعال کنید.
adb root adb shell cmd wifi force-low-latency-mode enabledاز خط فرمان کامپیوتر آزمایشی، آدرس IP تلفن را به طور مداوم به مدت ۳ ساعت و با فواصل ۱ ثانیهای پینگ کنید.
خروجی تست را در یک فایل متنی ذخیره کنید و از یک صفحه گسترده یا یک اسکریپت پایتون برای ایجاد یک هیستوگرام از نتایج تست تأخیر پینگ استفاده کنید.
مراحل ۱ تا ۳ را با غیرفعال کردن حالت تأخیر تکرار کنید.
adb root adb shell cmd wifi force-low-latency-mode disabledنتایج آزمایش را مقایسه کنید تا تأیید کنید که با فعال کردن حالت تأخیر کم، میانگین تأخیر پینگ کاهش مییابد.
آزمایشهای دیگر
آزمایشهای قبلی را در محیطهای مختلف تکرار کنید. مثلاً در خانه یا در دفتر.