La funzionalità di prevenzione dei canali di coesistenza Wi-Fi/rete mobile, introdotta in Android 12, identifica ed evita l'utilizzo di canali Wi-Fi non sicuri nei casi in cui potrebbero verificarsi interferenze da o verso i canali di rete mobile. Sono incluse interfacce come STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).
Questa pagina tratta i seguenti argomenti:
- 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 evitamento dei canali
- Comportamento del framework per la gestione dell'evitamento dei canali
- Comportamento del fornitore di chip per la gestione dell'evitamento dei canali
- Dettagli di implementazione per l'esclusione dei canali
- Test per la convalida del comportamento di evitamento dei canali
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 sono separati da una breve frequenza (canali adiacenti) o quando si verificano 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 inonda l'antenna di ricezione, influendo sulla qualità della ricezione.
Questo documento si riferisce al trasmettitore che causa interferenze come aggressore e al ricevitore che subisce le interferenze come vittima. Il canale Wi-Fi che è aggressore o vittima è chiamato canale non sicuro.
La funzionalità di prevenzione dei canali di coesistenza Wi-Fi/cellulare fornisce un approccio coerente per la prevenzione dei canali, riducendo la necessità di codice proprietario che si discosta dal framework Wi-Fi. Inoltre, la funzionalità consente ai produttori di dispositivi di configurare, attivare, disattivare ed eseguire l'override della funzionalità.
La funzionalità esegue l'evitamento dei canali controllando i canali Wi-Fi. Lo schema di evitamento dei canali Wi-Fi può essere descritto come una serie di quattro passaggi astratti:
- Modifiche ai report sul modem nella frequenza cellulare
- L'algoritmo di prevenzione della coesistenza calcola i canali Wi-Fi non sicuri
- L'algoritmo di prevenzione della coesistenza informa il servizio Wi-Fi
- Il framework o il driver esegue l'azione Wi-Fi appropriata
Figura 1. Schema di elusione dei canali
Segnala una modifica della frequenza cellulare
Il servizio di telefonia segnala i canali cellulari attualmente in uso. Quando la frequenza cellulare operativa cambia, il modem comunica queste informazioni al servizio di telefonia tramite IRadio::PhysicalChannelConfig
.
Queste informazioni includono indicazioni per l'accesso assistito con licenza (LAA) e
l'aggregazione di operatori (CA).
A partire da Android 12, i seguenti campi in
1.6 IRadio::PhysicalChannelConfig
forniscono le informazioni richieste 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 modifica della frequenza cellulare, l'algoritmo del canale di coesistenza calcola l'interferenza tra i canali cellulari e Wi-Fi e determina quali canali Wi-Fi non sono sicuri.
Esistono più tipi di interferenza che richiedono formule diverse: vicina e armonica/intermodulazione. A causa delle differenze fisiche di antenna e layout tra i dispositivi, i pattern di interferenza armonica/di intermodulazione e di interferenza con i dispositivi vicini sono diversi per ogni dispositivo. Per tenerne conto, 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 referenziati dalle bande dei canali delle celle attive.
Nella tabella di ricerca può essere definita una soglia di potenza massima. Se viene definito un limite di potenza massimo, un canale non sicuro trasmette con il limite di potenza fornito. Se non è presente un limite di potenza, il canale trasmette alla massima potenza.
In generale, la funzionalità di evitamento dei canali utilizza un approccio di tipo best effort per evitare canali Wi-Fi non sicuri e ottimizzare le prestazioni. Tuttavia, in alcuni casi (ad esempio a causa dei 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 valori che indicano se proibire 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 limitazioni obbligatorie contrassegnano casi d'uso specifici per l'evitamento obbligatorio.
Se ogni canale della banda a 2,4 GHz o 5 GHz è contrassegnato come non sicuro, la tabella di ricerca può definire un canale a 2,4 GHz predefinito o un canale a 5 GHz predefinito per banda cellulare interferente come la scelta più sicura. Questi canali predefiniti non vengono segnalati come canali non sicuri quando il resto della band viene segnalato come non sicuro.
Elenco di override
Un approccio basato su formule è limitato nei casi in cui le interferenze dipendono fortemente dalla larghezza di banda (e quindi i canali con larghezza di banda maggiore potrebbero non essere sicuri, ma non i canali con larghezza di banda minore). In alcuni casi, ad esempio con LAA, è utile 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 della tabella indica che il calcolo per quel particolare canale della cella viene ignorato e che i canali Wi-Fi non sicuri per il canale della cella corrispondente sono specificati dall'elenco di override.
Per i casi in cui la larghezza di banda è sensibile, puoi evitare selettivamente 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 specifica.
L'elenco di override è rappresentato da un elenco di numeri di canale o parole chiave di categoria 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 a 40 MHz a 5 GHz)80mhz
(canali a 80 MHz a 5 GHz)160mhz
(canali da 160 MHz a 5 GHz)
Interferenza del canale adiacente
Per determinare l'interferenza tra canali adiacenti, l'algoritmo di prevenzione della coesistenza assicura che la distanza ΔF tra un canale aggressore e uno vittima non scenda al di sotto di una soglia specificata.
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 i canali non sicuri non devono essere calcolati (il che avviene la maggior parte delle volte).
Parametri di interferenza adiacente
wifiVictimMhz
: soglia di distanza in MHz per una vittima Wi-Fi (uplink cella)cellVictimMhz
: Soglia di distanza in MHz per una cella vittima (downlink della cella)
L'algoritmo si comporta nel seguente modo per ogni canale di cella attivo:
- Per la banda del canale, tenta di trovare una voce della tabella di ricerca. Se non viene trovata alcuna voce di tabella, restituisce un valore senza canali non sicuri per il canale della cella.
- In base alla banda cellulare, identifica la banda Wi-Fi a rischio e il lato della banda da cui provengono le interferenze (ad esempio, canali a 2,4 GHz inferiori, canali a 2,4 GHz superiori, canali a 5 GHz inferiori).
Se
wifiVictimMhz
è presente e il canale della cella ha uplink eSe la parte inferiore della banda Wi-Fi è a rischio
- Trova il limite superiore dei canali non sicuri aggiungendo
wifiVictimMhz
alla frequenza più alta dell'uplink della cella. - Trova il primo canale Wi-Fi a 20 MHz il cui bordo inferiore si sovrappone al limite.
- 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 del canale non sicuro.
- Trova il limite superiore dei canali non sicuri aggiungendo
Se la parte superiore della banda Wi-Fi è a rischio
- Trova il limite inferiore dei canali non sicuri sottraendo wifiVictimMhz alla frequenza più bassa dell'uplink della cella.
- Trova il primo canale Wi-Fi il cui bordo superiore si sovrappone al limite.
- Contrassegna il canale Wi-Fi, ogni canale più grande che lo contiene (ad esempio 40 MHz, 80 MHz) e ogni canale superiore della stessa banda del canale non sicuro.
Se
cellVictimMhz
è presente e il canale della cella ha il downlink.- Esegue il passaggio 3 utilizzando
cellVictimMhz
come soglia e confronta con il downlink della cella anziché con l'uplink della cella.
- Esegue il passaggio 3 utilizzando
Applica il limite di potenza della voce della tabella ai canali non sicuri calcolati.
Figura 3. Calcolo del canale non sicuro per l'interferenza del canale adiacente
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 di sovrapposizione, 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:
Nel caso della distorsione armonica, l'algoritmo considera la distorsione armonica di un canale di uplink della cella che danneggia i canali Wi-Fi. Sostituisce quindi la distorsione alta e la distorsione bassa con i valori armonici in base alle frequenze di uplink della cella e a un grado armonico $ N $.
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 danneggia il canale di downlink della cella. Sostituisce quindi la distorsione alta e la distorsione bassa con i valori di intermodulazione in base alle frequenze di uplink della cella, alle frequenze Wi-Fi e ai due coefficienti di intermodulazione $ M $ e $ N $.
Figura 5. Calcolo del canale non sicuro per la distorsione di intermodulazione
Puoi specificare i valori di $ M $, $ N $ e sovrapposizione nella tabella di ricerca per banda di celle interferente. Se non ci sono interferenze per una banda, i valori vengono omessi dalla tabella per la voce relativa a quella banda. È possibile definire in modo indipendente due set di questi valori per le bande Wi-Fi a 2,4 GHz e 5 GHz.
Analogamente all'algoritmo di interferenza adiacente, l'algoritmo riutilizza lo stesso valore di limite di potenza definito per banda cellulare interferente.
L'algoritmo si comporta nel seguente modo per ogni canale di cella attivo:
- Per la banda del canale della cella, tenta di trovare una voce della tabella di ricerca. Se non viene trovata alcuna voce di tabella, restituisce un elenco senza canali non sicuri per questo canale.
Trova i canali a 2,4 GHz non sicuri dalle armoniche se i parametri sono definiti.
- Trova il grado armonico N per 2,4 GHz.
- Calcola l'armonica ad alta frequenza e l'armonica a bassa frequenza in base a N e all'uplink della cella.
- Trova il primo canale Wi-Fi a 20 MHz che si trova entro il limite inferiore dell'armonica proveniente dal basso.
- 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.
- Trova il primo canale Wi-Fi a 20 MHz che rientra nel limite superiore dell'armonica proveniente dall'alto.
- 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.
- Contrassegna ogni canale da 20 MHz intermedio come canale non sicuro.
Trova i canali a 5 GHz non sicuri dalle armoniche se sono definiti i parametri.
- Trova il grado armonico N per 5 GHz. Se N è 0, vai al passaggio 5.
- Calcola l'armonica ad alta frequenza e l'armonica a bassa frequenza in base a N e all'uplink della cella.
Trova canali a 20 MHz non sicuri.
- Trova il primo canale Wi-Fi a 20 MHz che rientra nel limite inferiore dell'armonica proveniente dal basso.
- 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.
- Trova il primo canale Wi-Fi a 20 MHz che rientra nel limite superiore dell'armonica proveniente dall'alto.
- 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.
- Contrassegna ogni canale da 20 MHz intermedio come canale non sicuro con il limite di potenza specificato.
Trova canali a 40 MHz, 80 MHz e 160 MHz non sicuri
- Ripete il passaggio 3a, ma con 40 MHz, 80 MHz e 160 MHz.
- Anziché calcolare le sovrapposizioni dei canali sul bordo armonico, riutilizza le sovrapposizioni calcolate dai canali componenti più piccoli (ad esempio, se due canali da 20 MHz formano un canale da 40 MHz e hanno una sovrapposizione del 30% e del 90%, la media è una sovrapposizione del 60% per il canale da 40 MHz).
Trova i canali a 2,4 GHz non sicuri dall'intermodulazione se i parametri sono definiti.
- Trova i coefficienti di intermodulazione N, M per 2,4 GHz.
Per ogni canale Wi-Fi a 2,4 GHz:
- Calcola la bassa frequenza di intermodulazione e l'alta frequenza di intermodulazione in base a N, M, uplink della cella e canale Wi-Fi.
- 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 a 2,4 GHz.
Trova i canali a 5 GHz non sicuri dall'intermodulazione se i parametri sono definiti.
- Ripete il passaggio 4 utilizzando i canali Wi-Fi a 5 GHz e la soglia di sovrapposizione delle celle a 5 GHz.
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 da interferenze armoniche e adiacenti, il set finale viene calcolato prendendo l'unione di entrambi i set (e selezionando il limite di potenza inferiore in caso di collisioni) e rimuovendo i canali predefiniti dal set se non sono state applicate restrizioni obbligatorie.
L'algoritmo si comporta nel seguente modo:
- Se ogni canale Wi-Fi a 2,4 GHz è contrassegnato come canale non sicuro, rimuove il canale Wi-Fi a 2,4 GHz predefinito dal set.
- Se ogni canale Wi-Fi a 5 GHz è contrassegnato come canale non sicuro, rimuove il canale Wi-Fi a 5 GHz predefinito dal set.
- Restituisce l'insieme finale di canali non sicuri.
Formato della tabella di ricerca
Le tabelle di ricerca sono rappresentate in un file XML che si trova nella stringa di configurazione sovrapponibile config_wifiCoexTableFilepath
ed è definito 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>
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 di operatori (CA), gli intervalli armonici o di intermodulazione per ogni uplink o 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 di armoniche o 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 distinzione tra PCELL, PSCELL o SCELL e li tratta come uguali.
Accesso assistito basato su licenza
L'accesso assistito da licenza (LAA) è identificato come banda n. 46. L'algoritmo tratta questa band in modo simile alle altre. In questo caso, tutti i canali a 5 GHz possono essere impostati come elenco di override nella tabella di ricerca.
A seconda dei requisiti dell'operatore, l'algoritmo di evitamento 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, deve essere definito il valore
di configurazione dell'operatore 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 restrizione obbligatori per SoftAP e Wi-Fi Direct (P2P).
Informare il servizio Wi-Fi
Dopo che l'algoritmo del canale di coesistenza 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 ottenere 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 l'azione Wi-Fi
Quando il servizio Wi-Fi riceve informazioni sul set di canali non sicuri, esegue l'azione appropriata per garantire che questi canali vengano evitati. Questa sezione descrive il comportamento del servizio Wi-Fi in diversi scenari.
Informa l'autista
Poiché il driver svolge un ruolo importante nell'evitare i canali, è
essenziale 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'evitare i canali non sicuri. La sezione seguente descrive gli scenari SoftAP chiave 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 ACS abilitato (nessun SoftAP è ancora attivo)
Se i canali non sono sicuri e c'è una limitazione SoftAP
- Il framework rimuove i canali non sicuri dall'elenco ACS.
- Se l'elenco è vuoto, il framework arresta SoftAP.
Se i canali non sono sicuri e non ci sono limitazioni
- Il driver o il firmware del fornitore danno la priorità ai canali sicuri rispetto a quelli non sicuri.
SoftAP è attivo con ACS abilitato e i canali non sicuri sono aggiornati
Se il canale SoftAP non è sicuro e c'è una limitazione SoftAP
- Il framework aggiorna l'elenco ACS rimuovendo i canali non sicuri.
- Se l'elenco è vuoto, il framework chiude SoftAP.
Se il canale SoftAP non è sicuro e non ci sono limitazioni
- Il framework non esegue alcuna azione. Il driver o il firmware del fornitore gestisce l'evitamento dei canali non sicuri o l'applicazione del limite di potenza se l'evitamento non è fattibile.
Wi-Fi Direct (P2P)
Se sono presenti canali non sicuri con limitazioni Wi-Fi Direct (P2P).
- Il framework richiede
wpa_supplicant
per evitare i canali non sicuri utilizzando il metodo HALISupplicantP2pIface::setDisallowedFrequencies()
.
- Il framework richiede
Se ci sono canali non sicuri senza limitazioni.
- Il driver o il firmware del fornitore applica il limite di potenza se viene utilizzato un canale non sicuro senza limitazioni Wi-Fi Direct (P2P).
Wi-Fi Aware (NAN)
Il framework non è coinvolto nella selezione dei canali per Wi-Fi Aware (NAN) e non viene eseguita alcuna azione del framework. Il driver o il firmware del fornitore è responsabile dell'evitamento dei 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'overlay config_wifiDefaultCoexAlgorithmEnabled
. Se l'overlay è impostato su false,
l'algoritmo predefinito è 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);
Convalidare l'implementazione
Per convalidare l'implementazione della funzionalità di prevenzione della coesistenza dei canali Wi-Fi/rete mobile, utilizza i seguenti test.
Test CTS
WifiManagerTest.java
testCoexMethodsShouldFailNoPermission()
testListenOnCoexUnsafeChannels()
Test ACTS
WifiManagerTest.py
test_set_get_coex_unsafe_channels()
Test VTS
Se AIDL è implementato:
wifi_chip_aidl_test.cpp
TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
Se HIDL è implementato:
wifi_chip_hidl_test.cpp
TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)