Evitamento canale Wi-Fi/Cellulare Coex

La funzionalità di evitamento del canale coex Wi-Fi/cellulare, introdotta in Android 12, identifica ed evita l'utilizzo di canali Wi-Fi non sicuri nei casi in cui potrebbero esserci interferenze da/verso canali cellulari. Ciò include interfacce come STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

In questa pagina si discute di quanto segue:

  • Informazioni che il modem cellulare deve riportare al framework Android
  • Algoritmi utilizzati dal framework Wi-Fi per calcolare i canali Wi-Fi da evitare
  • Tabelle di configurazione che i produttori di dispositivi devono fornire per il framework Wi-Fi
  • API di sistema, configurazioni e API HAL correlate alla funzionalità di elusione del canale
  • Comportamento del framework per gestire l'evitamento dei canali
  • Comportamento del fornitore di chip per gestire l'elusione del canale
  • Dettagli di implementazione per evitare i canali
  • Test per la convalida del comportamento di evitamento del canale

Sfondo

Per i dispositivi con tecnologie cellulari come LTE, 5G NR e Licensed Assisted Access (LAA), i canali cellulari in uso possono interferire con il canale Wi-Fi in uso. Ciò si verifica quando i canali cellulare e Wi-Fi si trovano a breve distanza di frequenza (canali vicini) o quando sono presenti interferenze armoniche e di intermodulazione.

Questo tipo di interferenza diventa un problema quando un'antenna trasmette e un'altra riceve contemporaneamente. In questo caso l'antenna trasmittente inonda quella ricevente, compromettendone la qualità di ricezione.

Questo documento si riferisce al trasmettitore interferente come aggressore e al ricevitore che sperimenta l'interferenza come vittima . Il canale Wi-Fi che è l'aggressore o la vittima viene definito canale non sicuro .

La funzionalità di evitamento dei canali coex Wi-Fi/cellulare fornisce un approccio coerente per evitare i canali riducendo la necessità di codice proprietario che diverge dal framework Wi-Fi. Inoltre, la funzionalità consente ai produttori di dispositivi di configurare, abilitare, disabilitare e sovrascrivere la funzionalità.

La funzione evita i canali controllando i canali Wi-Fi. Lo schema di evitamento del canale Wi-Fi può essere descritto come una serie di quattro passaggi astratti:

  1. Il modem segnala un cambiamento nella frequenza cellulare
  2. L'algoritmo di evitamento Coex calcola i canali Wi-Fi non sicuri
  3. L'algoritmo di evitamento Coex informa il servizio Wi-Fi
  4. Il framework o il driver esegue l'azione Wi-Fi appropriata

Schema di elusione dei canali

Figura 1. Schema per evitare i canali

Segnalazione di un cambiamento nella frequenza cellulare

Il servizio di telefonia segnala i canali cellulari attualmente in uso. Quando cambia la frequenza cellulare operativa, il modem segnala questa informazione al servizio di telefonia tramite IRadio::PhysicalChannelConfig . Queste informazioni includono indicazioni per l'accesso assistito con licenza (LAA) e l'aggregazione dei trasportatori (CA).

A partire da Android 12, i seguenti campi in 1.6 IRadio::PhysicalChannelConfig forniscono le informazioni richieste per le formule coex che il modem deve compilare.

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

Calcolo dei canali Wi-Fi non sicuri

Quando il modem segnala un cambiamento nella frequenza cellulare, l'algoritmo del canale coex calcola l'interferenza tra i canali cellulare e Wi-Fi e determina quale insieme di canali Wi-Fi non è sicuro.

Esistono molteplici tipi di interferenza che richiedono formule diverse: vicina e armonica/intermodulazione . A causa delle differenze fisiche nell'antenna e nella disposizione tra i dispositivi, i modelli di interferenza vicina e armonica/intermodulazione per ciascun dispositivo sono diversi. Per tenere conto di ciò, i produttori di dispositivi devono fornire una tabella di ricerca per inserire i parametri in formule generiche per i due tipi di interferenza. Questi parametri sono definiti per banda di cella e fanno riferimento alle bande dei canali di cella attivi.

È possibile definire un limite massimo di potenza nella tabella di ricerca. Se viene definito un limite di potenza massimo, un canale non sicuro trasmette con il limite di potenza fornito. Se non è presente alcun limite di potenza, il canale trasmette a piena potenza.

