Функция предотвращения использования каналов 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 HAL, связанные с функцией избегания каналов
- Поведение структуры для обработки избегания канала
- Поведение поставщика микросхем при обработке уклонения от канала
- Подробности реализации для избегания канала
- Тесты для подтверждения поведения избегания канала
Фон
Для устройств с сотовыми технологиями, такими как LTE, 5G NR и лицензированный вспомогательный доступ (LAA), используемые каналы сотовой связи могут создавать помехи используемому каналу Wi-Fi. Это происходит, когда каналы сотовой связи и Wi-Fi находятся на небольшом частотном разносе (соседние каналы) или при наличии гармонических и интермодуляционных помех.
Подобные помехи становятся проблемой, когда одна антенна одновременно передаёт сигнал, а другая — принимает. В этом случае передающая антенна забивает сигнал приёмной, что влияет на качество приёма.
В этом документе передатчик, создающий помехи, называется агрессором , а приёмник, испытывающий помехи, — жертвой . Канал Wi-Fi, являющийся либо агрессором, либо жертвой, называется небезопасным каналом .
Функция обхода каналов Wi-Fi/сотовой связи обеспечивает единый подход к обходу каналов, снижая необходимость в проприетарном коде, отклоняющемся от фреймворка Wi-Fi. Кроме того, эта функция позволяет производителям устройств настраивать, включать, отключать и переопределять её.
Функция обеспечивает избегание каналов, управляя каналами Wi-Fi. Схему избегания каналов Wi-Fi можно описать как последовательность из четырёх абстрактных шагов:
- Модем сообщает об изменении частоты сотовой связи
- Алгоритм избегания Coex вычисляет небезопасные каналы Wi-Fi
- Алгоритм избегания Coex информирует службу 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;hte
/** Uplink cell bandwidth, in kHz */
int32_t cellBandwidthUplink;
}
Вычислите небезопасные каналы Wi-Fi
Когда модем сообщает об изменении частоты сотовой связи, алгоритм коэкспоненциального канала вычисляет помехи между каналами сотовой связи и 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:
Категории 2g:
-
all
(весь диапазон 2,4 ГГц)
Категории 5g:
-
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. Расчет небезопасного канала при наличии помех от соседних каналов
Гармонические или интермодуляционные искажения
В случае гармонических или интермодуляционных искажений алгоритм коэкспрессии вычисляет диапазон гармонического или интермодуляционного сигнала и оценивает процентное перекрытие с каналом-потенциалом, подверженным искажениям. Если перекрытие превышает пороговое значение, алгоритм считает это опасной ситуацией. Расчет процентного перекрытия гармонических или интермодуляционных искажений на канале-потенциале выполняется по следующей формуле:
В случае гармонических искажений алгоритм учитывает гармонические искажения восходящего канала сотовой связи, влияющие на каналы Wi-Fi. Затем он заменяет искажения high и low гармоническими значениями, основанными на частотах восходящего канала сотовой связи и степени гармоники $N$.
Рисунок 4. Расчет небезопасного канала для гармонических искажений
В случае интермодуляции алгоритм учитывает интермодуляционные искажения восходящего канала соты и канала Wi-Fi, влияющие на нисходящий канал соты. Затем он заменяет искажения high и low значениями интермодуляции, основанными на частотах восходящего канала соты, частотах 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 вычислит небезопасные каналы, чтобы предоставить вашим системным приложениям небезопасные каналы и их ограничения, используйте следующую структуру данных @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();
}
Используйте следующие методы и обратные вызовы WifiManager
@SystemApi, чтобы приложения могли получать обновленные значения при изменении небезопасных каналов.
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<CoexUnsafeChannels> 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()
-
тесты СУДС
Если реализован AIDL:
wifi_chip_aidl_test.cpp
-
TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
-
Если реализован HIDL:
wifi_chip_hidl_test.cpp
-
TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)
-