Функция предотвращения использования небезопасных каналов Wi-Fi и сотовой связи, представленная в Android 12, выявляет и предотвращает использование небезопасных каналов Wi-Fi в случаях, когда возможны помехи от сотовых каналов или для них. Это включает такие интерфейсы, как STA, SoftAp, Wi-Fi Direct (P2P) и Wi-Fi Aware (NAN).
На этой странице обсуждаются следующие вопросы:
- Информация, которую сотовый модем должен передавать в платформу Android.
- Алгоритмы, используемые фреймворком Wi-Fi для расчета каналов Wi-Fi, которых следует избегать.
- Таблицы конфигурации, которые производители устройств обязаны предоставлять для работы с протоколом Wi-Fi.
- Системные API, конфигурационные API и API HAL, относящиеся к функции предотвращения подключения к каналу.
- Механизм обработки избегания каналов связи.
- Действия производителя микросхем при обработке случаев избегания каналов связи.
- Детали реализации механизма избегания каналов связи.
- Тесты для проверки поведения, связанного с избеганием каналов связи.
Фон
Для устройств с сотовыми технологиями, такими как LTE, 5G NR и Licensed Assisted Access (LAA), используемые сотовые каналы могут создавать помехи для используемого канала Wi-Fi. Это происходит, когда сотовые и Wi-Fi каналы находятся на небольшом частотном расстоянии друг от друга (соседние каналы) или когда присутствуют гармонические и интермодуляционные помехи.
Этот тип помех становится проблемой, когда одна антенна одновременно передает сигнал, а другая принимает. В этом случае передающая антенна создает помехи для принимающей антенны, что ухудшает качество приема.
В этом документе источник помех называется агрессором , а получатель, испытывающий помехи, — жертвой . Wi-Fi-канал, являющийся либо агрессором, либо жертвой, называется небезопасным каналом .
Функция предотвращения переключения каналов между Wi-Fi и сотовой связью обеспечивает согласованный подход к предотвращению переключения каналов, снижая необходимость в проприетарном коде, отличающемся от стандартной архитектуры Wi-Fi. Кроме того, эта функция позволяет производителям устройств настраивать, включать, отключать и переопределять данную функцию.
Данная функция осуществляет предотвращение использования неподходящих каналов путем управления каналами Wi-Fi. Схема предотвращения использования неподходящих каналов Wi-Fi может быть описана как последовательность из четырех абстрактных шагов:
- Модем сообщает об изменении частоты сотовой связи.
- Алгоритм предотвращения совместного использования сетей (Coex avoidance algorithm) вычисляет небезопасные каналы Wi-Fi.
- Алгоритм предотвращения совместного использования устройств предоставляет информацию о работе Wi-Fi-сервиса.
- Платформа или драйвер выполняет соответствующее действие в отношении Wi-Fi.

