Eliminazione canale coex Wi-Fi/rete cellulare

La funzionalità di eliminazione dei canali 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 o con i canali cellulari. Sono incluse interfacce come STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

Questa pagina illustra quanto segue:

  • Informazioni che il modem cellulare deve segnalare 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 prevenzione del canale
  • Comportamento del framework per la gestione dell'evitamento dei canali
  • Comportamento dei fornitori di chip per la gestione dell'elusione dei canali
  • Dettagli sull'implementazione dell'evitamento dei canali
  • Test per convalidare il comportamento di evitamento dei canali

Background

Per i dispositivi con tecnologie di telefonia mobile quali LTE, 5G NR e accesso assistito con licenza (LAA), i canali cellulari in uso possono interferire con il canale Wi-Fi in uso. Ciò si verifica quando i canali cellulari e Wi-Fi hanno una frequenza molto simile (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 di trasmissione ingombra l'antenna di ricezione, influendo sulla qualità della ricezione.

In questo documento, il trasmettitore che causa interferenze è definito aggressore e il ricevitore che presenta l'interferenza è definito vittima. Il canale Wi-Fi che è l'aggressore o la vittima è definito canale non sicuro.

La funzionalità di evitamento dei canali di coesistenza Wi-Fi/cellulare offre un approccio coerente per l'evitamento dei canali, riducendo la necessità di codice proprietario che si discosta dal framework Wi-Fi. Inoltre, consente ai produttori di dispositivi di configurare, attivare e disattivare la funzionalità e di ignorarla.

La funzionalità evita i canali controllandoli. Lo schema di elusione dei canali Wi-Fi può essere descritto come una serie di quattro passaggi astratti:

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

Schema di evitamento dei canali

Figura 1. Schema di evitamento dei canali

Segnalare una modifica della frequenza della rete mobile

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

A partire da Android 12, i seguenti campi in 1.6 IRadio::PhysicalChannelConfig forniscono le informazioni necessarie per le formule di coesistenza 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;
}

Calcolare i canali Wi-Fi non sicuri

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

Esistono diversi tipi di interferenze che richiedono formule diverse: vicine e armoniche/di intermodulazione. A causa delle differenze fisiche dell'antenna e della disposizione dei dispositivi, gli schemi di interferenza in prossimità e di interferenze armoniche/intermodulanti per ciascun dispositivo sono diversi. A questo scopo, 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 celle e vengono richiamati dalle bande dei canali di celle attivi.

Nella tabella di ricerca è possibile definire un limite di potenza massima. Se è definito un limite di potenza massima, un canale non sicuro trasmette con il limite di potenza fornito. Se non è presente alcun limite di potenza, il canale trasmette a potenza massima.