In generale, la funzione di esclusione dei canali utilizza un approccio ottimale per evitare canali Wi-Fi non sicuri e ottimizzare le prestazioni. Ma in alcuni casi (ad esempio, a causa dei requisiti dell'operatore), è obbligatorio che determinate interfacce evitino canali non sicuri per determinate bande cellulari. In questi casi, le restrizioni obbligatorie sono rappresentate come una maschera di bit contenente valori che consentono di vietare determinati canali come Wi-Fi Direct (P2P), SoftAp e Wi-Fi Aware (NAN). Mentre un canale non sicuro funge da raccomandazione contro l'utilizzo di quel canale per tutti i casi d'uso, le restrizioni obbligatorie contrassegnano casi d'uso specifici da evitare obbligatoriamente.

Se ogni canale della banda a 2,4 GHz o 5 GHz è contrassegnato come non sicuro, la tabella di ricerca può definire un canale predefinito a 2,4 GHz o un canale predefinito a 5 GHz per banda cellulare interferente come la scelta più sicura. Questi canali predefiniti non vengono segnalati come canali non sicuri quando il resto della banda viene segnalato come non sicuro.

Sostituisci elenco

Un approccio stereotipato è limitato nei casi in cui l'interferenza dipende fortemente dalla larghezza di banda (e quindi i canali con larghezza di banda maggiore potrebbero essere non sicuri ma non i canali con larghezza di banda minore). In alcuni casi, come nel caso della LAA, è utile saltare i calcoli e utilizzare un elenco specifico di canali non sicuri.

A tale scopo, è possibile specificare un elenco di sovrascrittura di canali non sicuri nella tabella di ricerca per determinate voci. Un elenco di sostituzione in una voce di tabella indica che il calcolo per quel particolare canale di cella viene saltato e che i canali Wi-Fi non sicuri per il canale di cella corrispondente sono specificati dall'elenco di sostituzione.

Per i casi sensibili alla larghezza di banda, è possibile evitare selettivamente determinate larghezze di banda specificando determinati canali con determinate larghezze di banda nell'elenco di sostituzione. Questo perché ciascun numero di canale Wi-Fi corrisponde a una larghezza di banda specificata.

L'elenco di sostituzione è rappresentato da un elenco di numeri di canale o parole chiave di categoria predefinite per ciascuna banda Wi-Fi:

Categorie 2g:

  • all (intera banda 2,4 GHz)

Categorie 5g:

  • all (intera banda 5 GHz)
  • 20mhz (canali 5 GHz 20 MHz)
  • 40mhz (canali 5 GHz 40 MHz)
  • 80mhz (canali 5 GHz 80 MHz)
  • 160mhz (canali 5 GHz 160 MHz)

Interferenza del canale vicino

Per determinare l'interferenza del canale vicino, l'algoritmo di evitamento del coex assicura che la distanza ΔF tra un canale aggressore e la vittima non scenda al di sotto di una soglia specificata.

Interferenza del canale

Figura 2. Distanza tra il canale dell'aggressore e quello della vittima

La soglia è determinata dalla configurazione fisica del dispositivo e dal valore di soglia fornito nella voce della tabella di ricerca per banda interferente. Le bande considerate non interferenti non hanno una voce nella tabella e non è necessario calcolare i canali non sicuri (questo è la maggior parte delle volte).

Parametri di interferenza vicini

  • wifiVictimMhz : soglia di distanza MHz per una vittima Wi-Fi (uplink cellulare)
  • cellVictimMhz : soglia di distanza MHz per una cella vittima (downlink cella)

L'algoritmo si comporta come segue per ciascun canale cellulare attivo:

  1. Per la banda del canale, tenta di trovare una voce nella tabella di ricerca. Se non viene trovata alcuna voce nella tabella, restituisce senza canali non sicuri per quel canale cellulare.
  2. In base alla banda cellulare, identifica quale banda Wi-Fi è a rischio e da quale lato della banda proviene l'interferenza (ad esempio, canali inferiori a 2,4 GHz, canali superiori a 2,4 GHz, canali inferiori a 5 GHz).
  3. Se wifiVictimMhz è presente e il canale cellulare ha uplink e

    1. Se la parte inferiore della banda Wi-Fi è a rischio

      1. Trova il limite superiore dei canali non sicuri aggiungendo wifiVictimMhz alla frequenza più alta dell'uplink della cella.
      2. Trova il primo canale Wi-Fi da 20 Mhz il cui bordo inferiore si sovrappone al limite.
      3. Contrassegna il canale Wi-Fi, ogni canale con larghezza di banda maggiore che lo contiene (ad esempio, 40 Mhz, 80 Mhz) e ogni canale inferiore della stessa banda come canale non sicuro.
    2. Se la parte superiore della banda Wi-Fi è a rischio

      1. Trova il limite inferiore dei canali non sicuri sottraendo wifiVictimMhz alla frequenza più bassa dell'uplink della cella.
      2. Trova il primo canale Wi-Fi il cui bordo superiore si sovrappone al limite.
      3. Contrassegna il canale Wi-Fi, ogni canale più grande che lo contiene (ad esempio, 40 M hz, 80 Mhz) e ogni canale più alto della stessa banda come canale non sicuro.
  4. Se cellVictimMhz è presente e il canale cellulare ha downlink.

    1. Esegue il passaggio 3 utilizzando cellVictimMhz come soglia e lo confronta con il downlink della cella anziché con l'uplink della cella.
  5. Applica il limite di potenza della voce della tabella ai canali non sicuri calcolati.

Calcolo del canale non sicuro

Figura 3. Calcolo del canale non sicuro per l'interferenza del canale vicino

Distorsione armonica/intermodulazione

Per la distorsione armonica/intermodulazione, il motore coex calcola la gamma del segnale armonico/intermodulazione e valuta la percentuale di sovrapposizione che ha con un potenziale canale vittima. Se la sovrapposizione supera una soglia di sovrapposizione, l'algoritmo considera questa situazione non sicura. Il calcolo della sovrapposizione percentuale della distorsione armonica/intermodulazione su un canale vittima si effettua con la seguente equazione:

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

Nel caso della distorsione armonica, l'algoritmo considera la distorsione armonica di un canale di uplink della cella che vittimizza i canali Wi-Fi. Quindi sostituisce la distorsione alta e la distorsione bassa con i valori armonici basati sulle frequenze di uplink della cella e su un grado armonico $ N $.

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

Distorsione armonica del calcolo del canale non sicuro

Figura 4. Calcolo del canale non sicuro per la distorsione armonica

Nel caso dell'intermodulazione, l'algoritmo considera la distorsione di intermodulazione dell'uplink della cella e del canale Wi-Fi che vittimizza il canale di downlink della cella. Sostituisce quindi la distorsione alta e la distorsione bassa con i valori di intermodulazione basati sulle frequenze di uplink della cella, sulle frequenze Wi-Fi e sui due coefficienti di intermodulazione $ M $, $ N $.

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

Distorsione di intermodulazione del calcolo del canale non sicuro

Figura 5. Calcolo del canale non sicuro per la distorsione di intermodulazione

È possibile specificare $ M $, $ N $ e valori di sovrapposizione nella tabella di ricerca per banda di cella interferente. Se non c'è interferenza per una banda, i valori vengono omessi dalla tabella per quella voce di banda. È possibile definire in modo indipendente due serie di questi valori per le bande Wi-Fi da 2,4 GHz e 5 GHz.

Similmente all'algoritmo dell'interferenza vicina, l'algoritmo riutilizza lo stesso valore di limite di potenza definito per la banda di celle interferenti.

L'algoritmo si comporta come segue per ciascun canale cellulare attivo:

  1. Per la banda del canale cellulare, tenta di trovare una voce nella tabella di ricerca. Se non viene trovata alcuna voce nella tabella, restituisce nessun canale non sicuro per questo canale.
  2. Trova i canali a 2,4 GHz non sicuri dalle armoniche se i parametri sono definiti.

    1. Trova il grado armonico N per 2,4 GHz.
    2. Calcola l'alta frequenza armonica e la bassa frequenza armonica in base a N e all'uplink della cella.
    3. Trova il primo canale Wi-Fi da 20 MHz che si trova all'interno del limite inferiore dell'armonica proveniente dal basso.
    4. Calcola la sovrapposizione dell'armonica sul canale Wi-Fi e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione Wi-Fi a 2,4 GHz.
    5. Trova il primo canale Wi-Fi da 20 MHz che si trova all'interno del limite superiore dell'armonica proveniente dall'alto.
    6. Calcola la sovrapposizione dell'armonica sul canale Wi-Fi e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione Wi-Fi a 2,4 GHz.
    7. Contrassegna ogni canale da 20 MHz intermedio come canale non sicuro.
  3. Trova i canali a 5 GHz non sicuri dalle armoniche se i parametri sono definiti.

    1. Trova il grado armonico N per 5 GHz. Se N è 0, passa al passaggio 5.
    2. Calcola l'alta frequenza armonica e la bassa frequenza armonica in base a N e all'uplink della cella.
    3. Trova canali da 20 Mhz non sicuri.

      1. Trova il primo canale Wi-Fi da 20 MHz che si trova all'interno del limite inferiore dell'armonica proveniente dal basso.
      2. Calcola la sovrapposizione dell'armonica sul canale Wi-Fi e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione Wi-Fi a 2,4 GHz.
      3. Trova il primo canale Wi-Fi da 20 MHz che si trova all'interno del limite superiore dell'armonica proveniente dall'alto.
      4. Calcola la sovrapposizione dell'armonica sul canale Wi-Fi e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione Wi-Fi a 2,4 GHz.
      5. Contrassegna ogni canale da 20 MHz intermedio come canale non sicuro con il limite di potenza specificato.
    4. Trova canali non sicuri da 40 MHz, 80 MHz, 160 MHz

      1. Ripete il passaggio 3a ma con 40 MHz, 80 MHz, 160 MHz.
      2. Invece di calcolare le sovrapposizioni dei canali sul bordo armonico, riutilizza le sovrapposizioni calcolate dai canali costituenti più piccoli (ad esempio, se due canali da 20 Mhz formano un canale da 40 Mhz e hanno una sovrapposizione del 30% e 90%, allora la media è 60 % di sovrapposizione per il canale 40 Mhz).
  4. Trova i canali a 2,4 GHz non sicuri dall'intermodulazione se i parametri sono definiti.

    1. Trova i coefficienti di intermodulazione N, M per 2,4 GHz.
    2. Per ogni canale Wi-Fi a 2,4 GHz:

      1. Calcola la bassa frequenza di intermodulazione e l'alta frequenza di intermodulazione in base a N, M, uplink cella e canale Wi-Fi.
      2. Calcola la sovrapposizione dell'intermodulazione sul downlink della cella e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione della cella da 2,4 GHz.
  5. Trova i canali a 5 GHz non sicuri dall'intermodulazione se i parametri sono definiti.

    1. Ripete il passaggio 4 utilizzando i canali Wi-Fi da 5 GHz e la soglia di sovrapposizione delle celle da 5 GHz.
  6. Applica il limite di potenza della voce della tabella ai canali non sicuri calcolati.

Risultato finale

Dopo aver calcolato entrambi i set di canali non sicuri dovuti alle interferenze vicine e armoniche, il set finale viene calcolato prendendo l'unione di entrambi i set (e selezionando il limite di potenza inferiore se sono presenti collisioni) e rimuovendo i canali predefiniti dal set se sono presenti non sono state applicate restrizioni obbligatorie.

L’algoritmo si comporta nel modo seguente:

  1. Se ogni canale Wi-Fi da 2,4 GHz è contrassegnato come canale non sicuro, rimuove il canale Wi-Fi da 2,4 GHz predefinito dal set.
  2. Se ogni canale Wi-Fi a 5 GHz è contrassegnato come canale non sicuro, rimuove il canale Wi-Fi a 5 GHz predefinito dal set.
  3. Restituisce il set finale di canali non sicuri.

Formato della tabella di ricerca

Le tabelle di ricerca sono rappresentate in un file XML situato nella stringa di configurazione sovrapponibile config_wifiCoexTableFilepath ed è definita dal seguente 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>

Tabella XML di esempio

Di seguito è riportato un esempio di tabella di ricerca 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>

Aggregazione dei portatori

Per l'aggregazione della portante (CA), gli intervalli di armoniche/intermodulazione per ciascun uplink/downlink potrebbero non produrre una sovrapposizione sufficiente a causare interferenze in modo indipendente, ma potrebbero produrre una sovrapposizione sufficiente se combinati. L'algoritmo considera ogni intervallo armonico/intermodulazione in modo indipendente e prende l'unione dei canali non sicuri restituiti. Nel caso dell'intermodulazione, ciò significa valutare l'intervallo di intermodulazione di ogni UL su ogni DL.

L'algoritmo non fa alcuna distinzione tra PCELL/PSCELL/SCELL e li tratta come uguali.

Accesso assistito da licenza

L'accesso assistito da licenza (LAA) è identificato come banda n. 46. L'algoritmo tratta questa banda in modo simile ad altre bande. In questo caso, tutti i canali a 5 Ghz possono essere impostati come elenco di sostituzione nella tabella di ricerca.

A seconda dei requisiti dell'operatore, l'algoritmo di evitamento del canale imposta restrizioni obbligatorie su SoftAP e Wi-Fi Direct (P2P) per l'intera banda Wi-Fi a 5 GHz. Affinché l'algoritmo possa gestire questo caso d'uso, è necessario definire il valore di configurazione dell'operatore restrict_5g_softap_wifi_direct_for_laa . Se il canale cellulare è su LAA e restrict_5g_softap_wifi_direct_for_laa è true , l'algoritmo restituisce l'insieme di canali non sicuri con l'intera banda a 5 Ghz e imposta i flag di restrizione obbligatori per SoftAP e Wi-Fi Direct (P2P).

Informazioni sul servizio Wi-Fi

Dopo che l'algoritmo del canale coex ha calcolato i canali non sicuri, per fornire alle app di sistema i canali non sicuri e le relative restrizioni, utilizza la seguente struttura dati @SystemApi definita nel framework 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();
}

