O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Prevenção de canal coex de Wi-Fi / celular

O recurso de prevenção de canal coex de Wi-Fi / celular, introduzido no Android 12, identifica e evita o uso de canais Wi-Fi inseguros em casos onde pode haver interferência de / para canais de celular. Isso inclui interfaces como STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

Esta página discute o seguinte:

  • Informações que o modem celular deve relatar à estrutura do Android
  • Algoritmos que a estrutura de Wi-Fi usa para calcular canais de Wi-Fi a serem evitados
  • Tabelas de configuração que os fabricantes de dispositivos devem fornecer para a estrutura de Wi-Fi
  • APIs de sistema, configurações e APIs HAL relacionadas ao recurso de prevenção de canal
  • Comportamento da estrutura para lidar com a prevenção de canais
  • Comportamento do fornecedor de chips para lidar com a evasão de canais
  • Detalhes de implementação para evitar canal
  • Testes para validar o comportamento de evitação de canal

Fundo

Para dispositivos com tecnologias de celular, como LTE, 5G NR e Licensed Assisted Access (LAA), os canais de celular em uso podem interferir no canal de Wi-Fi em uso. Isso ocorre quando os canais de celular e Wi-Fi estão dentro de uma curta separação de frequência (canais vizinhos) ou quando há interferência harmônica e de intermodulação.

Esse tipo de interferência se torna um problema quando uma antena está transmitindo e outra recebendo ao mesmo tempo. Nesse caso, a antena transmissora inunda a antena receptora, afetando sua qualidade de recepção.

Este documento refere-se ao transmissor interferindo como o agressor e o receptor tendo a interferência como a vítima. O canal de Wi-Fi que é ou o agressor ou a vítima é referido como um canal inseguro.

O recurso de eliminação de canal coex de Wi-Fi / celular fornece uma abordagem consistente para eliminação de canal, reduzindo a necessidade de código proprietário que diverge da estrutura de Wi-Fi. Além disso, o recurso permite que os fabricantes de dispositivos configurem, habilitem, desabilitem e substituam o recurso.

O recurso evita canais, controlando os canais Wi-Fi. O esquema de prevenção de canal Wi-Fi pode ser descrito como uma série de quatro etapas abstratas:

  1. Modem relata mudança na frequência celular
  2. O algoritmo de prevenção Coex calcula canais de Wi-Fi inseguros
  3. Algoritmo de evitação de Coex informa serviço Wi-Fi
  4. A estrutura ou driver executa a ação de Wi-Fi apropriada

Esquema de evitação de canal

Esquema de evitação Figura 1. Canal

Relatando uma mudança na frequência do celular

O serviço de telefonia informa os canais de celular atualmente em uso. Quando a freqüência celular operando muda, o modem relata essas informações para o serviço de telefonia através IRadio::PhysicalChannelConfig . Essas informações incluem indicações para acesso assistido licenciado (LAA) e agregação de operadora (CA).

A partir do Android 12, os seguintes campos em 1.6 IRadio::PhysicalChannelConfig fornecer informações para as fórmulas coex que o modem deve povoam necessário.

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

Calculando canais de Wi-Fi inseguros

Quando o modem relata uma mudança na frequência do celular, o algoritmo do canal coex calcula a interferência entre os canais de celular e Wi-Fi e determina qual conjunto de canais Wi-Fi não é seguro.

Existem vários tipos de interferência que requerem diferentes fórmulas: vizinhos e / intermodulação harmônica. Devido às diferenças físicas na antena e no layout entre os dispositivos, os padrões de interferência vizinha e harmônica / intermodulação para cada dispositivo são diferentes. Para conta para isso, os fabricantes de dispositivos devem fornecer uma tabela de referência para parâmetros de plug em fórmulas genéricas para os dois tipos de interferência. Esses parâmetros são definidos por banda celular e são referenciados pelas bandas dos canais celulares ativos.

Uma tampa de potência máxima pode ser definida na tabela de consulta. Se um limite de energia máximo for definido, um canal não seguro transmite com o limite de energia fornecido. Se não houver limite de potência, o canal transmite com potência total.