Рисунок 1. Схема избегания канала связи.
Сообщить об изменении частоты сотовой связи
Телефонная служба сообщает об используемых сотовых каналах. При изменении рабочей сотовой частоты модем передает эту информацию телефонной службе через IRadio::PhysicalChannelConfig . Эта информация включает в себя показания для лицензированного вспомогательного доступа (LAA) и агрегации несущих (CA).
Начиная с Android 12, следующие поля в 1.6 IRadio::PhysicalChannelConfig предоставляют необходимую информацию для формул coex, которые должен заполнить модем.
struct PhysicalChannelConfig {
/** Connection status for cell. Valid values are PRIMARY_SERVING and SECONDARY_SERVING */
CellConnectionStatus status;
/** The radio technology for this physical channel */
RadioTechnology rat;
/** Downlink Absolute Radio Frequency Channel Number */
int32_t channelNumberDownlink;
/** Uplink Absolute Radio Frequency Channel Number */
int32_t channelNumberUplink;
/** Downlink cell bandwidth, in kHz */
int32_t cellBandwidthDownlink;
/** Uplink cell bandwidth, in kHz */
int32_t cellBandwidthUplink;
}
Рассчитайте количество небезопасных каналов Wi-Fi.
Когда модем сообщает об изменении частоты сотовой связи, алгоритм работы канала coex вычисляет помехи между сотовыми и Wi-Fi каналами и определяет, какие Wi-Fi каналы являются небезопасными.
Существует несколько типов помех, требующих различных формул: помехи от соседних сетей и гармонические/интермодуляционные помехи . Из-за физических различий в антеннах и компоновке устройств, диаграммы направленности помех от соседних сетей и гармонических/интермодуляционных помех для каждого устройства различны. Чтобы учесть это, производители устройств должны предоставлять справочную таблицу для подстановки параметров в общие формулы для двух типов помех. Эти параметры определяются для каждого диапазона сотовой связи и ссылаются на диапазоны активных каналов сотовой связи.
В таблице соответствия можно задать максимальное ограничение мощности. Если оно задано, небезопасный канал будет передавать данные с указанным ограничением мощности. В противном случае канал будет передавать данные на полной мощности.
В целом, функция предотвращения использования небезопасных каналов Wi-Fi использует подход «максимальных усилий» для оптимизации производительности. Однако в некоторых случаях (например, из-за требований оператора связи) для определенных интерфейсов обязательно предотвращение использования небезопасных каналов в определенных диапазонах сотовой связи. В таких случаях обязательные ограничения представляются в виде битовой маски, содержащей значения, указывающие, следует ли запрещать определенные каналы, такие как Wi-Fi Direct (P2P), SoftAP и Wi-Fi Aware (NAN). В то время как небезопасный канал служит рекомендацией против его использования во всех сценариях, обязательные ограничения обозначают конкретные сценарии использования, для которых требуется обязательное предотвращение использования.
Если каждый канал диапазона 2,4 ГГц или 5 ГГц помечен как небезопасный, в таблице соответствия можно определить канал 2,4 ГГц или канал 5 ГГц по умолчанию для каждого мешающего диапазона сот в качестве наиболее безопасного варианта. Эти каналы по умолчанию не отображаются как небезопасные, если остальные каналы диапазона также помечены как небезопасные.
Список переопределений
Формульный подход ограничен в случаях, когда помехи сильно зависят от полосы пропускания (и, следовательно, каналы с большей полосой пропускания могут быть небезопасными, а каналы с меньшей полосой пропускания — нет). В таких случаях, как с LAA, целесообразно отказаться от вычислений и использовать заданный список небезопасных каналов.
Для этого можно указать список переопределения небезопасных каналов в таблице поиска для определенных записей. Список переопределения в записи таблицы указывает, что вычисление для этого конкретного сотового канала пропускается. Вместо этого список переопределения явно указывает небезопасные каналы Wi-Fi для соответствующего сотового канала.
В случаях, когда пропускная способность сети имеет решающее значение, вы можете выборочно исключать определенные полосы пропускания, указав в списке переопределения определенные каналы с определенными полосами пропускания. Это связано с тем, что каждому номеру канала Wi-Fi соответствует заданная полоса пропускания.
Список переопределений представлен перечнем номеров каналов или предопределенных ключевых слов категорий для каждого диапазона Wi-Fi:
Категории 2 г:
-
all(весь диапазон 2,4 ГГц)
Категории 5 г:
-
all(весь диапазон 5 ГГц) -
20mhz(каналы 5 ГГц 20 МГц) -
40mhz(каналы 5 ГГц 40 МГц) -
80mhz(каналы 5 ГГц 80 МГц) -
160mhz(5 ГГц, каналы 160 МГц)
Помехи от соседних каналов
Для определения помех от соседних каналов алгоритм предотвращения совместной работы гарантирует, что расстояние ΔF между каналом-агрессором и каналом-жертвой не опустится ниже заданного порогового значения .

