Избежание каналов 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, конфигурации и HAL API, связанные с функцией предотвращения каналов
  • Поведение каркаса для обработки избегания канала
  • Поведение поставщика микросхемы для обработки исключения канала
  • Детали реализации для предотвращения канала
  • Тесты для проверки поведения избегания канала

Фон

Для устройств с сотовыми технологиями, такими как LTE, 5G NR и Licensed Assisted Access (LAA), используемые сотовые каналы могут мешать используемому каналу Wi-Fi. Это происходит, когда каналы сотовой связи и Wi-Fi находятся в пределах короткого частотного разнесения (соседние каналы) или когда есть гармонические и интермодуляционные помехи.

Этот тип помех становится проблемой, когда одна антенна передает, а другая принимает одновременно. В этом случае передающая антенна затопляет приемную антенну, влияя на качество приема.

Этот документ относится к мешающему передатчику в качестве агрессора и приемника , испытывающего помеху в качестве жертвы. Канал Wi-Fi , который либо является агрессором или жертвой называют небезопасным каналом.

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

Эта функция выполняет предотвращение каналов, управляя каналами Wi-Fi. Схема исключения каналов Wi-Fi может быть описана как серия из четырех абстрактных шагов:

  1. Модем сообщает об изменении частоты сотовой связи
  2. Алгоритм предотвращения Coex вычисляет небезопасные каналы Wi-Fi
  3. Алгоритм предотвращения Coex сообщает об услуге Wi-Fi
  4. Платформа или драйвер выполняет соответствующее действие Wi-Fi

Схема предотвращения каналов

Схема уклонения Рисунок 1. Канал

Сообщение об изменении частоты сотовой связи

Служба телефонии сообщает об используемых в данный момент сотовых каналах. Когда изменения операционной сотовой частоты, модем передает эту информацию в службу телефонии через IRadio::PhysicalChannelConfig . Эта информация включает указания для лицензированного вспомогательного доступа (LAA) и агрегации несущих (CA).

Из Android 12, следующие поля в 1.6 IRadio::PhysicalChannelConfig предоставить необходимую информацию для коэкструзии формул , что модем должен населяет.

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 (20MHz каналы 5 ГГц)
  • 40mhz (40МГц каналы 5 ГГц)
  • 80mhz (80МГц каналы 5 ГГц)
  • 160mhz (160 МГц 5 ГГц каналов)

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

Для определения соседних помех канала, соэкструзии избегание алгоритм убеждается расстояние между ; 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, каждый более крупный канал, который его содержит (например, 40Mhz, 80Mhz), и каждый более высокий канал той же полосы, что и небезопасный канал.
  4. Если cellVictimMhz присутствует и канал клетка имеет по нисходящей линии связи.

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

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

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

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

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

$$ 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 , расположенном в overlayable конфигурации строки 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. Алгоритм обрабатывает эту полосу так же, как и другие полосы. В этом случае полные каналы 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 в различных сценариях.

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

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

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 Direct (P2P)

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

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

    1. Драйвер / прошивка поставщика применяет ограничение мощности, если используется небезопасный канал без ограничения 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()

Испытания СУДС

  • wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)