Избегание каналов Wi-Fi/Cellular Coex

Функция предотвращения совместного использования каналов 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 можно описать как серию из четырех абстрактных шагов:

  1. Модем сообщает об изменении частоты сотовой связи
  2. Алгоритм предотвращения Coex вычисляет небезопасные каналы Wi-Fi
  3. Алгоритм предотвращения совмещения информирует службу Wi-Fi
  4. Платформа или драйвер выполняет соответствующие действия 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 МГц)
  • 80 МГц (каналы 5 80mhz 80 МГц)
  • 160mhz (каналы 5 ГГц 160 МГц)

Помехи в соседнем канале

Чтобы определить помехи в соседнем канале, алгоритм предотвращения коэксов следит за тем, чтобы расстояние ΔF между каналом-агрессором и каналом-жертвой не опускалось ниже заданного порога .

Помехи канала

Рисунок 2. Расстояние между каналом агрессора и жертвы

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

Соседние параметры помех

  • wifiVictimMhz : пороговое значение расстояния в МГц для жертвы Wi-Fi (сотовая связь)
  • cellVictimMhz : пороговое значение расстояния в МГц для соты-жертвы (сотовая нисходящая линия связи)

Алгоритм ведет себя следующим образом для каждого активного канала ячейки:

  1. Для группы канала пытается найти запись в таблице поиска. Если запись в таблице не найдена, возвращается без небезопасных каналов для этого канала ячейки.
  2. Основываясь на диапазоне сотовой связи, определяет, какой диапазон Wi-Fi находится под угрозой и с какой стороны диапазона исходят помехи (например, более низкие каналы 2,4 ГГц, более высокие каналы 2,4 ГГц, более низкие каналы 5 ГГц).
  3. Если присутствует wifiVictimMhz и канал сотовой связи имеет восходящую и

    1. Если нижняя часть диапазона Wi-Fi находится под угрозой

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

      1. Находит нижний предел небезопасных каналов, вычитая wifiVictimMhz из самой низкой частоты восходящего канала соты.
      2. Находит первый канал Wi-Fi, верхний край которого перекрывает ограничение.
      3. Отмечает канал Wi-Fi, каждый более крупный канал, содержащий его (например, 40 МГц, 80 МГц), и каждый более высокий канал того же диапазона как небезопасный канал.
  4. Если присутствует cellVictimMhz и канал ячейки имеет нисходящую линию связи.

    1. Выполняет шаг 3, используя cellVictimMhz в качестве порога, и сравнивает с нисходящей линией связи вместо восходящей линии связи.
  5. Применяет ограничение мощности записи таблицы к рассчитанным небезопасным каналам.

Расчет небезопасного канала

Рис. 3. Расчет небезопасного канала для помех в соседнем канале

Гармонические/интермодуляционные искажения

Для гармонических/интермодуляционных искажений механизм коэкстракции вычисляет диапазон гармонического/интермодуляционного сигнала и оценивает процентное перекрытие, которое он имеет с каналом, который может быть подвержен помехам. Если перекрытие превышает порог перекрытия, алгоритм считает это небезопасной ситуацией. Расчет процентного перекрытия гармонических/интермодуляционных искажений на пострадавшем канале выполняется по следующему уравнению:

$$ overlap = \frac{min(distortion_{high}, victim_{high}) - max(distortion_{low}, victim_{low})}{victim_{bandwidth}} $$

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

$$ harmonic_{high} = N * uplink_{high} $$
$$ harmonic_{low} = N * uplink_{low} $$

Гармонические искажения при расчете небезопасного канала

Рисунок 4. Расчет небезопасного канала для гармонических искажений

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

$$ intermod_{high} = |M*wifi_{high} + N*uplink_{high}| $$
$$ intermod_{low} = |M*wifi_{low} + N*uplink_{low}| $$

Небезопасное интермодуляционное искажение расчета канала

Рисунок 5. Расчет небезопасного канала для интермодуляционных искажений

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

