Unikanie Wi-Fi/komórkowych kanałów Coex

Funkcja unikania kanałów Wi-Fi/komórkowych współosiowych, wprowadzona w systemie Android 12, identyfikuje i unika korzystania z niebezpiecznych kanałów Wi-Fi w przypadkach, w których mogą występować zakłócenia z/do kanałów komórkowych. Obejmuje to interfejsy takie jak STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

Na tej stronie omówiono następujące kwestie:

  • Informacje, które modem komórkowy musi zgłosić do platformy Android
  • Algorytmy wykorzystywane przez platformę Wi-Fi do obliczania kanałów Wi-Fi, których należy unikać
  • Tabele konfiguracyjne, które producenci urządzeń muszą udostępnić dla struktury Wi-Fi
  • Systemowe interfejsy API, konfiguracje i interfejsy API HAL związane z funkcją unikania kanałów
  • Zachowanie ramowe do obsługi unikania kanałów
  • Zachowanie dostawcy chipów w zakresie obsługi unikania kanałów
  • Szczegóły implementacji unikania kanałów
  • Testy sprawdzające zachowanie polegające na unikaniu kanałów

Tło

W przypadku urządzeń wyposażonych w technologie komórkowe, takie jak LTE, 5G NR i licencjonowany dostęp wspomagany (LAA), używane kanały komórkowe mogą zakłócać używany kanał Wi-Fi. Dzieje się tak, gdy kanały komórkowe i Wi-Fi znajdują się w niewielkiej odległości od siebie (sąsiadujące kanały) lub gdy występują zakłócenia harmoniczne i intermodulacyjne.

Ten rodzaj zakłóceń staje się problemem, gdy jedna antena nadaje, a druga odbiera w tym samym czasie. W takim przypadku antena nadawcza zalewa antenę odbiorczą, wpływając na jakość odbioru.

W dokumencie tym zakłócający nadajnik jest określany jako agresor , a odbiornik doświadczający zakłóceń jako ofiara . Kanał Wi-Fi, który jest agresorem lub ofiarą, nazywany jest kanałem niebezpiecznym .

Funkcja unikania kanałów Wi-Fi/komórkowych coex zapewnia spójne podejście do unikania kanałów, redukując potrzebę stosowania zastrzeżonego kodu, który odbiega od struktury Wi-Fi. Ponadto funkcja ta pozwala producentom urządzeń konfigurować, włączać i wyłączać oraz zastępować tę funkcję.

Ta funkcja umożliwia unikanie kanałów poprzez kontrolowanie kanałów Wi-Fi. Schemat unikania kanałów Wi-Fi można opisać jako serię czterech abstrakcyjnych kroków:

  1. Modem zgłasza zmianę częstotliwości komórkowej
  2. Algorytm unikania Coex oblicza niebezpieczne kanały Wi-Fi
  3. Algorytm unikania Coex informuje usługę Wi-Fi
  4. Struktura lub sterownik wykonuje odpowiednią akcję Wi-Fi

Schemat unikania kanałów

Rysunek 1. Schemat unikania kanałów

Zgłaszanie zmiany częstotliwości komórkowej

Usługa telefoniczna raportuje aktualnie używane kanały komórkowe. Gdy zmieni się częstotliwość robocza sieci komórkowej, modem zgłasza tę informację do usługi telefonicznej za pośrednictwem IRadio::PhysicalChannelConfig . Informacje te obejmują wskazania dotyczące licencjonowanego dostępu wspomaganego (LAA) i agregacji nośników (CA).

Począwszy od systemu Android 12, następujące pola w 1.6 IRadio::PhysicalChannelConfig dostarczają wymaganych informacji na temat formuł współrzędnych, które modem musi wypełnić.

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

Obliczanie niebezpiecznych kanałów Wi-Fi

Gdy modem zgłasza zmianę częstotliwości komórkowej, algorytm kanału coex oblicza zakłócenia między kanałami komórkowymi i Wi-Fi i określa, który zestaw kanałów Wi-Fi jest niebezpieczny.