Рисунок 2. Расстояние между агрессором и жертвой.
Пороговое значение определяется физической конфигурацией устройства и пороговым значением, указанным в записи таблицы соответствия для каждой мешающей полосы частот. Для полос, которые считаются не создающими помех, запись в таблице отсутствует, и расчет небезопасных каналов не требуется (это происходит в большинстве случаев).
Параметры соседних помех
-
wifiVictimMhz: Пороговое значение расстояния в МГц для жертвы Wi-Fi (восходящий канал сотовой связи) -
cellVictimMhz: Пороговое значение расстояния в МГц для жертвы (нисходящий канал связи соты)
Для каждого активного клеточного канала алгоритм работает следующим образом:
- Для диапазона канала предпринимается попытка найти запись в таблице соответствия. Если запись в таблице не найдена, возвращается сообщение об отсутствии небезопасных каналов для данного сотового канала.
- На основе диапазона сотовой связи определяется, какой диапазон Wi-Fi находится в зоне риска и с какой стороны диапазона исходят помехи (например, нижние каналы 2,4 ГГц, верхние каналы 2,4 ГГц, нижние каналы 5 ГГц).
Если присутствует
wifiVictimMhzи канал сотовой связи имеет восходящий канал,Если нижний диапазон Wi-Fi находится под угрозой:
- Определяет верхний предел небезопасных каналов, добавляя
wifiVictimMhzк самой высокой частоте восходящего канала сотовой связи. - Находит первый канал Wi-Fi с частотой 20 МГц, нижняя граница которого перекрывает предел.
- Помечает канал Wi-Fi, все каналы с большей полосой пропускания, которые его содержат (например, 40 МГц, 80 МГц), и все каналы с меньшей полосой пропускания в том же диапазоне, что и небезопасный канал.
- Определяет верхний предел небезопасных каналов, добавляя
Если верхняя часть диапазона Wi-Fi находится под угрозой:
- Определяет нижний предел небезопасных каналов, вычитая wifiVictimMhz из самой низкой частоты восходящего канала сотовой связи.
- Находит первый канал Wi-Fi, верхняя граница которого перекрывает предел.
- Помечает канал Wi-Fi, все более крупные каналы, содержащие его (например, 40 МГц, 80 МГц), и все более высокие каналы той же полосы, что и небезопасный канал.
Если
cellVictimMhzприсутствует и канал сотовой связи имеет нисходящий канал:- На шаге 3 используется значение
cellVictimMhzв качестве порогового значения, и сравнение выполняется с нисходящим каналом сотовой связи, а не с восходящим.
- На шаге 3 используется значение
Эта функция применяет ограничение мощности, указанное в таблице, к рассчитанным небезопасным каналам.

Рисунок 3. Расчет небезопасного канала при наличии помех от соседних каналов.
Гармонические или интермодуляционные искажения
Для гармонических или интермодуляционных искажений механизм coex вычисляет диапазон гармонического или интермодуляционного сигнала и оценивает процент его перекрытия с потенциальным каналом-мишенью. Если перекрытие превышает пороговое значение, алгоритм считает это небезопасной ситуацией. Расчет процента перекрытия гармонических или интермодуляционных искажений на канале-мишени выполняется по следующей формуле:
В случае гармонических искажений алгоритм рассматривает гармонические искажения канала восходящей связи сотовой сети, использующего каналы Wi-Fi. Затем он заменяет высокие и низкие значения искажений значениями гармоник, основанными на частотах восходящей связи сотовой сети и степени гармоники $N$.

Рисунок 4. Расчет небезопасного канала для гармонических искажений.
В случае интермодуляции алгоритм учитывает интермодуляционные искажения восходящего канала сотовой связи и канала Wi-Fi, при этом нисходящий канал сотовой связи подвергается воздействию. Затем он заменяет высокие и низкие значения искажений интермодуляционными значениями, основанными на частотах восходящего канала сотовой связи, частотах Wi-Fi и двух коэффициентах интермодуляции $M$ и $N$.