Em geral, o recurso de anulação de canal usa uma abordagem de melhor esforço para evitar canais Wi-Fi inseguros para otimizar o desempenho. Mas em certos casos (por exemplo, devido aos requisitos da operadora), é obrigatório para certas interfaces evitar canais inseguros para certas bandas de celular. Em tais casos, as restrições obrigatórios são representados como uma máscara de bits que contém os valores para se proibir certos canais, tais como Wi-Fi Direct (P2P), SoftAP, e Wi-Fi Consciente (NAN). Embora um canal inseguro atue como uma recomendação contra o uso desse canal para todos os casos de uso, as restrições obrigatórias marcam os casos de uso específicos para serem evitados obrigatoriamente.

Se cada canal da banda de 2,4 GHz ou 5 GHz for marcado como inseguro, a tabela de pesquisa pode definir um canal padrão de 2,4 GHz ou um canal padrão de 5 GHz por banda de célula interferente como a escolha mais segura. Esses canais padrão não são relatados como canais inseguros quando o resto da banda é relatado como inseguro.

Lista de substituição

Uma abordagem estereotipada é limitada nos casos em que a interferência depende muito da largura de banda (e, portanto, canais com largura de banda maior podem ser inseguros, mas não canais com largura de banda menor). Em casos, como com LAA, é benéfico pular os cálculos e usar uma lista especificada de canais não seguros.

Para fazer isso, você pode especificar uma lista de substituição de canais inseguros na tabela de pesquisa para determinadas entradas. Uma lista de substituição em uma entrada de tabela significa que o cálculo para esse canal de célula particular é ignorado e que os canais de Wi-Fi não seguros para o canal de célula correspondente são especificados pela lista de substituição.

Para casos sensíveis à largura de banda, você pode evitar seletivamente certas larguras de banda, especificando certos canais com certas larguras de banda na lista de substituição. Isso ocorre porque cada número de canal Wi-Fi corresponde a uma largura de banda especificada.

A lista de substituição é representada por uma lista de números de canais ou palavras-chave de categorias predefinidas para cada banda Wi-Fi:

Categorias 2g:

  • all (faixa de 2,4 GHz inteira)

Categorias 5g:

  • all (banda inteira 5GHz)
  • 20mhz (20MHz canais 5 GHz)
  • 40mhz (40MHz canais 5 GHz)
  • 80mhz (canais 80 MHz 5 GHz)
  • 160mhz (canais 5 GHz 160MHz)

Interferência de canal vizinho

Para determinar vizinha interferência de canal, o COEX evitar algoritmo garante que o Af distância entre o agressor eo canal vítima não ir abaixo de um limite especificado.

Interferência de canal

Figura 2. Distância entre um canal agressor e vítima

O limite é determinado pela configuração física do dispositivo e o valor limite fornecido na entrada da tabela de pesquisa por banda de interferência. As bandas consideradas não interferentes não têm uma entrada na tabela e os canais inseguros não precisam ser calculados (isso ocorre na maioria das vezes).

Parâmetros de interferência vizinhos

  • wifiVictimMhz : limiar de distância MHz para uma vítima Wi-Fi (ligação ascendente da célula)
  • cellVictimMhz : limiar de distância MHz para uma vítima de células (células de ligação descendente)

O algoritmo se comporta da seguinte forma para cada canal de célula ativo:

  1. Para a banda do canal, tenta encontrar uma entrada na tabela de pesquisa. Se nenhuma entrada da tabela for encontrada, retorna sem canais inseguros para aquele canal de célula.
  2. Com base na banda do celular, identifica qual banda Wi-Fi está em risco e de qual lado da banda vem a interferência (por exemplo, canais menores de 2,4 GHz, canais maiores de 2,4 GHz, canais menores de 5 GHz).
  3. Se wifiVictimMhz está presente e o canal de ligação ascendente e tem célula

    1. Se a parte inferior da banda Wi-Fi estiver em risco

      1. Encontra o limite superior de canais inseguros adicionando wifiVictimMhz à frequência mais alta do uplink do celular.
      2. Encontra o primeiro canal Wi-Fi de 20 MHz cuja borda inferior se sobrepõe ao limite.
      3. Marca o canal Wi-Fi, cada canal de largura de banda maior que o contém (por exemplo, 40Mhz, 80Mhz) e cada canal inferior da mesma banda que o canal inseguro.
    2. Se a parte superior da banda Wi-Fi estiver em risco

      1. Encontra o limite inferior de canais inseguros subtraindo wifiVictimMhz à frequência mais baixa do uplink da célula.
      2. Encontra o primeiro canal Wi-Fi cuja borda superior se sobrepõe ao limite.
      3. Marca o canal Wi-Fi, cada canal maior que o contém (por exemplo, 40Mhz, 80Mhz) e cada canal superior da mesma banda que o canal inseguro.
  4. Se cellVictimMhz está presente e o canal de ligação descendente tem célula.

    1. Realiza passo 3 usando cellVictimMhz como o limiar e compara contra downlink célula em vez de ligação ascendente da célula.
  5. Aplica o limite de energia da entrada da tabela aos canais não seguros calculados.