Istnieje wiele rodzajów zakłóceń wymagających różnych wzorów: sąsiadujące i harmoniczne/intermodulacyjne . Ze względu na fizyczne różnice w antenie i układzie pomiędzy urządzeniami, wzorce zakłóceń sąsiednich i harmonicznych/intermodulacyjnych są różne dla każdego urządzenia. Aby to uwzględnić, producenci urządzeń muszą udostępnić tabelę przeglądową , w której można podłączyć parametry do ogólnych wzorów dla obu typów zakłóceń. Parametry te są definiowane dla każdego pasma komórkowego i odnoszą się do pasm aktywnych kanałów komórkowych.

Maksymalny limit mocy można zdefiniować w tabeli przeglądowej. Jeśli zdefiniowano maksymalny limit mocy, niebezpieczny kanał transmituje z podanym ograniczeniem mocy. Jeśli nie ma ograniczenia mocy, kanał nadaje z pełną mocą.

Ogólnie rzecz biorąc, funkcja unikania kanałów wykorzystuje podejście najlepszych starań, aby uniknąć niebezpiecznych kanałów Wi-Fi i zoptymalizować wydajność. Jednak w niektórych przypadkach (na przykład ze względu na wymagania operatora) niektóre interfejsy mają obowiązek unikać niebezpiecznych kanałów dla niektórych pasm komórkowych. W takich przypadkach obowiązkowe ograniczenia są przedstawiane jako maska ​​bitowa zawierająca wartości określające, czy blokować określone kanały, takie jak Wi-Fi Direct (P2P), SoftAp i Wi-Fi Aware (NAN). Chociaż niebezpieczny kanał stanowi zalecenie, aby nie używać tego kanału we wszystkich przypadkach użycia, obowiązkowe ograniczenia oznaczają określone przypadki użycia, których należy obowiązkowo unikać.

Jeżeli każdy kanał pasma 2,4 GHz lub 5 GHz zostanie oznaczony jako niebezpieczny, w tabeli przeglądowej można zdefiniować domyślny kanał 2,4 GHz lub domyślny kanał 5 GHz na każde zakłócające pasmo komórek jako najbezpieczniejszy wybór. Te kanały domyślne nie są zgłaszane jako kanały niebezpieczne, gdy reszta pasma jest zgłaszana jako niebezpieczna.

Lista zastąpień

Podejście formalne jest ograniczone w przypadkach, gdy zakłócenia w dużym stopniu zależą od szerokości pasma (a zatem kanały o większej przepustowości mogą być niebezpieczne, ale nie kanały o mniejszej przepustowości). W przypadkach takich jak LAA korzystne jest pominięcie obliczeń i użycie określonej listy niebezpiecznych kanałów.

Aby to zrobić, możesz określić listę zastępowania niebezpiecznych kanałów w tabeli przeglądowej dla określonych wpisów. Lista zastąpień we wpisie tabeli oznacza, że ​​obliczenia dla tego konkretnego kanału komórkowego zostały pominięte i że niebezpieczne kanały Wi-Fi dla pasującego kanału komórkowego są określone na liście zastąpień.

W przypadkach wrażliwych na szerokość pasma można selektywnie unikać określonych przepustowości, określając określone kanały o określonych szerokościach pasma na liście zastąpień. Dzieje się tak, ponieważ każdy numer kanału Wi-Fi odpowiada określonej przepustowości.

Lista zastąpień jest reprezentowana przez listę numerów kanałów lub wstępnie zdefiniowanych słów kluczowych kategorii dla każdego pasma Wi-Fi:

Kategorie 2g:

  • all (całe pasmo 2,4 GHz)

Kategorie 5g:

  • all (całe pasmo 5 GHz)
  • 20mhz (kanały 5 GHz 20 MHz)
  • 40mhz (kanały 5 GHz 40 MHz)
  • 80mhz (kanały 5 GHz 80 MHz)
  • 160mhz (kanały 5 GHz 160 MHz)

Zakłócenia sąsiedniego kanału

Aby określić zakłócenia sąsiedniego kanału, algorytm unikania współwystępowania upewnia się, że odległość ΔF pomiędzy kanałem agresora a ofiarą nie spada poniżej określonego progu .

Zakłócenia kanału

Rysunek 2. Odległość pomiędzy kanałem agresora i ofiary

Próg jest określany na podstawie fizycznej konfiguracji urządzenia i wartości progu podanej we wpisie tabeli przeglądowej dla każdego pasma zakłócającego. Pasma uważane za niezakłócające nie mają wpisu w tabeli i nie trzeba obliczać niebezpiecznych kanałów (jest to w większości przypadków).