Подобно алгоритму соседней помехи, этот алгоритм повторно использует одно и то же значение предельной мощности, определенное для каждой полосы мешающей соты.

Алгоритм ведет себя следующим образом для каждого активного канала ячейки:

  1. Для диапазона сотового канала он пытается найти запись в таблице поиска. Если запись в таблице не найдена, возвращается без небезопасных каналов для этого канала.
  2. Находит небезопасные каналы 2,4 ГГц по гармоникам, если заданы параметры.

    1. Находит степень гармоники N для частоты 2,4 ГГц.
    2. Вычисляет гармонику высокой частоты и гармонику низкой частоты на основе N и восходящего канала соты.
    3. Находит первый канал Wi-Fi 20 МГц, который находится в пределах нижней границы гармоники, идущей снизу.
    4. Вычисляет перекрытие гармоник в канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает порог перекрытия Wi-Fi на частоте 2,4 ГГц.
    5. Находит первый канал Wi-Fi 20 МГц, который находится в пределах верхней границы гармоники, идущей сверху.
    6. Вычисляет перекрытие гармоник в канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает порог перекрытия Wi-Fi на частоте 2,4 ГГц.
    7. Отмечает каждый промежуточный канал шириной 20 МГц как небезопасный.
  3. Находит небезопасные каналы 5 ГГц по гармоникам, если заданы параметры.

    1. Находит степень гармоники N для 5 ГГц. Если N равно 0, переходит к шагу 5.
    2. Вычисляет гармонику высокой частоты и гармонику низкой частоты на основе N и восходящего канала соты.
    3. Находит небезопасные каналы 20 МГц.

      1. Находит первый канал Wi-Fi 20 МГц, который находится в пределах нижней границы гармоники, идущей снизу.
      2. Вычисляет перекрытие гармоник в канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает порог перекрытия Wi-Fi на частоте 2,4 ГГц.
      3. Находит первый канал Wi-Fi 20 МГц, который находится в пределах верхней границы гармоники, идущей сверху.
      4. Вычисляет перекрытие гармоник в канале Wi-Fi и помечает канал как небезопасный, если перекрытие превышает порог перекрытия Wi-Fi на частоте 2,4 ГГц.
      5. Помечает каждый промежуточный канал 20 МГц как небезопасный канал с указанным ограничением мощности.
    4. Находит небезопасные каналы 40 МГц, 80 МГц, 160 МГц

      1. Повторяет шаг 3а, но с 40 МГц, 80 МГц, 160 МГц.
      2. Вместо вычисления перекрытий каналов на гармоническом фронте повторно используются рассчитанные перекрытия из меньших составляющих каналов (например, если два канала 20 МГц составляют канал 40 МГц и имеют перекрытие 30% и 90%, тогда среднее перекрытие составляет 60%). для канала 40 МГц).
  4. Находит небезопасные каналы 2,4 ГГц из-за интермодуляции, если параметры определены.

    1. Находит коэффициенты интермодуляции N, M для 2,4 ГГц.
    2. Для каждого канала Wi-Fi 2,4 ГГц:

      1. Вычисляет интермодуляционную низкую частоту и интермодуляционную высокую частоту на основе N, M, исходящего канала соты и канала Wi-Fi.
      2. Вычисляет перекрытие интермодуляции в нисходящем канале соты и помечает канал как небезопасный, если перекрытие превышает пороговое значение перекрытия соты 2,4 ГГц.
  5. Находит небезопасные каналы 5 ГГц из-за интермодуляции, если заданы параметры.

    1. Повторяет шаг 4, используя каналы Wi-Fi 5 ГГц и порог перекрытия ячеек 5 ГГц.
  6. Применяет ограничение мощности записи таблицы к рассчитанным небезопасным каналам.

Конечный результат

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

Алгоритм ведет себя следующим образом:

  1. Если каждый канал Wi-Fi 2,4 ГГц помечен как небезопасный, канал Wi-Fi 2,4 ГГц по умолчанию удаляется из набора.
  2. Если каждый канал Wi-Fi 5 ГГц помечен как небезопасный, канал Wi-Fi 5 ГГц по умолчанию удаляется из набора.
  3. Возвращает окончательный набор небезопасных каналов.

