Eliminazione canale coex Wi-Fi/rete cellulare

La funzionalità di evitamento dei canali di coesistenza 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 verso 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 relative alla funzionalità di aggiramento dei canali
  • 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 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 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 è denominato aggressore e il ricevitore che presenta l'interferenza è denominato 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 fornisce 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 evitamento dei canali Wi-Fi può essere descritto come una serie di quattro passaggi astratti:

  1. Il modem segnala una variazione della 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 variazione della frequenza cellulare

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: vicinanti e armoniche/intermodulazione. A causa delle differenze fisiche tra le antenne e il layout dei dispositivi, i pattern di interferenza con i dispositivi vicini e le interferenze armoniche/di intermodulazione sono diversi per ogni dispositivo. Per compensare questo fenomeno, i produttori di dispositivi devono fornire una tabella di ricerca per inserire i parametri nelle 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 tutti i canali della banda a 2,4 o 5 GHz sono contrassegnati come non sicuri, la tabella di ricerca può definire come scelta più sicura un canale a 2,4 GHz o 5 GHz predefinito per ogni banda di celle che causa interferenza. Questi canali predefiniti non vengono segnalati come non sicuri se il resto della banda è segnalato come non sicuro.

Elenco delle sostituzioni

Un approccio formulaico è limitato nei casi in cui l'interferenza è fortemente dipendente dalla larghezza di banda (e quindi i canali con una larghezza di banda maggiore potrebbero non essere sicuri, ma non i canali 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.

Per farlo, 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 della cella viene saltato e che i canali Wi-Fi non sicuri per il canale della 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 accade 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 80 MHz a 5 GHz)
  • 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 con il 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 ogni 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 di celle 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 quel canale di 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 2,4 GHz inferiori, canali 2,4 GHz superiori, canali 5 GHz inferiori).
  3. Se wifiVictimMhz è presente e il canale della cella 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 si sovrappone al limite.
      3. Contrassegni 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 del 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 cellulare.
      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. Esegui il passaggio 3 utilizzando cellVictimMhz come soglia e confronta il valore 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 dei canali non sicuri

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 di coesistenza calcola l'intervallo 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 ogni banda di celle che causa interferenza.

L'algoritmo si comporta nel seguente modo per ogni canale di celle 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 rientra nel 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 rientra nel 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. Contrassegni ogni canale intermedio di 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 la frequenza armonica alta e la frequenza armonica bassa 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. Contrassegni ogni canale intermedio di 20 MHz come canale non sicuro con il limite di potenza 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. Invece di calcolare le sovrapposizioni dei canali sull'orlo 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 sovrapposizioni del 30% e del 90%, la media è una sovrapposizione del 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 l'interferenza intermodulazione sul downlink della cella e contrassegna il canale come non sicuro se l'interferenza supera la soglia di interferenza delle celle a 2,4 GHz.
  5. Individua 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 nel seguente modo:

  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 un'interferenza sufficiente da causare interferenze in modo indipendente, ma potrebbero produrre un'interferenza 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 distinzione tra PCELL, PSCELL o SCELL e li tratta come 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 aggiramento 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 tue 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.

Informare 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 HAL IWifiChip.

Per AIDL:

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

Per HIDL (1.5 o versioni successive):

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

SoftAP

SoftAP è il caso d'uso principale per l'evitamento dei canali non sicuri. La sezione che segue 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.

La rete SoftAP è attiva con l'ACS abilitata e i canali non sicuri sono 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 potenza se l'evitamento non è fattibile.

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

    1. Il driver o il firmware del fornitore applica il limite di potenza se viene utilizzato un canale non sicuro senza limitazioni di 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/cellulare, 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)