Parametry sąsiadujących zakłóceń

  • wifiVictimMhz : próg odległości MHz dla ofiary Wi-Fi (łącze komórkowe)
  • cellVictimMhz : próg odległości MHz dla ofiary komórki (łącze w dół komórki)

Algorytm zachowuje się następująco dla każdego aktywnego kanału komórkowego:

  1. Próbuje znaleźć wpis w tabeli przeglądowej dla pasma kanału. Jeśli nie zostanie znaleziony żaden wpis w tabeli, zwracany jest komunikat bez niebezpiecznych kanałów dla tego kanału komórki.
  2. Na podstawie pasma komórkowego identyfikuje, które pasmo Wi-Fi jest zagrożone i z której strony pasma pochodzą zakłócenia (na przykład niższe kanały 2,4 GHz, wyższe kanały 2,4 GHz, niższe kanały 5 GHz).
  3. Jeśli obecne jest wifiVictimMhz , a kanał komórkowy ma łącze nadrzędne i

    1. Jeśli dolna część pasma Wi-Fi jest zagrożona

      1. Znajduje górną granicę niebezpiecznych kanałów, dodając Wi-FiVictimMhz do najwyższej częstotliwości łącza zwrotnego komórki.
      2. Znajduje pierwszy kanał Wi-Fi 20 MHz, którego dolna krawędź pokrywa się z limitem.
      3. Oznacza kanał Wi-Fi, każdy kanał o większej przepustowości, który go zawiera (na przykład 40 MHz, 80 MHz) i każdy dolny kanał w tym samym paśmie, co kanał niebezpieczny.
    2. Jeśli zagrożona jest górna część pasma Wi-Fi

      1. Znajduje dolny limit niebezpiecznych kanałów, odejmując Wi-FiVictimMhz od najniższej częstotliwości łącza nadrzędnego komórki.
      2. Znajduje pierwszy kanał Wi-Fi, którego górna krawędź zachodzi na limit.
      3. Zaznacza kanał Wi-Fi, każdy większy kanał, który go zawiera (na przykład 40M Hz, 80 MHz) i każdy wyższy kanał w tym samym paśmie, co kanał niebezpieczny.
  4. Jeśli obecny jest cellVictimMhz , a kanał komórkowy ma łącze w dół.

    1. Wykonuje krok 3, używając cellVictimMhz jako progu i porównuje z łączem w dół komórki, a nie z łączem w górę.
  5. Stosuje ograniczenie mocy wpisu tabeli do obliczonych niebezpiecznych kanałów.

Niebezpieczne obliczanie kanału

Rysunek 3. Obliczanie niebezpiecznego kanału dla zakłóceń sąsiedniego kanału

Zniekształcenia harmoniczne/intermodulacyjne

W przypadku zniekształceń harmonicznych/intermodulacyjnych silnik współbieżności oblicza zakres sygnału harmonicznego/intermodulacyjnego i ocenia procentowe nakładanie się sygnału na potencjalny kanał ofiary. Jeżeli nakładanie się przekracza próg nakładania, algorytm uznaje tę sytuację za niebezpieczną. Obliczenie procentowego nakładania się zniekształceń harmonicznych/intermodulacyjnych na kanale ofiary przeprowadza się za pomocą następującego równania:

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

W przypadku zniekształceń harmonicznych algorytm uwzględnia zniekształcenia harmoniczne kanału łącza zwrotnego komórki, które są ofiarą kanałów Wi-Fi. Następnie zastępuje wysokie i niskie zniekształcenie wartościami harmonicznymi w oparciu o częstotliwości łącza zwrotnego komórki i stopień harmoniczny $N$.

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

Niebezpieczne zniekształcenie harmoniczne przy obliczaniu kanału

Rysunek 4. Obliczanie niebezpiecznego kanału pod kątem zniekształceń harmonicznych

W przypadku intermodulacji algorytm bierze pod uwagę zniekształcenie intermodulacyjne łącza w górę komórki i kanału Wi-Fi, które szkodzi kanałowi łącza w dół komórki. Następnie zastępuje wysokie i niskie zniekształcenia wartościami intermodulacji w oparciu o częstotliwości łącza zwrotnego komórki, częstotliwości Wi-Fi i dwa współczynniki intermodulacji $ M $, $ N $.

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

Niebezpieczne zniekształcenie intermodulacyjne przy obliczaniu kanału