Cálculo de canal inseguro

Cálculo canal Figura 3. inseguro para a interferência de canal vizinho

Distorção harmônica / intermodulação

Para distorção harmônica / intermodulação, o mecanismo coex calcula a faixa do sinal harmônico / intermodulação e avalia a porcentagem de sobreposição que tem com um canal vítima potencial. Se a sobreposição exceder um limite de sobreposição, o algoritmo considera isso uma situação insegura. O cálculo da sobreposição percentual da distorção harmônica / intermodulação em um canal vítima é realizado com a seguinte equação:

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

No caso da distorção harmônica, o algoritmo considera a distorção harmônica de um canal de uplink de célula vitimando canais Wi-Fi. Em seguida, ele substitui a distorção alta e a distorção baixa pelos valores harmônicos baseados nas frequências de uplink da célula e um grau harmônico $ N $.

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

Distorção harmônica de cálculo de canal inseguro

Cálculo canal Figura 4. inseguro para distorção harmónica

No caso de intermodulação, o algoritmo considera a distorção de intermodulação do uplink da célula e o canal Wi-Fi vitimando o canal de downlink da célula. Em seguida, substitui a distorção alta e a distorção baixa pelos valores de intermodulação baseados nas frequências de uplink da célula, frequências de Wi-Fi e os dois coeficientes de intermodulação $ M $, $ N $.

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

Distorção de intermodulação de cálculo de canal inseguro

Cálculo canal Figura 5. inseguro para distorção de intermodulação

Você pode especificar $ M $, $ N $ e valores de sobreposição na tabela de pesquisa por banda de célula interferente. Se não houver interferência para uma banda, os valores serão omitidos da tabela para essa entrada de banda. Dois conjuntos desses valores para as bandas Wi-Fi 2,4 GHz e 5 GHz podem ser definidos de forma independente.

Semelhante ao algoritmo de interferência vizinho, o algoritmo reutiliza o mesmo valor de limite de energia definido por banda de célula interferente.

