Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Evitación de canales coexistentes de Wi-Fi / celular

La función de evitación de canal coexistente de Wi-Fi / celular, introducida en Android 12, identifica y evita el uso de canales de Wi-Fi inseguros en los casos en que podría haber interferencia desde / hacia canales celulares. Esto incluye interfaces como STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

Esta página analiza lo siguiente:

  • Información que el módem celular debe reportar al marco de Android
  • Algoritmos que utiliza el marco de Wi-Fi para calcular los canales de Wi-Fi que deben evitarse
  • Tablas de configuración que los fabricantes de dispositivos deben proporcionar para el marco de Wi-Fi
  • API del sistema, configuraciones y API de HAL relacionadas con la función de evitación de canales
  • Comportamiento del marco para manejar la evasión de canales
  • Comportamiento del proveedor de chips para manejar la evasión de canales
  • Detalles de implementación para evitar canales
  • Pruebas para validar el comportamiento de evitación del canal

Fondo

Para dispositivos con tecnologías celulares como LTE, 5G NR y Acceso asistido con licencia (LAA), los canales celulares en uso pueden interferir con el canal Wi-Fi en uso. Esto ocurre cuando los canales celulares y Wi-Fi están dentro de una separación de frecuencia corta (canales vecinos) o cuando hay interferencia armónica y de intermodulación.

Este tipo de interferencia se convierte en un problema cuando una antena está transmitiendo y otra está recibiendo al mismo tiempo. En este caso, la antena transmisora ​​inunda la antena receptora, lo que afecta su calidad de recepción.

Este documento se refiere a la transmisor interferente como el agresor y el receptor que experimenta la interferencia como la víctima. El canal de conexión Wi-Fi que es ya sea el agresor o la víctima se le conoce como un canal inseguro.

La función de evitación de canal coexistente de Wi-Fi / celular proporciona un enfoque coherente para evitar el canal, lo que reduce la necesidad de un código propietario que difiera del marco de Wi-Fi. Además, la función permite a los fabricantes de dispositivos configurar, habilitar y deshabilitar y anular la función.

La función evita canales controlando los canales Wi-Fi. El esquema de evitación de canales Wi-Fi se puede describir como una serie de cuatro pasos abstractos:

  1. El módem informa cambios en la frecuencia celular
  2. El algoritmo de evitación de Coex calcula los canales de Wi-Fi inseguros
  3. El algoritmo de evitación de coexistencia informa el servicio de Wi-Fi
  4. El marco o el controlador realiza la acción de Wi-Fi adecuada

Esquema de evitación de canales

Esquema de evitación de la Figura 1. Canal

Informar un cambio en la frecuencia celular

El servicio de telefonía informa los canales celulares actualmente en uso. Cuando la frecuencia de funcionamiento cambia celular, el módem informa esta información al servicio de telefonía a través IRadio::PhysicalChannelConfig . Esta información incluye indicaciones para el acceso asistido con licencia (LAA) y la agregación de operadores (CA).

De androide 12, los siguientes campos en 1.6 IRadio::PhysicalChannelConfig proporcionar información sobre su COEX de las fórmulas que el módem debe rellenar.

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;
}

Cálculo de canales Wi-Fi no seguros

Cuando el módem informa un cambio en la frecuencia celular, el algoritmo de canal coexual calcula la interferencia entre los canales celulares y Wi-Fi y determina qué conjunto de canales Wi-Fi no son seguros.

Hay múltiples tipos de interferencia que requieren diferentes fórmulas: vecinos y / intermodulación armónico. Debido a las diferencias físicas en la antena y el diseño entre dispositivos, los patrones de interferencia de intermodulación / armónicos vecinos y para cada dispositivo son diferentes. Para tener en cuenta esto, los fabricantes de dispositivos deben proporcionar una tabla de búsqueda para los parámetros de enchufe en las fórmulas genéricas para los dos tipos de interferencia. Estos parámetros se definen por banda de celda y están referenciados por las bandas de los canales de celda activos.

Una tapa de potencia máxima se puede definir en la tabla de búsqueda. Si se define un límite de potencia máximo, un canal inseguro transmite con el límite de potencia proporcionado. Si no hay límite de potencia, el canal transmite a máxima potencia.