Rysunek 5. Niebezpieczne obliczenia kanału dla zniekształceń intermodulacyjnych

Możesz określić $ M $, $ N $ i wartości nakładania się w tabeli przeglądowej dla każdego zakłócającego pasma komórek. Jeśli dla danego pasma nie ma zakłóceń, wówczas wartości są pomijane w tabeli dla wpisu tego pasma. Można niezależnie zdefiniować dwa zestawy tych wartości dla pasm Wi-Fi 2,4 GHz i 5 GHz.

Podobnie jak algorytm sąsiadującej interferencji, algorytm ponownie wykorzystuje tę samą wartość ograniczenia mocy zdefiniowaną dla zakłócającego pasma komórkowego.

Algorytm zachowuje się następująco dla każdego aktywnego kanału komórkowego:

  1. Dla pasma kanału komórkowego próbuje znaleźć wpis w tabeli przeglądowej. Jeśli nie zostanie znaleziony żaden wpis w tabeli, zwracany jest komunikat bez niebezpiecznych kanałów dla tego kanału.
  2. Znajduje niebezpieczne kanały 2,4 GHz na podstawie harmonicznych, jeśli zdefiniowano parametry.

    1. Znajduje stopień harmoniczny N dla częstotliwości 2,4 GHz.
    2. Oblicza wysoką częstotliwość harmoniczną i niską częstotliwość harmoniczną na podstawie N i łącza zwrotnego komórki.
    3. Znajduje pierwszy kanał Wi-Fi 20 MHz mieszczący się w dolnej granicy harmonicznej pochodzącej z dołu.
    4. Oblicza nakładanie się harmonicznych w kanale Wi-Fi i oznacza kanał jako niebezpieczny, jeśli nakładanie się przekracza próg nakładania się Wi-Fi 2,4 GHz.
    5. Znajduje pierwszy kanał Wi-Fi 20 MHz mieszczący się w górnej granicy harmonicznej pochodzącej z góry.
    6. Oblicza nakładanie się harmonicznych w kanale Wi-Fi i oznacza kanał jako niebezpieczny, jeśli nakładanie się przekracza próg nakładania się Wi-Fi 2,4 GHz.
    7. Oznacza każdy kanał 20 MHz pomiędzy nimi jako kanał niebezpieczny.
  3. Znajduje niebezpieczne kanały 5 GHz na podstawie harmonicznych, jeśli zdefiniowano parametry.

    1. Znajduje stopień harmoniczny N dla 5 GHz. Jeżeli N wynosi 0, następuje przejście do kroku 5.
    2. Oblicza wysoką częstotliwość harmoniczną i niską częstotliwość harmoniczną na podstawie N i łącza zwrotnego komórki.
    3. Znajduje niebezpieczne kanały 20 MHz.

      1. Znajduje pierwszy kanał Wi-Fi 20 MHz mieszczący się w dolnej granicy harmonicznej pochodzącej z dołu.
      2. Oblicza nakładanie się harmonicznych w kanale Wi-Fi i oznacza kanał jako niebezpieczny, jeśli nakładanie się przekracza próg nakładania się Wi-Fi 2,4 GHz.
      3. Znajduje pierwszy kanał Wi-Fi 20 MHz mieszczący się w górnej granicy harmonicznej pochodzącej z góry.
      4. Oblicza nakładanie się harmonicznych w kanale Wi-Fi i oznacza kanał jako niebezpieczny, jeśli nakładanie się przekracza próg nakładania się Wi-Fi 2,4 GHz.
      5. Oznacza każdy kanał 20 MHz pomiędzy nimi jako kanał niebezpieczny z określonym ograniczeniem mocy.
    4. Znajduje niebezpieczne kanały 40 MHz, 80 MHz, 160 MHz

      1. Powtarza krok 3a, ale z częstotliwościami 40 MHz, 80 MHz, 160 MHz.
      2. Zamiast obliczać nakładanie się kanałów na krawędzi harmonicznej, ponownie wykorzystuje obliczone nałożenia z mniejszych kanałów składowych (na przykład, jeśli dwa kanały 20 MHz tworzą kanał 40 MHz i mają nakładanie się 30% i 90%, to średnia wynosi 60 % nakładania się dla kanału 40 MHz).
  4. Znajduje niebezpieczne kanały 2,4 GHz z intermodulacji, jeśli zdefiniowano parametry.

    1. Znajduje współczynniki intermodulacji N, M dla 2,4 GHz.
    2. Dla każdego kanału Wi-Fi 2,4 GHz:

      1. Oblicza niską częstotliwość intermodulacji i wysoką częstotliwość intermodulacji na podstawie N, M, łącza zwrotnego komórki i kanału Wi-Fi.
      2. Oblicza nakładanie się intermodulacji w łączu w dół komórki i oznacza kanał jako niebezpieczny, jeśli nakładanie się przekracza próg nakładania się komórek 2,4 GHz.
  5. Znajduje niebezpieczne kanały 5 GHz pochodzące z intermodulacji, jeśli zdefiniowano parametry.

    1. Powtarza krok 4, używając kanałów Wi-Fi 5 GHz i progu nakładania się komórek 5 GHz.
  6. Stosuje ograniczenie mocy wpisu tabeli do obliczonych niebezpiecznych kanałów.