O algoritmo se comporta da seguinte forma para cada canal de célula ativo:

  1. Para a banda do canal celular, ele tenta encontrar uma entrada na tabela de pesquisa. Se nenhuma entrada da tabela for encontrada, retorna sem canais inseguros para este canal.
  2. Encontra os canais de 2,4 GHz inseguros de harmônicos se os parâmetros forem definidos.

    1. Encontra o grau de harmônico N para 2,4 GHz.
    2. Calcula a alta frequência harmônica e a baixa frequência harmônica com base em N e no uplink da célula.
    3. Encontra o primeiro canal Wi-Fi de 20 MHz que está dentro do limite inferior do harmônico vindo de baixo.
    4. Calcula a sobreposição do harmônico no canal Wi-Fi e marca o canal como inseguro se a sobreposição exceder o limite de sobreposição Wi-Fi de 2,4 GHz.
    5. Encontra o primeiro canal Wi-Fi de 20 MHz que está dentro do limite superior do harmônico vindo de cima.
    6. Calcula a sobreposição do harmônico no canal Wi-Fi e marca o canal como inseguro se a sobreposição exceder o limite de sobreposição Wi-Fi de 2,4 GHz.
    7. Marca cada canal de 20 MHz como um canal inseguro.
  3. Encontra os canais de 5 GHz não seguros de harmônicos se os parâmetros forem definidos.

    1. Encontra o grau de harmônico N para 5GHz. Se N for 0, pule para a etapa 5.
    2. Calcula a alta frequência harmônica e a baixa frequência harmônica com base em N e no uplink da célula.
    3. Encontra canais de 20Mhz inseguros.

      1. Encontra o primeiro canal Wi-Fi de 20 MHz que está dentro do limite inferior do harmônico vindo de baixo.
      2. Calcula a sobreposição do harmônico no canal Wi-Fi e marca o canal como inseguro se a sobreposição exceder o limite de sobreposição Wi-Fi de 2,4 GHz.
      3. Encontra o primeiro canal Wi-Fi de 20 MHz que está dentro do limite superior do harmônico vindo de cima.
      4. Calcula a sobreposição do harmônico no canal Wi-Fi e marca o canal como inseguro se a sobreposição exceder o limite de sobreposição Wi-Fi de 2,4 GHz.
      5. Marca cada canal de 20 MHz como um canal inseguro com o limite de energia especificado.
    4. Encontra canais inseguros de 40 MHz, 80 MHz, 160 MHz

      1. Repete a etapa 3a, mas com 40 MHz, 80 MHz, 160 MHz.
      2. Em vez de calcular as sobreposições dos canais na borda harmônica, reutiliza as sobreposições calculadas dos canais constituintes menores (por exemplo, se dois canais de 20 MHz fazem um canal de 40 MHz e têm 30% e 90% de sobreposição, então a média é sobreposição de 60% para o canal de 40 MHz).
  4. Encontra os canais de 2,4 GHz inseguros da intermodulação se parâmetros forem definidos.

    1. Encontra os coeficientes de intermodulação N, M para 2,4 GHz.
    2. Para cada canal Wi-Fi de 2,4 GHz:

      1. Calcula a baixa frequência de intermodulação e a alta frequência de intermodulação com base em N, M, uplink de célula e canal Wi-Fi.
      2. Calcula a sobreposição da intermodulação sobre o downlink da célula e marca o canal como inseguro se a sobreposição exceder o limite de sobreposição de célula de 2,4 GHz.
  5. Encontra os canais de 5 GHz não seguros da intermodulação se os parâmetros forem definidos.

    1. Repete a etapa 4 usando os canais Wi-Fi de 5 GHz e o limite de sobreposição de células de 5 GHz.
  6. Aplica o limite de energia da entrada da tabela aos canais não seguros calculados.

Resultado final

Depois que ambos os conjuntos de canais inseguros de interferências vizinhas e harmônicas são calculados, o conjunto final é calculado tomando a união de ambos os conjuntos (e selecionando o limite de potência inferior se houver colisões) e removendo os canais padrão do conjunto se houver nenhuma restrição obrigatória aplicada.

O algoritmo se comporta da seguinte maneira:

  1. Se cada canal Wi-Fi de 2,4 GHz for marcado como um canal inseguro, remove o canal Wi-Fi padrão de 2,4 GHz do conjunto.
  2. Se cada canal Wi-Fi de 5 GHz for marcado como um canal inseguro, remove o canal Wi-Fi de 5 GHz padrão do conjunto.
  3. Retorna o conjunto final de canais não seguros.

Formato da tabela de pesquisa

As tabelas de pesquisa são representados em um arquivo XML localizado na cadeia de configuração overlayable config_wifiCoexTableFilepath , e é definido pela seguinte 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>

Tabela XML de exemplo

A seguir está um exemplo de tabela de pesquisa 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>

Agregação de operadora

Para agregação de portadora (CA), os intervalos de harmônico / intermodulação para cada uplink / downlink podem não produzir sobreposição suficiente para causar interferência de forma independente, mas podem produzir sobreposição suficiente quando combinados. O algoritmo considera cada intervalo de harmônico / intermodulação de forma independente e obtém a união dos canais inseguros retornados. Para o caso de intermodulação, isso significa avaliar a faixa de intermodulação de cada UL em cada DL.

O algoritmo não faz distinção entre PCELL / PSCELL / SCELLs e os trata como iguais.

Acesso assistido por licença

O License Assisted Access (LAA) é identificado como banda # 46. O algoritmo trata essa banda de maneira semelhante a outras bandas. Nesse caso, os canais de 5 GHz completos podem ser definidos como uma lista de substituição na tabela de pesquisa.