Формат таблицы поиска

Таблицы поиска представлены в 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) диапазоны гармоник/интермодуляции для каждой восходящей/нисходящей линии связи могут не давать достаточного перекрытия, чтобы вызывать помехи по отдельности, но могут давать достаточное перекрытие при объединении. Алгоритм рассматривает каждый диапазон гармоник/интермодуляций независимо и использует объединение возвращаемых небезопасных каналов. Для случая интермодуляции это означает оценку диапазона интермодуляции каждой UL на каждую DL.

Алгоритм не делает различий между PCELL/PSCELL/SCELL и рассматривает их как равные.

Лицензионный доступ

Доступ с помощью лицензии (LAA) определяется как диапазон № 46. Алгоритм обрабатывает эту полосу аналогично другим полосам. В этом случае полные каналы 5Ghz могут быть установлены в качестве переопределяющего списка в таблице поиска.

В зависимости от требований оператора алгоритм обхода каналов устанавливает обязательные ограничения для SoftAP и Wi-Fi Direct (P2P) для всего диапазона Wi-Fi 5 ГГц. Чтобы алгоритм обрабатывал этот вариант использования, необходимо определить значение конфигурации оператора restrict_5g_softap_wifi_direct_for_laa . Если канал сотовой связи находится на LAA, а для restrict_5g_softap_wifi_direct_for_laa установлено значение true , алгоритм возвращает набор небезопасных каналов со всем диапазоном 5Ghz и устанавливает обязательные флаги ограничения для SoftAP и Wi-Fi Direct (P2P).

Информирование службы Wi-Fi

После того как алгоритм коэкс-канала вычислит небезопасные каналы, чтобы предоставить системным приложениям небезопасные каналы и их ограничения, используйте следующую структуру данных @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 в различных сценариях.

Информирование водителя

Поскольку драйвер играет главную роль в выполнении обхода каналов, важно передать небезопасные каналы драйверу и микропрограмме. Для этого используйте HAL API 1.5::IWifiChip .

setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
  bitfield<IfaceType> restrictions);

SoftAP

SoftAP — это основной вариант использования небезопасных каналов. В следующем разделе описываются ключевые сценарии SoftAp, в которых можно применить уклонение от каналов с помощью ACS. Сценарии описывают поведение алгоритма обхода каналов и драйвера или микропрограммы.

Запуск SoftAP с включенным ACS (SoftAP еще не запущен)

  1. Если каналы небезопасны и есть ограничение SoftAP

    1. Фреймворк удаляет небезопасные каналы из списка ACS.
    2. Если список пуст, платформа останавливает SoftAP.
  2. Если каналы небезопасны и нет ограничений

    1. Драйвер/микропрограмма поставщика отдает приоритет безопасным каналам над небезопасными.

SoftAP запущен с включенным ACS и обновлены небезопасные каналы

  1. Если канал SoftAP небезопасен и есть ограничение SoftAP

    1. Платформа обновляет список ACS, удаляя небезопасные каналы.
    2. Если список пуст, платформа закрывает SoftAP.
  2. Если канал SoftAP небезопасен и ограничений нет

    1. Фреймворк не предпринимает никаких действий. Драйвер/прошивка поставщика позволяет избегать небезопасных каналов или применять ограничение мощности, если это невозможно.

Прямой Wi-Fi (P2P)

  1. Если есть небезопасные каналы с ограничениями Wi-Fi Direct (P2P).

    1. Фреймворк запрашивает wpa_supplicant избегать небезопасных каналов, используя метод HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Если есть небезопасные каналы без ограничений.

    1. Драйвер/прошивка поставщика применяет ограничение мощности, если используется небезопасный канал без ограничения Wi-Fi Direct (P2P).

Поддержка Wi-Fi (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()

СУДС-тесты

  • wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)