En general, la función de evitación de canales utiliza un enfoque de mejor esfuerzo para evitar canales de Wi-Fi inseguros para optimizar el rendimiento. Pero en ciertos casos (por ejemplo, debido a los requisitos del operador), es obligatorio que ciertas interfaces eviten canales inseguros para ciertas bandas celulares. En tales casos, las restricciones obligatorias son representados como una máscara de bits que contiene valores para si para prohibir ciertos canales tales como Wi-Fi Direct (P2P), SoftAP, y Wi-Fi Aware (NAN). Si bien un canal inseguro actúa como una recomendación contra el uso de ese canal para todos los casos de uso, las restricciones obligatorias marcan casos de uso específicos para evitarlos obligatoriamente.

Si cada canal de la banda de 2,4 GHz o 5 GHz está marcado como inseguro, la tabla de búsqueda puede definir un canal predeterminado de 2,4 GHz o un canal predeterminado de 5 GHz por banda de celda interferente como la opción más segura. Estos canales predeterminados no se informan como canales inseguros cuando el resto de la banda se informa como inseguro.

Lista de anulación

Un enfoque basado en fórmulas es limitado en los casos en que la interferencia depende en gran medida del ancho de banda (y, por lo tanto, los canales con un ancho de banda mayor pueden ser inseguros, pero no los canales con un ancho de banda más pequeño). En casos, como con LAA, es beneficioso omitir los cálculos y usar una lista específica de canales inseguros.

Para ello, se puede especificar una lista de anulación de canales no seguros en la tabla de consulta para ciertas entradas. Una lista de anulación en una entrada de tabla significa que se omite el cálculo para ese canal de celda en particular y que los canales de Wi-Fi inseguros para el canal de celda coincidente están especificados por la lista de anulación.

Para casos sensibles al ancho de banda, puede evitar selectivamente ciertos anchos de banda especificando ciertos canales con ciertos anchos de banda en la lista de anulación. Esto se debe a que cada número de canal de Wi-Fi corresponde a un ancho de banda específico.

La lista de anulación está representada por una lista de números de canal o palabras clave de categoría predefinidas para cada banda de Wi-Fi:

Categorías 2g:

  • all (toda banda de 2,4 GHz)

Categorías 5g:

  • all (toda banda de 5 GHz)
  • 20mhz (canales 20MHz 5 GHz)
  • 40mhz (canales 40MHz 5 GHz)
  • 80mhz (canales de 80 MHz 5 GHz)
  • 160mhz (canales de 5 GHz 160MHz)

Interferencia del canal vecino

Para determinar la interferencia de canal vecino, el COEX evitar algoritmo hace que el Df distancia entre un agresor y la víctima canal no pasar por debajo de un umbral determinado.

Interferencia de canal

Figura 2. Distancia entre un canal de agresor y víctima

El umbral está determinado por la configuración física del dispositivo y el valor de umbral proporcionado en la entrada de la tabla de búsqueda por banda de interferencia. Las bandas que se consideran no interferentes no tienen una entrada en la tabla y no es necesario calcular los canales inseguros (esta es la mayoría de las veces).

Parámetros de interferencia vecinos

  • wifiVictimMhz : MHz umbral de distancia para una víctima de Wi-Fi (de enlace ascendente celular)
  • cellVictimMhz : MHz umbral de distancia para una víctima de células (enlace descendente celular)

El algoritmo se comporta de la siguiente manera para cada canal celular activo:

  1. Para la banda del canal, intenta encontrar una entrada en la tabla de búsqueda. Si no se encuentra una entrada en la tabla, regresa sin canales inseguros para ese canal celular.
  2. Según la banda celular, identifica qué banda Wi-Fi está en riesgo y de qué lado de la banda proviene la interferencia (por ejemplo, canales más bajos de 2.4GHz, canales más altos de 2.4GHz, canales más bajos de 5GHz).
  3. Si wifiVictimMhz está presente y el canal de célula tiene enlace ascendente y

    1. Si la parte inferior de la banda Wi-Fi está en riesgo

      1. Encuentra el límite superior de canales inseguros agregando wifiVictimMhz a la frecuencia más alta del enlace ascendente celular.
      2. Encuentra el primer canal Wi-Fi de 20 Mhz cuyo borde inferior se superpone al límite.
      3. Marca el canal Wi-Fi, cada canal de ancho de banda más grande que lo contiene (por ejemplo, 40Mhz, 80Mhz) y cada canal inferior de la misma banda que el canal inseguro.
    2. Si la parte superior de la banda Wi-Fi está en riesgo

      1. Encuentra el límite inferior de canales inseguros restando wifiVictimMhz a la frecuencia más baja del enlace ascendente de la celda.
      2. Encuentra el primer canal Wi-Fi cuyo borde superior se superpone al límite.
      3. Marca el canal Wi-Fi, cada canal más grande que lo contiene (por ejemplo, 40Mhz, 80Mhz) y cada canal superior de la misma banda que el canal inseguro.
  4. Si cellVictimMhz está presente y el canal de célula tiene enlace descendente.

    1. Realiza la etapa 3 usando cellVictimMhz como el umbral y la compara contra enlace descendente celda en lugar de enlace ascendente de la célula.
  5. Aplica el límite de potencia de la entrada de la tabla a los canales inseguros calculados.