Dependendo dos requisitos da operadora, o algoritmo de eliminação de canal define restrições obrigatórias em SoftAP e Wi-Fi Direct (P2P) para toda a banda Wi-Fi de 5 GHz. Para o algoritmo para lidar com este caso de uso, o portador de configuração valor restrict_5g_softap_wifi_direct_for_laa deve ser definido. Se o canal célula está em LAA e restrict_5g_softap_wifi_direct_for_laa é true , o algoritmo retorna o conjunto de canais inseguros com toda a banda de 5GHz e define os sinalizadores de restrição obrigatórios para SoftAP e Wi-Fi Direct (P2P).

Informando serviço Wi-Fi

Depois que o algoritmo do canal coex calculou os canais inseguros, para fornecer aos seus aplicativos de sistema os canais inseguros e suas restrições, use a seguinte estrutura de dados @SystemApi definida na estrutura 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();
}

Use as seguintes WifiManager métodos @SystemApi e chamada de retorno para permitir que os aplicativos para obter valores atualizados quando os canais inseguros mudar.

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

Executando ação Wi-Fi

Quando o serviço Wi-Fi recebe informações sobre o conjunto de canais não seguros, ele executa a ação apropriada para garantir que esses canais sejam evitados. Esta seção descreve o comportamento do serviço Wi-Fi em diferentes cenários.

Informando o motorista

Como o driver tem um papel importante na execução da anulação de canal, é essencial transmitir os canais inseguros ao driver e ao firmware. Para fazer isso, use o 1.5::IWifiChip API HAL.

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

SoftAP

SoftAP é o principal caso de uso para evitar canais inseguros. A seção a seguir descreve os principais cenários SoftAp onde a anulação de canal pode ser aplicada com ACS. Os cenários descrevem o comportamento do algoritmo de evitação de canal e do driver ou firmware.

Iniciando o SoftAP com ACS habilitado (nenhum SoftAP ativado ainda)

  1. Se os canais não forem seguros e houver uma restrição de SoftAP

    1. A estrutura remove canais não seguros da lista ACS.
    2. Se a lista estiver vazia, a estrutura para o SoftAP.
  2. Se os canais não são seguros e não há restrições

    1. O driver / firmware do fornecedor dá prioridade aos canais seguros sobre os canais inseguros.

SoftAP está ativo com ACS habilitado e canais inseguros são atualizados

  1. Se o canal SoftAP não for seguro e houver uma restrição de SoftAP

    1. A estrutura atualiza a lista ACS removendo os canais não seguros.
    2. Se a lista estiver vazia, a estrutura fecha o SoftAP.
  2. Se o canal SoftAP não é seguro e não há restrições

    1. Nenhuma ação é realizada pela estrutura. O driver / firmware do fornecedor trata de evitar os canais inseguros ou aplica o limite de energia se evitar isso não for viável.

Wi-Fi Direct (P2P)

  1. Se houver canais não seguros com restrições de Wi-Fi Direct (P2P).

    1. Os pedidos de enquadramento wpa_supplicant para evitar os canais inseguros usando o método HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Se houver canais inseguros sem restrições.

    1. O driver / firmware do fornecedor aplica o limite de energia se um canal não seguro sem restrição de Wi-Fi Direct (P2P) for usado.

Wi-Fi Aware (NAN)

A estrutura não está envolvida na seleção de canais para Wi-Fi Aware (NAN) e nenhuma ação da estrutura é executada. O driver / firmware do fornecedor é responsável por evitar o canal Wi-Fi Aware (NAN).

Desativando o algoritmo

Se você quiser desativar a implementação do algoritmo padrão e passar a sua própria lista de canais inseguros para evitar, configurar a sobreposição config_wifiDefaultCoexAlgorithmEnabled . Se a sobreposição for definida como falsa, o algoritmo padrão será desabilitado. Você pode então usar seu próprio algoritmo proprietário fora de banda para gerar uma lista de canais inseguros para direcionar para a estrutura usando a seguinte API do sistema.

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

Validando a implementação

Para validar sua implementação do recurso de prevenção de canal coex de Wi-Fi / celular, use os seguintes testes.

Testes CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Testes ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Testes VTS

  • wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)