Utilizza i seguenti metodi e callback WifiManager @SystemApi per consentire alle app di ottenere valori aggiornati quando cambiano i canali non sicuri.

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

Esecuzione dell'azione Wi-Fi

Quando il servizio Wi-Fi riceve informazioni sull'insieme di canali non sicuri, esegue l'azione appropriata per garantire che tali canali vengano evitati. Questa sezione descrive il comportamento del servizio Wi-Fi in diversi scenari.

Informare l'autista

Poiché il driver ha un ruolo importante nell'evitare i canali, è essenziale trasmettere i canali non sicuri al driver e al firmware. A tale scopo, utilizzare la seguente API HAL IWifiChip .

Per AIDL:

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

Per HIDL (1.5 o superiore):

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

SoftAP

SoftAP è il caso d'uso principale per evitare canali non sicuri. La sezione seguente descrive i principali scenari SoftAp in cui è possibile applicare l'elusione del canale con ACS. Gli scenari descrivono il comportamento dell'algoritmo di evitamento del canale e del driver o firmware.

Avvio di SoftAP con ACS abilitato (nessun SoftAP è ancora attivo)

  1. Se i canali non sono sicuri ed è presente una restrizione SoftAP

    1. Il framework rimuove i canali non sicuri dall'elenco ACS.
    2. Se l'elenco è vuoto, il framework arresta SoftAP.
  2. Se i canali non sono sicuri e non ci sono restrizioni

    1. Il driver/firmware del fornitore dà la priorità ai canali sicuri rispetto a quelli non sicuri.