Рисунок 5. Расчет небезопасного канала для интермодуляционных искажений.
В таблице поиска можно указать значения $M$, $N$ и перекрытия для каждого диапазона мешающих сот. Если для диапазона нет помех, то значения для этой записи в таблице опускаются. Для диапазонов Wi-Fi 2,4 ГГц и 5 ГГц можно независимо задать два набора этих значений.
Подобно алгоритму обнаружения помех от соседних сот, данный алгоритм использует одно и то же значение ограничения мощности, определенное для каждого диапазона частот, создающих помехи.
Для каждого активного клеточного канала алгоритм работает следующим образом:
- Для диапазона сотового канала программа пытается найти запись в таблице соответствия. Если запись в таблице не найдена, возвращается сообщение об отсутствии небезопасных каналов для данного канала.
Определяет небезопасные каналы 2,4 ГГц по гармоникам, если заданы соответствующие параметры.
- Находит степень гармоники N для частоты 2,4 ГГц.
- Вычисляет высокочастотную и низкочастотную гармоники на основе N и восходящего канала сотовой связи.
- Находит первый канал Wi-Fi в диапазоне 20 МГц, находящийся в пределах нижней границы гармоники, идущей снизу.
- Вычисляет перекрытие гармоник на канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает пороговое значение для диапазона Wi-Fi 2,4 ГГц.
- Находит первый канал Wi-Fi в диапазоне 20 МГц, находящийся в пределах верхней границы гармоники, идущей сверху.
- Вычисляет перекрытие гармоник на канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает пороговое значение для диапазона Wi-Fi 2,4 ГГц.
- Помечает каждый промежуточный канал частотой 20 МГц как небезопасный.
Определяет небезопасные каналы 5 ГГц по гармоникам, если заданы соответствующие параметры.
- Находит степень гармоники N для частоты 5 ГГц. Если N равно 0, переходит к шагу 5.
- Вычисляет высокочастотную и низкочастотную гармоники на основе N и восходящего канала сотовой связи.
Обнаруживает небезопасные каналы частотой 20 МГц.
- Находит первый канал Wi-Fi в диапазоне 20 МГц, находящийся в пределах нижней границы гармоники, идущей снизу.
- Вычисляет перекрытие гармоник на канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает пороговое значение для диапазона Wi-Fi 2,4 ГГц.
- Находит первый канал Wi-Fi в диапазоне 20 МГц, находящийся в пределах верхней границы гармоники, идущей сверху.
- Вычисляет перекрытие гармоник на канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает пороговое значение для диапазона Wi-Fi 2,4 ГГц.
- Помечает каждый промежуточный канал с частотой 20 МГц как небезопасный канал с указанным ограничением мощности.
Обнаруживает небезопасные каналы 40 МГц, 80 МГц, 160 МГц.
- Повторяет шаг 3а, но с частотами 40 МГц, 80 МГц, 160 МГц.
- Вместо вычисления перекрытий каналов на гармоническом фронте, используется повторно вычисленное перекрытие меньших составляющих каналов (например, если два канала по 20 МГц образуют канал 40 МГц и имеют перекрытие 30% и 90%, то среднее значение перекрытия для канала 40 МГц составляет 60%).
При наличии заданных параметров функция выявляет небезопасные каналы 2,4 ГГц, подверженные интермодуляционным искажениям.
- Находит коэффициенты интермодуляции N и M для частоты 2,4 ГГц.
Для каждого канала Wi-Fi 2,4 ГГц:
- Вычисляет низкочастотную и высокочастотную интермодуляцию на основе параметров N, M, восходящего канала сотовой связи и канала Wi-Fi.
- Вычисляет перекрытие интермодуляционных искажений в нисходящем канале сотовой связи и помечает канал как небезопасный, если перекрытие превышает пороговое значение перекрытия сотовой связи в диапазоне 2,4 ГГц.
При наличии заданных параметров функция выявляет небезопасные каналы 5 ГГц, подверженные интермодуляционным искажениям.
- Повторите шаг 4, используя каналы Wi-Fi 5 ГГц и пороговое значение перекрытия сот 5 ГГц.
Применяет ограничение мощности, указанное в таблице, к рассчитанным небезопасным каналам.
Окончательный результат
После вычисления обоих наборов небезопасных каналов, подверженных влиянию соседних каналов и гармонических помех, окончательный набор вычисляется путем объединения обоих наборов (и выбора меньшего предела мощности, если имеются коллизии) и удаления из набора каналов по умолчанию, если обязательные ограничения не применяются.
Алгоритм работает следующим образом:
- Если каждый канал Wi-Fi 2,4 ГГц помечен как небезопасный, удаляется основной канал Wi-Fi 2,4 ГГц из списка.
- Если каждый канал Wi-Fi 5 ГГц помечен как небезопасный, удаляет из набора основной канал Wi-Fi 5 ГГц.
- Возвращает окончательный набор небезопасных каналов.
Формат таблицы поиска
Таблицы поиска представлены в XML-файле, расположенном в перекрываемой конфигурационной строке config_wifiCoexTableFilepath , и определены следующей XSD-схемой.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xsd:element name="table">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="entry" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="entry">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="rat" type="ratType"/>
<xsd:element name="band" type="xsd:int"/>
<xsd:element name="powerCapDbm" type="xsd:int" minOccurs="0"/>
<xsd:choice>
<xsd:element ref="params"/>
<xsd:element ref="override"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="ratType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="LTE"/>
<xsd:enumeration value="NR"/>
</xsd:restriction>
</xsd:simpleType>
<!-- Define coex algorithm parameters -->
<xsd:element name="params">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="neighborThresholds" minOccurs="0"/>
<xsd:element name="harmonicParams2g" type="harmonicParams" minOccurs="0"/>
<xsd:element name="harmonicParams5g" type="harmonicParams" minOccurs="0"/>
<xsd:element name="intermodParams2g" type="intermodParams" minOccurs="0"/>
<xsd:element name="intermodParams5g" type="intermodParams" minOccurs="0"/>
<xsd:element ref="defaultChannels" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="neighborThresholds">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="wifiVictimMhz" type="xsd:int" minOccurs="0"/>
<xsd:element name="cellVictimMhz" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="harmonicParams">
<xsd:sequence>
<xsd:element name="N" type="xsd:int"/>
<xsd:element name="overlap" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="intermodParams">
<xsd:sequence>
<xsd:element name="N" type="xsd:int"/>
<xsd:element name="M" type="xsd:int"/>
<xsd:element name="overlap" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="defaultChannels">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="default2g" type="xsd:int" minOccurs="0"/>
<xsd:element name="default5g" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Define algorithm override lists -->
<xsd:element name="override">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="override2g" minOccurs="0"/>
<xsd:element ref="override5g" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="override2g">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="category" type="overrideCategory2g" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="override5g">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="category" type="overrideCategory5g" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="overrideCategory2g">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="all"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="overrideCategory5g">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="all"/>
<xsd:enumeration value="20Mhz"/>
<xsd:enumeration value="40Mhz"/>
<xsd:enumeration value="80Mhz"/>
<xsd:enumeration value="160Mhz"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Пример XML-таблицы
Ниже приведен пример XML-таблицы поиска:
<table>
<!-- Entry using algorithm parameters -->
<entry>
<rat>LTE</rat>
<band>40</band>
<powerCapDbm>50</powerCapDbm>
<params>
<neighborThresholds>
<wifiVictimMhz>25</wifiVictimMhz>
<cellVictimMhz>40</cellVictimMhz>
</neighborThresholds>
<harmonicParams2g>
<N>3</N>
<overlap>50</overlap>
</harmonicParams2g>
<harmonicParams5g>
<N>3</N>
<overlap>50</overlap>
</harmonicParams5g>
<intermodParams2g>
<N>-2</N>
<M>1</M>
<overlap>75</overlap>
</intermodParams2g>
<intermodParams5g>
<N>-2</N>
<M>1</M>
<overlap>75</overlap>
</intermodParams5g>
<defaultChannels>
<default2g>6</default2g>
<default5g>36</default5g>
</defaultChannels>
</params>
</entry>
<!-- Entry using the override list -->
<entry>
<rat>LTE</rat>
<band>41</band>
<powerCapDbm>50</powerCapDbm>
<override>
<override2g>
<channel>6</channel>
<channel>11</channel>
...
</override2g>
<override5g>
<category>40Mhz</category>
<channel>34</channel>
...
</override5g>
</override>
</entry>
</table>
Агрегация носителей
В случае агрегации несущих (CA) диапазоны гармоник или интермодуляции для каждого восходящего или нисходящего канала могут не обеспечивать достаточного перекрытия для возникновения помех по отдельности, но могут обеспечить достаточное перекрытие при объединении. Алгоритм рассматривает каждый диапазон гармоник или интермодуляции независимо и берет объединение возвращенных небезопасных каналов. В случае интермодуляции это означает оценку диапазона интермодуляции каждого восходящего канала на каждый нисходящий канал.
Алгоритм не делает различий между PCELL, PSCELL и SCELL и рассматривает их как равные.
Доступ с помощью лицензии
Доступ с поддержкой лицензирования (LAA) обозначается как диапазон № 46. Алгоритм обрабатывает этот диапазон аналогично другим диапазонам. В этом случае все 5 ГГц каналов могут быть заданы в качестве списка переопределений в таблице поиска.
В зависимости от требований оператора связи, алгоритм предотвращения доступа к каналам устанавливает обязательные ограничения для SoftAP и Wi-Fi Direct (P2P) для всего диапазона Wi-Fi 5 ГГц. Для обработки этого сценария алгоритм должен иметь заданное значение параметра конфигурации оператора связи restrict_5g_softap_wifi_direct_for_laa . Если канал соты находится в LAA и restrict_5g_softap_wifi_direct_for_laa имеет true , алгоритм возвращает набор небезопасных каналов для всего диапазона 5 ГГц и устанавливает обязательные флаги ограничения для SoftAP и Wi-Fi Direct (P2P).
Сообщить о проблеме с Wi-Fi-сервисом
После того, как алгоритм Coex Channel определит небезопасные каналы, для предоставления системным приложениям информации о небезопасных каналах и связанных с ними ограничениях используйте следующую структуру данных @SystemApi, определенную в фреймворке Android.
public final class CoexUnsafeChannel {
public static final int POWER_CAP_NONE
public @WifiAnnotations.WifiBandBasic int getBand();
public int getChannel();
// Returns the specified power cap in dBm, or POWER_CAP_NONE if not specified.
public int getPowerCapDbm();
}
Используйте следующие методы и функцию обратного вызова @SystemApi WifiManager , чтобы приложения могли получать обновленные значения при изменении небезопасных каналов.
public static final int COEX_RESTRICTION_WIFI_DIRECT;
public static final int COEX_RESTRICTION_SOFTAP;
public static final int COEX_RESTRICTION_WIFI_AWARE;
// Register a CoexCallback to listen on onCoexUnsafeChannelsChanged callbacks. The callback will be called whenever the unsafe channels change, as well as immediately after registering to get the current values.
public void registerCoexCallback(Executor executor, CoexCallback callback);
public void unregisterCoexCallback(CoexCallback callback);
public abstract static class CoexCallback {
//Gets called whenever getCoexUnsafeChannels()/getCoexRestrictions() have updated values
public void onCoexUnsafeChannelsChanged(List<CoexUnsafeChannel> unsafeChannels,
int restrictions);
}
Выполните действие Wi-Fi
Когда служба Wi-Fi получает информацию о наборе небезопасных каналов, она выполняет соответствующие действия, чтобы избежать использования этих каналов. В этом разделе описывается поведение службы Wi-Fi в различных сценариях.
Сообщите водителю
Поскольку драйвер играет важную роль в обеспечении предотвращения небезопасных каналов, крайне важно передавать драйверу и прошивке информацию о таких каналах. Для этого используйте следующий API IWifiChip HAL.
Для AIDL:
void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
in int restrictions)
Для HIDL (1,5 или выше):
setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
bitfield<IfaceType> restrictions);
SoftAP
SoftAP — это основной вариант использования небезопасного обхода каналов. В следующем разделе описаны ключевые сценарии SoftAP, в которых обход каналов может применяться с помощью ACS. Сценарии описывают поведение алгоритма обхода каналов и драйвера или встроенного программного обеспечения.
Запустите SoftAP с включенным ACS (SoftAP пока не запущен).
Если каналы небезопасны и существует ограничение SoftAP:
- Данная система удаляет небезопасные каналы из списка ACS.
- Если список пуст, платформа останавливает работу SoftAP.
Если каналы небезопасны и нет ограничений:
- Драйвер или микропрограмма производителя отдают приоритет безопасным каналам перед небезопасными.
SoftAP запущен, ACS включен, и небезопасные каналы обновлены.
Если канал SoftAP небезопасен и существует ограничение SoftAP:
- Данная система обновляет список ACS, удаляя небезопасные каналы.
- Если список пуст, платформа закрывает SoftAP.
Если канал SoftAP небезопасен и нет никаких ограничений:
- Никакие действия со стороны платформы не предпринимаются. Драйвер производителя или встроенное ПО обрабатывают предотвращение использования небезопасных каналов или применение ограничения мощности, если предотвращение невозможно.
Wi-Fi Direct (P2P)
Если обнаружены небезопасные каналы с ограничениями Wi-Fi Direct (P2P):
- Фреймворк запрашивает у
wpa_supplicantблокировку небезопасных каналов с помощью метода HALISupplicantP2pIface::setDisallowedFrequencies().
- Фреймворк запрашивает у
Если есть небезопасные каналы без ограничений:
- Ограничение мощности устанавливается драйвером или встроенным ПО производителя, если используется небезопасный канал без ограничений Wi-Fi Direct (P2P).
Wi-Fi Aware (NAN)
Данная платформа не участвует в выборе канала для Wi-Fi Aware (NAN), и никаких действий со стороны платформы не предпринимается. За предотвращение использования каналов Wi-Fi Aware (NAN) отвечает драйвер или встроенное ПО производителя.
Отключить алгоритм
Если вы хотите отключить реализацию алгоритма по умолчанию и передать собственный список небезопасных каналов для предотвращения их использования, настройте параметр config_wifiDefaultCoexAlgorithmEnabled . Если параметр установлен в false , алгоритм по умолчанию отключается. Затем вы можете использовать свой собственный внеполосный алгоритм для генерации списка небезопасных каналов, которые будут подключены к фреймворку с помощью следующего системного API.
public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
int coexRestrictions);
Проверьте реализацию.
Для проверки правильности реализации функции предотвращения использования кооперативных каналов Wi-Fi и сотовой связи используйте следующие тесты.
Тесты CTS
-
WifiManagerTest.java-
testCoexMethodsShouldFailNoPermission() -
testListenOnCoexUnsafeChannels()
-
Тесты ACTS
-
WifiManagerTest.py-
test_set_get_coex_unsafe_channels()
-
Тесты VTS
- Если AIDL реализован:
wifi_chip_aidl_test.cpp-
TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
-
- Если реализован HIDL:
wifi_chip_hidl_test.cpp-
TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)
-