Избегание совместного канала Wi-Fi/сотовой связи

Функция предотвращения коексных каналов 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. Алгоритм предотвращения 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:

2г категории:

  • all (весь диапазон 2,4 ГГц)

Категории 5g:

  • all (весь диапазон 5 ГГц)
  • 20mhz (каналы 5 ГГц, 20 МГц)
  • 40mhz (каналы 5 ГГц 40 МГц)
  • 80mhz (каналы 5 ГГц 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. Алгоритм обрабатывает эту полосу так же, как и другие полосы. В этом случае все каналы 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 сервис

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

Для АИДЛ:

void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
  in int restrictions)

Для HIDL (1,5 или выше):

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

СофтАП

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

тесты СУДС

  • Если AIDL реализован: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • Если реализован HIDL: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)