Cálculo de canal inseguro

Cálculo canal Figura 3. inseguro para la interferencia de canal vecino

Distorsión armónica / de intermodulación

Para la distorsión de armónicos / intermodulación, el motor coex calcula el rango de la señal de armónicos / intermodulación y evalúa el porcentaje de superposición que tiene con un canal víctima potencial. Si la superposición excede un umbral de superposición, el algoritmo considera que esta es una situación insegura. El cálculo del porcentaje de superposición de la distorsión armónica / de intermodulación en un canal víctima se realiza con la siguiente ecuación:

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

En el caso de la distorsión armónica, el algoritmo considera la distorsión armónica de un canal de enlace ascendente celular que victimiza a los canales Wi-Fi. Luego sustituye la distorsión alta y la distorsión baja con los valores armónicos basados ​​en las frecuencias de enlace ascendente de la celda y un grado armónico $ N $.

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

Distorsión armónica de cálculo de canal inseguro

Cálculo canal Figura 4. inseguro para distorsión armónica

En el caso de intermodulación, el algoritmo considera la distorsión de intermodulación del enlace ascendente de la celda y el canal Wi-Fi que victimiza al canal del enlace descendente de la celda. Luego sustituye la distorsión alta y la distorsión baja con los valores de intermodulación basados ​​en las frecuencias de enlace ascendente de la celda, las frecuencias de Wi-Fi y los dos coeficientes de intermodulación $ M $, $ N $.

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

Distorsión de intermodulación de cálculo de canal inseguro

Cálculo canal Figura 5. inseguro para distorsión de intermodulación

Puede especificar $ M $, $ N $ y valores de superposición en la tabla de búsqueda por banda de celda interferente. Si no hay interferencia para una banda, los valores se omiten de la tabla para esa entrada de banda. Se pueden definir de forma independiente dos conjuntos de estos valores para las bandas Wi-Fi de 2,4 GHz y 5 GHz.

Similar al algoritmo de interferencia vecino, el algoritmo reutiliza el mismo valor de límite de potencia definido por banda de celda interferente.

