Wi-Fi Aware

Функция Wi-Fi Aware, добавленная в Android 8.0, позволяет поддерживаемым устройствам обнаруживать друг друга, подключаться друг к другу и определять расстояние между ними (добавлено в Android 9) напрямую с помощью протокола Wi-Fi Aware без доступа к интернету или мобильной сети. Эта функция, основанная на спецификации Wi-Fi Aware (версии 2.0, 3.0, 3.1 и 4.0) Wi-Fi Alliance (WFA), позволяет обмениваться данными с высокой пропускной способностью между надежными устройствами и приложениями, которые не подключены к сети.

Подробное описание архитектуры Wi-Fi Aware в Android 17 и более поздних версий приведено в статье Архитектура Wi-Fi Aware.

Примеры и источник

Чтобы использовать эту функцию, производители устройств должны реализовать Wi-Fi Vendor HAL. В Android 14 и более поздних версиях интерфейс Vendor HAL определяется с помощью AIDL. Для Android 13 и более ранних версий интерфейс Vendor HAL определяется с помощью HIDL.

Чтобы использовать функцию Wi-Fi Aware, следуйте инструкциям в интерфейсе Wi-Fi. В зависимости от того, какой интерфейс реализован, это может быть:

  • AIDL: hardware/interfaces/wifi/aidl
  • HIDL: hardware/interfaces/wifi/1.2 или более поздняя версия.

Вы можете обратиться к устаревшему Wi-Fi HAL, чтобы увидеть, как он соотносится с интерфейсами AIDL и HIDL: hardware/libhardware_legacy/+/android17-release/include/hardware_legacy/wifi_nan.h.

Реализация

Производители устройств должны обеспечить поддержку как фреймворка, так и HAL/встроенного ПО:

  • Фреймворк:
    • Код Android Open Source Project (AOSP)
    • Включить Aware: требуется флаг функции и флаг сборки.
  • Поддержка Wi-Fi Aware (NAN) HAL (что подразумевает поддержку встроенного ПО).

Чтобы реализовать эту функцию, производители устройств должны внедрить интерфейс Wi-Fi и включить два флага функции:

  • В файле BoardConfig.mk или BoardConfig-common.mk, расположенном в каталоге device/<oem>/<device>, добавьте следующий флаг:

    WIFI_HIDL_FEATURE_AWARE := true
    
  • В файле device.mk, который находится в каталоге device/<oem>/<device>, измените переменную среды PRODUCT_COPY_FILES, чтобы включить поддержку функции Wi-Fi Aware:

    PRODUCT_COPY_FILES +=
    frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
    

Wi-Fi Aware позволяет определять расстояние до одноранговых устройств с помощью протокола IEEE 802.11mc, также известного как Round Trip Time (RTT). Эта функция Wi-Fi Aware зависит от того, поддерживает ли устройство Wi-Fi RTT. То есть для ее работы необходима поддержка и Wi-Fi Aware, и Wi-Fi RTT. Подробнее о Wi-Fi RTT…

В противном случае все необходимое для этой функции включено в AOSP.

Флаг WIFI_HIDL_FEATURE_AWARE игнорируется, если указан флаг WIFI_HAL_INTERFACE_COMBINATIONS. Подробнее о многоинтерфейсном режиме Wi-Fi…

Случайное назначение MAC-адреса

В Android MAC-адрес интерфейсов обнаружения Wi-Fi Aware (NMI) и передачи данных (NDP) должен быть случайным и не совпадать с реальным MAC-адресом устройства. MAC-адреса должны соответствовать следующим требованиям:

  • Случайный, когда Wi-Fi Aware включен или снова включен.
  • Если функция Wi-Fi Aware включена, MAC-адрес должен случайным образом меняться через регулярные интервалы, заданные параметром NanConfigRequest.macAddressRandomizationIntervalSec. По умолчанию фреймворк задает значение 30 минут.

приостанавливать и возобновлять работу;

В Android 14 и более поздних версий приложения с привилегиями могут приостанавливать и возобновлять активные сеансы обнаружения Wi-Fi Aware (включая все пути передачи данных, связанные с этими сеансами). Поддержка этой возможности позволяет устройствам быстрее возобновлять сеансы обнаружения и потреблять меньше энергии, поскольку сеансы обнаружения можно приостанавливать.

Если устройство поддерживает приостановку и возобновление, встроенное ПО приостанавливает сеанс Wi-Fi Aware, когда привилегированное приложение приостанавливает сеанс обнаружения. Когда сеанс обнаружения приостановлен, устройство не передает и не получает никаких фреймов для этого сеанса, включая любые активные NDP в этом сеансе. Если все сеансы обнаружения приостановлены, устройство не передает и не получает фреймы Wi-Fi Aware.

Когда привилегированное приложение возобновляет приостановленный сеанс обнаружения, фреймворк возвращает сеанс в предыдущее состояние, включая все связанные сеансы NDP. Возобновить приостановленный сеанс обнаружения быстрее, чем запустить Wi-Fi Aware и создать новый сеанс.

Чтобы поддерживать возможность приостановки и возобновления сеансов обнаружения, производители устройств должны обеспечить поддержку HAL и встроенного ПО. Подробную информацию можно найти в статье IWifiNanIface.java.

Производители устройств могут использовать внеполосную связь (например, BLE) для синхронизации перехода в спящий режим и выхода из него на нескольких устройствах.

Проверка

В Android есть набор модульных тестов, тестов Compatibility Test Suite (CTS) и тестов CTS Verifier, которые позволяют проверить функцию Wi-Fi Aware. Проверить Wi-Fi Aware можно также с помощью набора тестов поставщика (VTS).

Модульные тесты

Тесты пакета Wi-Fi Aware выполняются с использованием:

Тестирование сервисов:

atest com.android.server.wifi.aware

Тесты в управляющем аккаунте:

atest android.net.wifi.aware

Тесты Compatibility Test Suite (CTS)

Используйте тесты CTS, чтобы проверить функцию Wi-Fi Aware. CTS определяет, когда функция включена, и автоматически добавляет связанные с ней тесты.

Тесты CTS можно запустить с помощью:

atest SingleDeviceTest

Тесты CTS Verifier

Тесты CTS Verifier проверяют работу Wi-Fi Aware с помощью двух устройств: тестового и исправного. Чтобы запустить тесты, откройте CTS Verifier и перейдите в раздел Wi-Fi Aware Tests (Тесты Wi-Fi Aware).