Ostateczny wynik

Po obliczeniu obu zestawów kanałów niebezpiecznych z powodu zakłóceń sąsiednich i harmonicznych, ostateczny zestaw jest obliczany poprzez zsumowanie obu zestawów (i wybranie dolnego limitu mocy w przypadku kolizji) i usunięcie kanałów domyślnych ze zestawu, jeśli występują nie zastosowano żadnych obowiązkowych ograniczeń.

Algorytm zachowuje się następująco:

  1. Jeśli każdy kanał Wi-Fi 2,4 GHz zostanie oznaczony jako kanał niebezpieczny, domyślny kanał Wi-Fi 2,4 GHz zostanie usunięty z zestawu.
  2. Jeżeli każdy kanał Wi-Fi 5 GHz zostanie oznaczony jako kanał niebezpieczny, domyślny kanał Wi-Fi 5 GHz zostanie usunięty z zestawu.
  3. Zwraca ostateczny zestaw niebezpiecznych kanałów.

Format tabeli przeglądowej

Tabele przeglądowe są reprezentowane w pliku XML znajdującym się w nakładanym ciągu konfiguracyjnym config_wifiCoexTableFilepath i są zdefiniowane w następującym 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>

Przykładowa tabela XML

Poniżej znajduje się przykładowa tabela przeglądowa 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>

Agregacja nośników

W przypadku agregacji nośnych (CA) zakresy harmonicznych/intermodulacji dla każdego łącza w górę/w dół mogą nie powodować wystarczającego nakładania się, aby powodować niezależne zakłócenia, ale mogą powodować wystarczające nakładanie się po połączeniu. Algorytm uwzględnia niezależnie każdy zakres harmonicznych/intermodulacji i sumuje zwracane niebezpieczne kanały. W przypadku intermodulacji oznacza to ocenę zakresu intermodulacji każdego UL na każdym DL.

Algorytm nie rozróżnia PCELL/PSCELL/SCELL i traktuje je jako równe.

Dostęp wspomagany licencją

Dostęp wspomagany licencją (LAA) jest identyfikowany jako pasmo nr 46. Algorytm traktuje to pasmo podobnie jak inne pasma. W takim przypadku pełne kanały 5 GHz można ustawić jako listę zastąpień w tabeli przeglądowej.

W zależności od wymagań operatora algorytm unikania kanałów ustala obowiązkowe ograniczenia dla SoftAP i Wi-Fi Direct (P2P) dla całego pasma Wi-Fi 5 GHz. Aby algorytm obsługiwał ten przypadek użycia, należy zdefiniować wartość konfiguracji operatora restrict_5g_softap_wifi_direct_for_laa . Jeśli kanał komórkowy znajduje się w LAA i wartość restrict_5g_softap_wifi_direct_for_laa ma true , algorytm zwraca zestaw niebezpiecznych kanałów w całym paśmie 5 Ghz i ustawia obowiązkowe flagi ograniczeń dla SoftAP i Wi-Fi Direct (P2P).

Informowanie usługi Wi-Fi

Po obliczeniu przez algorytm kanału coex niebezpiecznych kanałów, aby zapewnić aplikacjom systemowym niebezpieczne kanały i ich ograniczenia, użyj następującej struktury danych @SystemApi zdefiniowanej w środowisku 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();
}