El algoritmo se comporta de la siguiente manera para cada canal celular activo:

  1. Para la banda del canal celular, intenta encontrar una entrada en la tabla de búsqueda. Si no se encuentra ninguna entrada en la tabla, regresa sin canales inseguros para este canal.
  2. Encuentra los canales de 2,4 GHz no seguros de los armónicos si se definen los parámetros.

    1. Calcula el grado armónico N para 2,4 GHz.
    2. Calcula la frecuencia alta armónica y la frecuencia baja armónica basándose en N y el enlace ascendente de la celda.
    3. Encuentra el primer canal Wi-Fi de 20 MHz que se encuentra dentro del límite inferior del armónico que viene de abajo.
    4. Calcula la superposición del armónico sobre el canal de Wi-Fi y marca el canal como inseguro si la superposición excede el umbral de superposición de Wi-Fi de 2,4 GHz.
    5. Encuentra el primer canal Wi-Fi de 20MHz que se encuentra dentro del límite superior del armónico procedente de arriba.
    6. Calcula la superposición del armónico sobre el canal de Wi-Fi y marca el canal como inseguro si la superposición excede el umbral de superposición de Wi-Fi de 2,4 GHz.
    7. Marca cada canal de 20 MHz intermedio como canal inseguro.
  3. Encuentra los canales inseguros de 5 GHz de los armónicos si se definen los parámetros.

    1. Calcula el grado armónico N para 5 GHz. Si N es 0, salta al paso 5.
    2. Calcula la frecuencia alta armónica y la frecuencia baja armónica basándose en N y el enlace ascendente de la celda.
    3. Encuentra canales de 20Mhz inseguros.

      1. Encuentra el primer canal Wi-Fi de 20 MHz que se encuentra dentro del límite inferior del armónico que viene de abajo.
      2. Calcula la superposición del armónico sobre el canal de Wi-Fi y marca el canal como inseguro si la superposición excede el umbral de superposición de Wi-Fi de 2,4 GHz.
      3. Encuentra el primer canal Wi-Fi de 20MHz que se encuentra dentro del límite superior del armónico procedente de arriba.
      4. Calcula la superposición del armónico sobre el canal de Wi-Fi y marca el canal como inseguro si la superposición excede el umbral de superposición de Wi-Fi de 2,4 GHz.
      5. Marca cada canal de 20 MHz intermedio como un canal inseguro con el límite de potencia especificado.
    4. Encuentra canales inseguros de 40MHz, 80MHz, 160MHz

      1. Repite el paso 3a pero con 40MHz, 80MHz, 160MHz.
      2. En lugar de calcular las superposiciones de los canales en el borde armónico, reutiliza las superposiciones calculadas de los canales constituyentes más pequeños (por ejemplo, si dos canales de 20Mhz forman un canal de 40Mhz y tienen un 30% y un 90% de superposición, entonces el promedio es un 60% de superposición para el canal de 40Mhz).
  4. Encuentra los canales de 2,4 GHz no seguros de la intermodulación si se definen los parámetros.

    1. Calcula los coeficientes de intermodulación N, M para 2,4 GHz.
    2. Para cada canal Wi-Fi de 2,4 GHz:

      1. Calcula la intermodulación de baja frecuencia y la intermodulación de alta frecuencia según N, M, enlace ascendente de celda y canal Wi-Fi.
      2. Calcula la superposición de la intermodulación sobre el enlace descendente de la celda y marca el canal como inseguro si la superposición supera el umbral de superposición de la celda de 2,4 GHz.
  5. Encuentra los canales de 5 GHz inseguros de la intermodulación si se definen los parámetros.

    1. Repite el paso 4 utilizando los canales Wi-Fi de 5 GHz y el umbral de superposición de celdas de 5 GHz.
  6. Aplica el límite de potencia de la entrada de la tabla a los canales inseguros calculados.

Resultado final

Después de calcular ambos conjuntos de canales inseguros de interferencia armónica y vecinos, el conjunto final se calcula tomando la unión de ambos conjuntos (y seleccionando el límite de potencia inferior si hay colisiones) y eliminando los canales predeterminados del conjunto si hay colisiones. no se aplican restricciones obligatorias.

El algoritmo se comporta de la siguiente manera:

  1. Si cada canal Wi-Fi de 2,4 GHz está marcado como un canal inseguro, elimina el canal Wi-Fi predeterminado de 2,4 GHz del conjunto.
  2. Si cada canal de Wi-Fi de 5 GHz está marcado como un canal inseguro, elimina el canal de Wi-Fi de 5 GHz predeterminado del conjunto.
  3. Devuelve el conjunto final de canales inseguros.

Formato de tabla de búsqueda

Las tablas de búsqueda se representan en un archivo XML ubicado en el overlayable cadena config config_wifiCoexTableFilepath , y se define por la siguiente 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>

Ejemplo de tabla XML

La siguiente es una tabla de búsqueda XML de ejemplo:


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

Agregación de portadores

Para la agregación de portadoras (CA), los rangos de armónicos / intermodulación para cada enlace ascendente / descendente pueden no producir suficiente superposición para causar interferencia de forma independiente, pero pueden producir suficiente superposición cuando se combinan. El algoritmo considera cada rango de armónicos / intermodulación de forma independiente y toma la unión de los canales no seguros devueltos. Para el caso de intermodulación, esto significa evaluar el rango de intermodulación de cada UL en cada DL.

El algoritmo no distingue entre PCELL / PSCELL / SCELL y los trata como iguales.

Acceso asistido por licencia

El acceso asistido por licencia (LAA) se identifica como la banda n. ° 46. El algoritmo trata esta banda de manera similar a otras bandas. En este caso, los canales completos de 5Ghz se pueden configurar como una lista de anulación en la tabla de búsqueda.