SoftAP è attivo con ACS abilitato e i canali non sicuri vengono aggiornati

  1. Se il canale SoftAP non è sicuro ed è presente una restrizione SoftAP

    1. Il framework aggiorna l'elenco ACS rimuovendo i canali non sicuri.
    2. Se l'elenco è vuoto, il framework chiude SoftAP.
  2. Se il canale SoftAP non è sicuro e non sono presenti restrizioni

    1. Nessuna azione viene intrapresa dal framework. Il driver/firmware del fornitore gestisce l'evitamento dei canali non sicuri o l'applicazione del limite di alimentazione se l'elusione non è fattibile.

Wi-Fi diretto (P2P)

  1. Se sono presenti canali non sicuri con restrizioni Wi-Fi Direct (P2P).

    1. Il framework richiede a wpa_supplicant di evitare i canali non sicuri utilizzando il metodo HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Se ci sono canali non sicuri senza restrizioni.

    1. Il driver/firmware del fornitore applica il limite di alimentazione se viene utilizzato un canale non sicuro senza limitazione Wi-Fi Direct (P2P).

Wi-Fi compatibile (NAN)

Il framework non è coinvolto nella selezione del canale per Wi-Fi Aware (NAN) e non viene intrapresa alcuna azione del framework. Il driver/firmware del fornitore è responsabile dell'evitamento dei canali Wi-Fi Aware (NAN).

Disabilitare l'algoritmo

Se desideri disabilitare l'implementazione dell'algoritmo predefinito e passare il tuo elenco di canali non sicuri da evitare, configura l'overlay config_wifiDefaultCoexAlgorithmEnabled . Se la sovrapposizione è impostata su false, l'algoritmo predefinito è disabilitato. È quindi possibile utilizzare il proprio algoritmo proprietario fuori banda per generare un elenco di canali non sicuri da collegare al framework utilizzando la seguente API di sistema.

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

Convalidare l'implementazione

Per convalidare l'implementazione della funzionalità di esclusione del canale coex Wi-Fi/cellulare, utilizzare i seguenti test.

Prove CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Prove ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Prove VTS

  • Se AIDL è implementato: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • Se è implementato HIDL: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)