Użyj następujących metod WifiManager @SystemApi i wywołania zwrotnego, aby umożliwić aplikacjom uzyskiwanie zaktualizowanych wartości w przypadku zmiany niebezpiecznych kanałów.

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

Wykonywanie akcji Wi-Fi

Gdy usługa Wi-Fi otrzyma informację o zestawie niebezpiecznych kanałów, podejmuje odpowiednie działania, aby mieć pewność, że kanały te będą omijane. W tej sekcji opisano zachowanie usługi Wi-Fi w różnych scenariuszach.

Informowanie kierowcy

Ponieważ sterownik odgrywa główną rolę w unikaniu kanałów, istotne jest przekazywanie niebezpiecznych kanałów do sterownika i oprogramowania sprzętowego. Aby to zrobić, użyj następującego interfejsu API IWifiChip HAL.

Dla AIDL:

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

Dla HIDL (1.5 lub nowszy):

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

SoftAP

SoftAP jest głównym przypadkiem użycia do unikania niebezpiecznych kanałów. W poniższej sekcji opisano kluczowe scenariusze SoftAp, w których można zastosować unikanie kanałów za pomocą ACS. Scenariusze opisują zachowanie algorytmu unikania kanałów oraz sterownika lub oprogramowania sprzętowego.

Uruchamianie SoftAP z włączoną funkcją ACS (żaden SoftAP nie jest jeszcze uruchomiony)

  1. Jeśli kanały są niebezpieczne i istnieją ograniczenia SoftAP

    1. Struktura usuwa niebezpieczne kanały z listy ACS.
    2. Jeśli lista jest pusta, platforma zatrzymuje SoftAP.
  2. Jeśli kanały są niebezpieczne i nie ma żadnych ograniczeń

    1. Sterownik/oprogramowanie dostawcy daje pierwszeństwo kanałom bezpiecznym przed kanałami niebezpiecznymi.

SoftAP działa z włączoną funkcją ACS i zaktualizowano niebezpieczne kanały

  1. Jeśli kanał SoftAP jest niebezpieczny i istnieją ograniczenia SoftAP

    1. Struktura aktualizuje listę ACS, usuwając niebezpieczne kanały.
    2. Jeśli lista jest pusta, framework zamyka SoftAP.
  2. Jeśli kanał SoftAP jest niebezpieczny i nie ma żadnych ograniczeń

    1. Struktura nie podejmuje żadnych działań. Sterownik/oprogramowanie sprzętowe dostawcy obsługuje unikanie niebezpiecznych kanałów lub stosowanie ograniczenia mocy, jeśli uniknięcie tego nie jest możliwe.

Wi-Fi Direct (P2P)

  1. Jeśli istnieją niebezpieczne kanały z ograniczeniami Wi-Fi Direct (P2P).

    1. Struktura żąda wpa_supplicant , aby uniknąć niebezpiecznych kanałów przy użyciu metody HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Jeśli istnieją niebezpieczne kanały bez ograniczeń.

    1. Sterownik/oprogramowanie sprzętowe dostawcy stosuje ograniczenie mocy, jeśli używany jest niebezpieczny kanał bez ograniczeń Wi-Fi Direct (P2P).

Obsługuje Wi-Fi (NAN)

Struktura nie bierze udziału w wyborze kanału dla Wi-Fi Aware (NAN) i nie są podejmowane żadne działania ramowe. Za unikanie kanałów Wi-Fi Aware (NAN) odpowiada sterownik/oprogramowanie sprzętowe dostawcy.

Wyłączenie algorytmu

Jeśli chcesz wyłączyć domyślną implementację algorytmu i przekazać własną listę niebezpiecznych kanałów w celu uniknięcia, skonfiguruj nakładkę config_wifiDefaultCoexAlgorithmEnabled . Jeśli nakładka ma wartość Fałsz, domyślny algorytm jest wyłączony. Następnie możesz użyć własnego, zastrzeżonego algorytmu poza pasmem, aby wygenerować listę niebezpiecznych kanałów, które można podłączyć do platformy za pomocą następującego systemowego interfejsu API.

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

Walidacja wdrożenia

Aby sprawdzić implementację funkcji unikania kanałów Wi-Fi/komórkowych coex, wykonaj poniższe testy.

Testy CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Testy ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Testy VTS

  • Jeśli zaimplementowano AIDL: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • Jeśli zaimplementowano HIDL: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)