In generale, la funzionalità di evitamento dei canali utilizza un approccio di tipo "best effort" per evitare i canali Wi-Fi non sicuri al fine di ottimizzare il rendimento. Tuttavia, in alcuni casi (ad esempio per requisiti dell'operatore), è obbligatorio per alcune interfacce evitare canali non sicuri per determinate bande cellulari. In questi casi, le limitazioni obbligatorie sono rappresentate come una maschera di bit contenente i valori per vietare determinati canali come Wi-Fi Direct (P2P), SoftAP e Wi-Fi Aware (NAN). Un canale non sicuro rappresenta un consiglio contro l'utilizzo di quel canale per tutti i casi d'uso, mentre 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 come la scelta più sicura un canale predefinito a 2,4 GHz o un canale a 5 GHz per banda cellulare che interferisce. Questi canali predefiniti non vengono segnalati come non sicuri quando il resto della banda viene segnalato come non sicuro.

Elenco delle sostituzioni

Un approccio formulaico è limitato nei casi in cui l'interferenza dipende molto dalla larghezza di banda (e quindi i canali con una larghezza di banda maggiore potrebbero non essere sicuri, ma non quelli con una larghezza di banda inferiore). In alcuni casi, ad esempio con l'asta LAA, è consigliabile saltare i calcoli e utilizzare un elenco specifico di canali non sicuri.

A tale scopo, puoi specificare un elenco di override di canali non sicuri nella tabella di ricerca per determinate voci. Un elenco di override in una voce di tabella indica che il calcolo per quel determinato canale cellulare viene ignorato e che i canali Wi-Fi non sicuri per il canale cella corrispondente sono specificati dall'elenco di override.

Per i casi sensibili alla larghezza di banda, puoi evitare in modo selettivo determinate larghezze di banda specificando determinati canali con determinate larghezze di banda nell'elenco di override. Questo perché ogni numero di canale Wi-Fi corrisponde a una larghezza di banda specificata.

L'elenco di override è rappresentato da un elenco di numeri di canale o parole chiave di categorie predefinite per ogni banda Wi-Fi:

Categorie 2G:

  • all (intera banda a 2,4 GHz)

Categorie 5G:

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

Interferenza con i canali vicini

Per determinare l'interferenza dei canali vicini, l'algoritmo di evitamento della coesistenza garantisce che la distanza ΔF tra un canale aggressore e un canale 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 della 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 (nella maggior parte dei casi).

Parametri di interferenza con i vicini

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

L'algoritmo si comporta nel seguente modo per ogni canale della cella attivo:

  1. Per la banda del canale, cerca una voce della tabella di ricerca. Se non viene trovata alcuna voce della tabella, non vengono restituiti canali non sicuri per il canale della cella.
  2. In base alla banda cellulare, identifica la banda Wi-Fi a rischio e da quale lato della banda proviene l'interferenza (ad esempio, canali a 2,4 GHz, canali a 2,4 GHz più alti, canali a 5 GHz più bassi).
  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 a 20 MHz il cui bordo inferiore sovrappone il limite.
      3. Contrassegna il canale Wi-Fi, ogni canale con larghezza di banda più grande che lo contiene (ad esempio, 40 Mhz, 80 Mhz) e ogni canale inferiore della stessa banda del canale non sicuro.
    2. Se la parte superiore della banda Wi-Fi è a rischio

      1. Trova il limite inferiore di 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. Contrassegni il canale Wi-Fi, ogni canale più grande che lo contiene (ad esempio 40 MHz, 80 MHz) e ogni canale più alto della stessa banda del canale non sicuro.
  4. Se cellVictimMhz è presente e il canale della cella ha il downlink.

    1. Esegue il passaggio 3 utilizzando cellVictimMhz come soglia e esegue il confronto 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 interferenza con un canale vicino

Distorsione armonica o di intermodulazione

Per la distorsione armonica o di intermodulazione, il motore Coex calcola la gamma del segnale armonico o di intermodulazione e valuta la percentuale di sovrapposizione con un potenziale canale vittima. Se la sovrapposizione supera una soglia, l'algoritmo la considera una situazione non sicura. Il calcolo della percentuale di sovrapposizione della distorsione armonica o di intermodulazione su un canale vittima viene eseguito 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 prende in considerazione la distorsione armonica di un canale uplink della cella che colpisce i canali Wi-Fi. Quindi, sostituisce la distorsione alta e la distorsione bassa con i valori armonici in base alle frequenze uplink della cella e a 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 prende in considerazione la distorsione di intermodulazione dell'uplink della cella e del canale Wi-Fi che colpisce il canale downlink della cella. Sostituisce quindi la distorsione alta e la distorsione bassa con i valori di intermodulazione in base alle frequenze uplink della cella, alle frequenze Wi-Fi e ai 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 per calcolo del canale non sicuro

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

Puoi specificare $ M $, $ N $ e i valori di sovrapposizione nella tabella di ricerca per banda di celle interferenti. Se non è presente interferenza per una banda, i valori vengono omessi dalla tabella per la voce della banda. È possibile definire in modo indipendente due insiemi di questi valori per le bande Wi-Fi a 2,4 GHz e 5 GHz.

Analogamente all'algoritmo di interferenza con le celle vicine, l'algoritmo riutilizza lo stesso valore del limite di potenza definito per la banda di celle che causa interferenza.

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

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

    1. Trova il grado armonico N per 2,4 GHz.
    2. Calcola la frequenza armonica alta e la frequenza armonica bassa in base a N e all'uplink della cella.
    3. Trova il primo canale Wi-Fi a 20 MHz che si trova entro il 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 a 20 MHz che si trova entro il 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 come canale non sicuro.
  3. Individua i canali a 5 GHz non sicuri dalle armoniche se sono definiti i parametri.

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

      1. Trova il primo canale Wi-Fi a 20 MHz che rientra nel 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 del Wi-Fi a 2,4 GHz.
      3. Trova il primo canale Wi-Fi da 20 MHz che rientra nel 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 del Wi-Fi a 2,4 GHz.
      5. Contrassegna ogni canale a 20 MHz come canale non sicuro con il limite di alimentazione specificato.
    4. Trova canali non sicuri a 40 MHz, 80 MHz e 160 MHz

      1. Ripeti il passaggio 3a, ma con 40 MHz, 80 MHz, 160 MHz.
      2. Anziché calcolare le sovrapposizioni dei canali sul bordo armonico, riutilizza le sovrapposizioni calcolate dai canali costitutivi più piccoli (ad esempio, se due canali da 20 MHz creano un canale da 40 MHz e presentano una sovrapposizione del 30% e del 90%, la media è pari al 60% per il canale da 40 MHz).
  4. Individua i canali a 2,4 GHz non sicuri dall'intermodulazione se sono definiti i parametri.

    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 frequenza intermodulazione bassa e la frequenza intermodulazione alta in base a N, M, uplink della cella e canale Wi-Fi.
      2. Calcola la sovrapposizione dell'intermodulazione sul downlink delle celle e contrassegna il canale come non sicuro se la sovrapposizione supera la soglia di sovrapposizione delle celle a 2,4 GHz.
  5. Trova i canali a 5 GHz non sicuri dall'intermodulazione se i parametri sono definiti.

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

Risultato finale

Dopo aver calcolato entrambi gli insiemi di canali non sicuri dovuti a interferenze armoniche e dei vicini, viene calcolato l'insieme finale prendendo l'unione di entrambi gli insiemi (e selezionando la potenza massima più bassa in caso di collisioni) e rimuovendo i canali predefiniti dall'insieme se non sono applicate limitazioni obbligatorie.

L'algoritmo si comporta come segue:

  1. Se tutti i canali Wi-Fi a 2,4 GHz sono contrassegnati come non sicuri, rimuovi il canale Wi-Fi a 2,4 GHz predefinito dall'insieme.
  2. Se tutti i canali Wi-Fi a 5 GHz sono contrassegnati come non sicuri, rimuovi il canale Wi-Fi a 5 GHz predefinito dall'insieme.
  3. Restituisce l'insieme 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 sovrascrivibile config_wifiCoexTableFilepath e sono definite dal seguente schema XML.


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

Esempio di tabella XML

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

Per l'aggregazione degli operatori (CA), gli intervalli armonici o di intermodulazione per ogni uplink o downlink potrebbero non produrre una sovrapposizione sufficiente per causare interferenze in modo indipendente, ma potrebbero produrne una sufficiente se combinati. L'algoritmo considera ogni intervallo armonico o di intermodulazione in modo indipendente e prende l'unione dei canali non sicuri restituiti. Per il caso di intermodulazione, significa valutazione dell'intervallo di intermodulazione di ogni UL su ogni DL.

L'algoritmo non fa distinzioni tra PCELL, PSCELL o SCELL e li considera uguali.

Accesso assistito da licenza

L'accesso assistito da licenza (LAA) è identificato come banda 46. L'algoritmo tratta questo gruppo in modo simile ad altri gruppi. In questo caso, i canali a 5 GHz completi possono essere impostati come elenco di override nella tabella di ricerca.

A seconda dei requisiti dell'operatore, l'algoritmo di esclusione dei canali imposta limitazioni obbligatorie su SoftAP e Wi-Fi Direct (P2P) per l'intera banda Wi-Fi a 5 GHz. Affinché l'algoritmo gestisca questo caso d'uso, è necessario definire il valore di carrier config restrict_5g_softap_wifi_direct_for_laa. Se il canale della cella è 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 limitazione obbligatori per SoftAP e Wi-Fi Direct (P2P).

Servizio Inform 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 limitazioni, utilizza la seguente struttura di 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 ricevere valori aggiornati quando i canali non sicuri cambiano.

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

Esegui un'azione Wi-Fi

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

Informa il conducente

Poiché il driver ha un ruolo fondamentale nell'evitare i canali, è fondamentale comunicare i canali non sicuri al driver e al firmware. Per farlo, utilizza la seguente API IWifiChip HAL.

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 l'evitamento di canali non sicuri. La sezione seguente descrive gli scenari principali di SoftAP in cui è possibile applicare l'evitamento dei canali con ACS. Gli scenari descrivono il comportamento dell'algoritmo di evitamento dei canali e del driver o del firmware.

Avvia SoftAP con l'ACS abilitato (non è ancora attivo alcun SoftAP)

  1. Se i canali non sono sicuri e c'è una limitazione per il punto di accesso soft

    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 o il firmware del fornitore dà la priorità ai canali sicuri rispetto a quelli non sicuri.

SoftAP aggiornato con ACS abilitato e canali non sicuri aggiornati

  1. Se il canale SoftAP non è sicuro e esiste una limitazione per il 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 ci sono limitazioni

    1. Il framework non esegue alcuna azione. Il driver o il firmware del fornitore gestisce l'evitare i canali non sicuri o l'applicazione del limite di alimentazione se non è possibile evitarlo.

Wi-Fi Direct (P2P)

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

    1. Il framework richiede a wpa_supplicant di evitare i canali non sicuri utilizzando il metodo HALISupplicantP2pIface::setDisallowedFrequencies().
  2. Se sono presenti canali non sicuri senza limitazioni.

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

Wi-Fi Aware (NAN)

Il framework non è coinvolto nella selezione dei canali per Wi-Fi Aware (NAN) e non viene intrapresa alcuna azione del framework. È responsabilità del driver o del firmware del fornitore evitare i canali Wi-Fi Aware (NAN).

Disattivare l'algoritmo

Se vuoi disattivare l'implementazione dell'algoritmo predefinito e passare il tuo elenco di canali non sicuri da evitare, configura l'overlayconfig_wifiDefaultCoexAlgorithmEnabled. Se l'overlay è impostato su false, l'algoritmo predefinito viene disattivato. Puoi quindi utilizzare il tuo algoritmo proprietario out-of-band 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);

Convalida l'implementazione

Per convalidare l'implementazione della funzionalità di evitamento dei canali di coesistenza Wi-Fi/mobile, utilizza i seguenti test.

Test CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Test ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Test VTS

  • Se è implementato AIDL: wifi_chip_aidl_test.cpp

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

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)