Dependiendo de los requisitos del operador, el algoritmo de evitación de canales establece restricciones obligatorias en SoftAP y Wi-Fi Direct (P2P) para toda la banda de Wi-Fi de 5 GHz. Para el algoritmo de manejar este caso de uso, el portador config valor restrict_5g_softap_wifi_direct_for_laa debe ser definido. Si el canal de célula es en LAA y restrict_5g_softap_wifi_direct_for_laa es true , el algoritmo devuelve el conjunto de canales no seguros con toda la banda de 5 GHz y establece los indicadores de restricción obligatorios para SoftAP y Wi-Fi Direct (P2P).

Informar al servicio de Wi-Fi

Después de que el algoritmo de canal coex haya calculado los canales inseguros, para proporcionar a las aplicaciones de su sistema los canales inseguros y sus restricciones, use la siguiente estructura de datos de @SystemApi definida en el marco de 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();
}

Utilice los siguientes WifiManager métodos @SystemApi y devolución de llamada para permitir que las aplicaciones para obtener valores actualizados cuando los canales no seguros cambian.

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);
}

Realizar acción de Wi-Fi

Cuando el servicio de Wi-Fi recibe información sobre el conjunto de canales inseguros, realiza la acción adecuada para garantizar que se eviten esos canales. Esta sección describe el comportamiento del servicio Wi-Fi en diferentes escenarios.

Informar al conductor

Debido a que el controlador tiene un papel importante en la realización de la evasión de canales, es esencial transmitir los canales inseguros al controlador y al firmware. Para ello, utilice el 1.5::IWifiChip API HAL.

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

SoftAP

SoftAP es el caso de uso principal para evitar canales inseguros. La siguiente sección describe los escenarios clave de SoftAp donde la evasión de canales se puede aplicar con ACS. Los escenarios describen el comportamiento del algoritmo de evitación de canal y el controlador o firmware.

Iniciando SoftAP con ACS habilitado (aún no hay SoftAP activo)

  1. Si los canales no son seguros y hay una restricción de SoftAP

    1. El marco elimina los canales inseguros de la lista ACS.
    2. Si la lista está vacía, el marco detiene SoftAP.
  2. Si los canales no son seguros y no hay restricciones

    1. El controlador / firmware del proveedor da prioridad a los canales seguros sobre los canales inseguros.

SoftAP está activo con ACS habilitado y los canales inseguros se actualizan

  1. Si el canal de SoftAP no es seguro y hay una restricción de SoftAP

    1. El marco actualiza la lista ACS eliminando los canales inseguros.
    2. Si la lista está vacía, el marco cierra SoftAP.
  2. Si el canal SoftAP no es seguro y no hay restricciones

    1. El marco no realiza ninguna acción. El controlador / firmware del proveedor se encarga de evitar los canales inseguros o de aplicar el límite de potencia si no es posible evitarlos.

Wi-Fi Direct (P2P)

  1. Si hay canales inseguros con restricciones de Wi-Fi Direct (P2P).

    1. Las solicitudes marco wpa_supplicant para evitar los canales inseguros utilizando el método HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Si hay canales inseguros sin restricciones.

    1. El controlador / firmware del proveedor aplica el límite de potencia si se usa un canal inseguro sin restricción de Wi-Fi Direct (P2P).

Reconocimiento de Wi-Fi (NAN)

El marco no está involucrado en la selección de canales para Wi-Fi Aware (NAN) y no se toma ninguna acción de marco. El controlador / firmware del proveedor es responsable de evitar el canal Wi-Fi Aware (NAN).

Deshabilitar el algoritmo

Si desea desactivar la implementación del algoritmo predeterminado y transmitir su propia lista de canales no seguros para evitar, configurar la superposición config_wifiDefaultCoexAlgorithmEnabled . Si la superposición se establece en falsa, el algoritmo predeterminado está deshabilitado. Luego, puede usar su propio algoritmo propietario fuera de banda para generar una lista de canales inseguros para conectar con el marco utilizando la siguiente API del sistema.

public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
  int coexRestrictions);

Validando la implementación

Para validar su implementación de la función de evitación de canal coexistente de Wi-Fi / celular, utilice las siguientes pruebas.

Pruebas CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Pruebas ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Pruebas VTS

  • wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)