Wi-Fi/셀룰러 코엑스 채널 회피

Android 12에 도입된 Wi-Fi/셀룰러 coex 채널 회피 기능은 셀룰러 채널과의 간섭이 있을 수 있는 경우 안전하지 않은 Wi-Fi 채널을 식별하고 사용을 방지합니다. 여기에는 STA, SoftAp, Wi-Fi Direct(P2P), Wi-Fi Aware(NAN)와 같은 인터페이스가 포함됩니다.

이 페이지에서는 다음에 대해 설명합니다.

  • 셀룰러 모뎀이 Android 프레임워크에 보고해야 하는 정보
  • Wi-Fi 프레임워크가 회피할 Wi-Fi 채널을 계산하는 데 사용하는 알고리즘
  • 장치 제조업체가 Wi-Fi 프레임워크에 대해 제공해야 하는 구성 테이블
  • 채널 회피 기능과 관련된 시스템 API, 구성 및 HAL API
  • 채널 회피 처리를 위한 프레임워크 동작
  • 채널 회피 처리를 위한 칩 공급업체 동작
  • 채널 회피를 위한 구현 세부 정보
  • 채널 회피 행동 검증을 위한 테스트

배경

LTE, 5G NR 및 LAA(Licensed Assisted Access)와 같은 셀룰러 기술이 있는 장치의 경우 사용 중인 셀룰러 채널이 사용 중인 Wi-Fi 채널을 방해할 수 있습니다. 이는 셀룰러 및 Wi-Fi 채널이 짧은 주파수 분리(인접 채널) 내에 있거나 고조파 및 상호 변조 간섭이 있을 때 발생합니다.

이러한 유형의 간섭은 한 안테나가 송신하고 다른 안테나가 동시에 수신할 때 문제가 됩니다. 이 경우 송신 안테나가 수신 안테나를 범람하여 수신 품질에 영향을 줍니다.

이 문서에서는 간섭하는 송신기를 공격자 로, 간섭을 받는 수신기를 피해자 로 나타냅니다. 공격자 또는 피해자인 Wi-Fi 채널을 안전하지 않은 채널 이라고 합니다.

Wi-Fi/셀룰러 coex 채널 회피 기능은 채널 회피를 위한 일관된 접근 방식을 제공하여 Wi-Fi 프레임워크에서 다른 독점 코드의 필요성을 줄입니다. 또한 이 기능을 통해 장치 제조업체는 기능을 구성, 활성화 및 비활성화하고 무시할 수 있습니다.

이 기능은 Wi-Fi 채널을 제어하여 채널 회피를 수행합니다. Wi-Fi 채널 회피 체계는 일련의 4가지 추상 단계로 설명할 수 있습니다.

  1. 모뎀이 셀룰러 주파수의 변화를 보고합니다.
  2. Coex 회피 알고리즘은 안전하지 않은 Wi-Fi 채널을 계산합니다.
  3. Coex 회피 알고리즘이 Wi-Fi 서비스에 알려줍니다.
  4. 프레임워크 또는 드라이버가 적절한 Wi-Fi 작업을 수행합니다.

채널 회피 방식

그림 1. 채널 회피 방식

셀룰러 주파수 변경 보고

전화 통신 서비스는 현재 사용 중인 셀룰러 채널을 보고합니다. 작동하는 셀룰러 주파수가 변경되면 모뎀은 IRadio::PhysicalChannelConfig 를 통해 이 정보를 전화 통신 서비스에 보고합니다. 이 정보에는 LAA(Licensed Assisted Access) 및 CA(Carrier Aggregation)에 대한 표시가 포함됩니다.

Android 12부터 1.6 IRadio::PhysicalChannelConfig 의 다음 필드는 모뎀이 채워야 하는 coex 공식에 대한 필수 정보를 제공합니다.

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

안전하지 않은 Wi-Fi 채널 계산

모뎀이 셀룰러 주파수 변경을 보고하면 coex 채널 알고리즘은 셀룰러 채널과 Wi-Fi 채널 간의 간섭을 계산하고 안전하지 않은 Wi-Fi 채널 집합을 결정합니다.

서로 다른 공식이 필요한 여러 유형의 간섭이 있습니다. 인접고조파/상호변조 . 장치 간의 안테나 및 레이아웃의 물리적 차이로 인해 장치마다 인접 및 고조파/상호변조 간섭 패턴이 다릅니다. 이를 설명하기 위해 장치 제조업체는 매개변수를 두 가지 유형의 간섭에 대한 일반 공식에 연결하는 조회 테이블 을 제공해야 합니다. 이러한 매개변수는 셀 대역별로 정의되며 활성 셀 채널의 대역에서 참조됩니다.

최대 전력 상한 은 조회 테이블에서 정의할 수 있습니다. 최대 전력 제한이 정의되면 안전하지 않은 채널은 제공된 전력 제한으로 전송합니다. 전력 제한이 없으면 채널은 최대 전력으로 전송합니다.

일반적으로 채널 회피 기능은 성능을 최적화하기 위해 안전하지 않은 Wi-Fi 채널을 피하기 위해 최선의 접근 방식을 사용합니다. 그러나 특정 경우(예: 캐리어 요구 사항 때문에)에서는 특정 셀룰러 ​​대역에 대해 안전하지 않은 채널을 피하기 위해 특정 인터페이스가 필수입니다. 이러한 경우 필수 제한 사항 은 Wi-Fi Direct(P2P), SoftAp 및 Wi-Fi Aware(NAN)와 같은 특정 채널을 금지할지 여부에 대한 값을 포함하는 비트 마스크로 표시됩니다. 안전하지 않은 채널은 모든 사용 사례에 대해 해당 채널을 사용하는 것에 대한 권장 사항으로 작동하지만 필수 제한은 특정 사용 사례를 필수 회피로 표시합니다.

2.4GHz 또는 5GHz 대역의 모든 채널이 안전하지 않은 것으로 표시된 경우 조회 테이블은 가장 안전한 선택으로 간섭 셀 대역당 기본 2.4GHz 채널 또는 기본 5GHz 채널을 정의할 수 있습니다. 이러한 기본 채널은 나머지 대역이 안전하지 않은 것으로 보고될 때 안전하지 않은 채널로 보고되지 않습니다.

재정의 목록

간섭이 대역폭에 크게 의존하는 경우(따라서 대역폭이 더 큰 채널은 안전하지 않을 수 있지만 대역폭이 더 작은 채널은 안전하지 않을 수 있음) 공식적 접근 방식이 제한됩니다. LAA와 같은 경우에는 계산을 건너뛰고 지정된 안전하지 않은 채널 목록을 사용하는 것이 좋습니다.

이렇게 하려면 특정 항목에 대한 조회 테이블에서 안전하지 않은 채널의 재정의 목록 을 지정할 수 있습니다. 테이블 항목의 재정의 목록은 해당 특정 셀 채널에 대한 계산을 건너뛰고 일치하는 셀 채널에 대한 안전하지 않은 Wi-Fi 채널이 재정의 목록에 의해 지정되었음을 나타냅니다.

대역폭에 민감한 경우 재정의 목록에서 특정 대역폭으로 특정 채널을 지정하여 특정 대역폭을 선택적으로 피할 수 있습니다. 각 Wi-Fi 채널 번호는 지정된 대역폭에 해당하기 때문입니다.

재정의 목록은 각 Wi-Fi 대역에 대해 미리 정의된 카테고리 키워드 또는 채널 번호 목록으로 표시됩니다.

2g 카테고리:

  • all (전체 2.4GHz 대역)

5g 카테고리:

  • all (전체 5GHz 대역)
  • 20mhz (5GHz 20MHz 채널)
  • 40mhz (5GHz 40MHz 채널)
  • 80mhz (5GHz 80MHz 채널)
  • 160mhz (5GHz 160MHz 채널)

인접 채널 간섭

인접 채널 간섭을 결정하기 위해 coex 회피 알고리즘은 공격자와 희생 채널 사이의 거리 ΔF 가 지정된 임계값 아래로 가지 않도록 합니다.

채널 간섭

그림 2. 공격자와 피해자 채널 간의 거리

임계값은 장치의 물리적 구성과 간섭 대역별로 조회 테이블 항목에 제공된 임계값에 의해 결정됩니다. 비간섭으로 간주되는 대역에는 테이블 항목이 없으며 안전하지 않은 채널을 계산할 필요가 없습니다(대부분의 경우).

인접 간섭 매개변수

  • wifiVictimMhz : Wi-Fi 피해자에 대한 MHz 거리 임계값(셀 업링크)
  • cellVictimMhz : 셀 희생에 대한 MHz 거리 임계값(셀 다운링크)

알고리즘은 각 활성 셀 채널에 대해 다음과 같이 동작합니다.

  1. 채널 대역의 경우 조회 테이블 항목을 찾으려고 합니다. 테이블 항목이 없으면 해당 셀 채널에 대해 안전하지 않은 채널이 없는 상태로 반환됩니다.
  2. 셀룰러 대역을 기반으로 위험에 처한 Wi-Fi 대역과 대역의 어느 쪽에서 간섭이 발생하는지 식별합니다(예: 낮은 2.4GHz 채널, 높은 2.4GHz 채널, 낮은 5GHz 채널).
  3. wifiVictimMhz 가 있고 셀 채널에 업링크가 있고

    1. Wi-Fi 대역의 하단이 위험할 경우

      1. 셀 업링크의 최고 주파수에 wifiVictimMhz를 추가하여 안전하지 않은 채널의 상한을 찾습니다.
      2. 아래쪽 가장자리가 제한과 겹치는 첫 번째 20Mhz Wi-Fi 채널을 찾습니다.
      3. Wi-Fi 채널, Wi-Fi 채널을 포함하는 모든 더 큰 대역폭 채널(예: 40Mhz, 80Mhz) 및 동일한 대역의 모든 하위 채널을 안전하지 않은 채널로 표시합니다.
    2. Wi-Fi 대역의 윗부분이 위험할 경우

      1. 셀 업링크의 최저 주파수에서 wifiVictimMhz를 빼서 안전하지 않은 채널의 하한을 찾습니다.
      2. 상단 가장자리가 제한과 겹치는 첫 번째 Wi-Fi 채널을 찾습니다.
      3. Wi-Fi 채널, 이를 포함하는 더 큰 모든 채널(예: 40Mhz, 80Mhz) 및 동일한 대역의 모든 상위 채널을 안전하지 않은 채널로 표시합니다.
  4. cellVictimMhz 가 존재하고 셀 채널에 다운링크가 있는 경우.

    1. cellVictimMhz 를 임계값으로 사용하여 3단계를 수행하고 셀 업링크 대신 셀 다운링크와 비교합니다.
  5. 계산된 안전하지 않은 채널에 테이블 항목의 전력 제한을 적용합니다.

안전하지 않은 채널 계산

그림 3. 인접 채널 간섭에 대한 안전하지 않은 채널 계산

고조파/상호변조 왜곡

고조파/상호변조 왜곡의 경우, coex 엔진은 고조파/상호변조 신호의 범위를 계산하고 잠재적 희생 채널과의 중첩 비율을 평가합니다. 중첩이 중첩 임계값을 초과하면 알고리즘은 이를 안전하지 않은 상황으로 간주합니다. 희생 채널에서 고조파/상호변조 왜곡의 퍼센트 중첩 계산은 다음 방정식으로 수행됩니다.

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

고조파 왜곡의 경우 알고리즘은 Wi-Fi 채널을 희생시키는 셀 업링크 채널의 고조파 왜곡을 고려합니다. 그런 다음 높은 왜곡과 낮은 왜곡을 셀 업링크 주파수 및 고조파 차수 $N $에 기반한 고조파 값으로 대체합니다.

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

안전하지 않은 채널 계산 고조파 왜곡

그림 4. 고조파 왜곡에 대한 안전하지 않은 채널 계산

상호 변조의 경우 알고리즘은 셀 상향링크 및 셀 하향링크 채널을 희생시키는 Wi-Fi 채널의 상호 변조 왜곡을 고려합니다. 그런 다음 셀 업링크 주파수, Wi-Fi 주파수 및 두 개의 상호 변조 계수 $M $, $N $를 기반으로 하는 상호 변조 값으로 높은 왜곡과 낮은 왜곡을 대체합니다.

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

안전하지 않은 채널 계산 상호 변조 왜곡

그림 5. 상호변조 왜곡에 대한 안전하지 않은 채널 계산

$ M $, $ N $ 및 룩업 테이블에서 간섭 셀 대역별로 값을 겹칠 수 있습니다. 대역에 대한 간섭이 없으면 해당 대역 항목에 대한 표에서 값이 생략됩니다. Wi-Fi 2.4GHz 및 5GHz 대역에 대해 이러한 값의 두 집합을 독립적으로 정의할 수 있습니다.

인접 간섭 알고리즘과 유사하게 이 알고리즘은 간섭 셀 대역별로 정의된 동일한 전력 상한 값을 재사용합니다.

알고리즘은 각 활성 셀 채널에 대해 다음과 같이 동작합니다.

  1. 셀 채널의 대역에 대해 룩업 테이블 항목을 찾으려고 합니다. 테이블 항목이 없으면 이 채널에 대해 안전하지 않은 채널이 없는 상태로 반환됩니다.
  2. 매개변수가 정의된 경우 고조파에서 안전하지 않은 2.4GHz 채널을 찾습니다.

    1. 2.4GHz에 대한 고조파 차수 N을 찾습니다.
    2. N 및 셀 업링크를 기반으로 고조파 고주파 및 고조파 저주파를 계산합니다.
    3. 아래에서 오는 고조파의 하한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
    4. Wi-Fi 채널에서 고조파의 겹침을 계산하고 겹침이 2.4GHz Wi-Fi 겹침 임계값을 초과하는 경우 채널을 안전하지 않은 것으로 표시합니다.
    5. 위에서 오는 고조파의 상한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
    6. Wi-Fi 채널에서 고조파의 겹침을 계산하고 겹침이 2.4GHz Wi-Fi 겹침 임계값을 초과하는 경우 채널을 안전하지 않은 것으로 표시합니다.
    7. 그 사이의 모든 20MHz 채널을 안전하지 않은 채널로 표시합니다.
  3. 매개변수가 정의된 경우 고조파에서 안전하지 않은 5GHz 채널을 찾습니다.

    1. 5GHz에 대한 고조파 차수 N을 찾습니다. N이 0이면 5단계로 건너뜁니다.
    2. N 및 셀 업링크를 기반으로 고조파 고주파 및 고조파 저주파를 계산합니다.
    3. 안전하지 않은 20Mhz 채널을 찾습니다.

      1. 아래에서 오는 고조파의 하한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
      2. Wi-Fi 채널에서 고조파의 겹침을 계산하고 겹침이 2.4GHz Wi-Fi 겹침 임계값을 초과하는 경우 채널을 안전하지 않은 것으로 표시합니다.
      3. 위에서 오는 고조파의 상한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
      4. Wi-Fi 채널에서 고조파의 겹침을 계산하고 겹침이 2.4GHz Wi-Fi 겹침 임계값을 초과하는 경우 채널을 안전하지 않은 것으로 표시합니다.
      5. 지정된 전력 캡을 사용하여 그 사이의 모든 20MHz 채널을 안전하지 않은 채널로 표시합니다.
    4. 안전하지 않은 40MHz, 80MHz, 160MHz 채널을 찾습니다.

      1. 3a단계를 40MHz, 80MHz, 160MHz로 반복합니다.
      2. 하모닉 에지에서 채널의 중첩을 계산하는 대신 더 작은 구성 채널에서 계산된 중첩을 재사용합니다(예: 두 개의 20Mhz 채널이 40Mhz 채널을 만들고 30% 및 90% 중첩이 있는 경우 평균은 60% 중첩). 40Mhz 채널용).
  4. 매개변수가 정의된 경우 상호변조에서 안전하지 않은 2.4GHz 채널을 찾습니다.

    1. 2.4GHz에 대한 상호변조 계수 N, M을 찾습니다.
    2. 각 2.4GHz Wi-Fi 채널:

      1. N, M, 셀 업링크 및 Wi-Fi 채널을 기반으로 상호 변조 저주파 및 상호 변조 고주파를 계산합니다.
      2. 셀 다운링크를 통한 상호 변조의 중첩을 계산하고 중첩이 2.4GHz 셀 중첩 임계값을 초과하는 경우 채널을 안전하지 않은 것으로 표시합니다.
  5. 매개변수가 정의된 경우 상호변조에서 안전하지 않은 5GHz 채널을 찾습니다.

    1. 5GHz Wi-Fi 채널 및 5GHz 셀 오버랩 임계값을 사용하여 4단계를 반복합니다.
  6. 계산된 안전하지 않은 채널에 테이블 항목의 전력 제한을 적용합니다.

최종 결과

인접 및 고조파 간섭으로부터 안전하지 않은 채널의 두 세트가 모두 계산된 후 두 세트의 합집합을 취하고(충돌이 있는 경우 더 낮은 전력 캡을 선택) 최종 세트가 계산되고 충돌이 있는 경우 세트에서 기본 채널을 제거합니다. 필수 제한 사항이 적용되지 않습니다.

알고리즘은 다음과 같이 작동합니다.

  1. 모든 2.4GHz Wi-Fi 채널이 안전하지 않은 채널로 표시되면 세트에서 기본 2.4GHz Wi-Fi 채널을 제거합니다.
  2. 모든 5GHz Wi-Fi 채널이 안전하지 않은 채널로 표시되면 세트에서 기본 5GHz Wi-Fi 채널을 제거합니다.
  3. 안전하지 않은 채널의 최종 세트를 반환합니다.

룩업 테이블 형식

조회 테이블은 오버레이 가능한 구성 문자열 config_wifiCoexTableFilepath 에 있는 XML 파일로 표시되며 다음 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>

예제 XML 테이블

다음은 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>

캐리어 어그리게이션

CA(Carrier Aggregation)의 경우, 각 업링크/다운링크에 대한 고조파/상호변조 범위는 독립적으로 간섭을 일으킬 만큼 충분한 중첩을 생성하지 않을 수 있지만 결합될 때 충분한 중첩을 생성할 수 있습니다. 알고리즘은 각 고조파/상호변조 범위를 독립적으로 고려하고 반환된 안전하지 않은 채널의 합집합을 취합니다. 상호 변조의 경우 이는 모든 DL에 대한 모든 UL의 상호 변조 범위를 평가하는 것을 의미합니다.

알고리즘은 PCELL/PSCELL/SCELL을 구분하지 않고 동등하게 취급합니다.

라이선스 지원 액세스

LAA(License Assisted Access)는 밴드 #46으로 식별됩니다. 알고리즘은 이 대역을 다른 대역과 유사하게 취급합니다. 이 경우 전체 5Ghz 채널을 조회 테이블에서 재정의 목록으로 설정할 수 있습니다.

캐리어 요구 사항에 따라 채널 회피 알고리즘은 전체 5GHz Wi-Fi 대역에 대해 SoftAP 및 Wi-Fi Direct(P2P)에 대한 필수 제한을 설정합니다. 이 사용 사례를 처리하는 알고리즘의 경우 이동통신사 구성 값 restrict_5g_softap_wifi_direct_for_laa 를 정의해야 합니다. 셀 채널이 LAA에 있고 restrict_5g_softap_wifi_direct_for_laatrue 인 경우 알고리즘은 전체 5Ghz 대역과 함께 안전하지 않은 채널 세트를 반환하고 SoftAP 및 Wi-Fi Direct(P2P)에 대한 필수 제한 플래그를 설정합니다.

Wi-Fi 서비스 안내

coex 채널 알고리즘이 안전하지 않은 채널을 계산한 후 시스템 앱에 안전하지 않은 채널 및 해당 제한 사항을 제공하려면 Android 프레임워크에 정의된 다음 @SystemApi 데이터 구조를 사용하십시오.

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

다음 WifiManager @SystemApi 메서드 및 콜백을 사용하여 안전하지 않은 채널이 변경될 때 앱이 업데이트된 값을 받을 수 있도록 합니다.

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

Wi-Fi 작업 수행

Wi-Fi 서비스는 안전하지 않은 채널 집합에 대한 정보를 수신하면 해당 채널을 피하도록 적절한 조치를 수행합니다. 이 섹션에서는 다양한 시나리오에서 Wi-Fi 서비스의 동작을 설명합니다.

운전자에게 알리기

드라이버는 채널 회피를 수행하는 데 중요한 역할을 하기 때문에 안전하지 않은 채널을 드라이버와 펌웨어에 전달하는 것이 필수적입니다. 이렇게 하려면 1.5::IWifiChip HAL API를 사용합니다.

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

소프트AP

SoftAP는 안전하지 않은 채널 회피의 주요 사용 사례입니다. 다음 섹션에서는 ACS와 함께 채널 회피를 적용할 수 있는 주요 SoftAp 시나리오를 간략하게 설명합니다. 시나리오는 채널 회피 알고리즘과 드라이버 또는 펌웨어의 동작을 설명합니다.

ACS가 활성화된 SoftAP 시작(SoftAP이 아직 작동하지 않음)

  1. 채널이 안전하지 않고 SoftAP 제한이 있는 경우

    1. 프레임워크는 ACS 목록에서 안전하지 않은 채널을 제거합니다.
    2. 목록이 비어 있으면 프레임워크가 SoftAP를 중지합니다.
  2. 채널이 안전하지 않고 제한이 없는 경우

    1. 공급업체 드라이버/펌웨어는 안전하지 않은 채널보다 안전한 채널에 우선 순위를 부여합니다.

SoftAP는 ACS가 활성화되어 있고 안전하지 않은 채널이 업데이트됩니다.

  1. SoftAP 채널이 안전하지 않고 SoftAP 제한이 있는 경우

    1. 프레임워크는 안전하지 않은 채널을 제거하여 ACS 목록을 업데이트합니다.
    2. 목록이 비어 있으면 프레임워크가 SoftAP를 닫습니다.
  2. SoftAP 채널이 안전하지 않고 제한이 없는 경우

    1. 프레임워크에서 조치를 취하지 않습니다. 공급업체 드라이버/펌웨어는 안전하지 않은 채널을 피하거나 피할 수 없는 경우 전원 캡 적용을 처리합니다.

와이파이 다이렉트(P2P)

  1. Wi-Fi Direct(P2P) 제한이 있는 안전하지 않은 채널이 있는 경우.

    1. 프레임워크는 HAL 메서드 ISupplicantP2pIface::setDisallowedFrequencies() 를 사용하여 안전하지 않은 채널을 피하기 위해 wpa_supplicant 를 요청합니다.
  2. 제한이 없는 안전하지 않은 채널이 있는 경우.

    1. 공급업체 드라이버/펌웨어는 Wi-Fi Direct(P2P) 제한이 없는 안전하지 않은 채널을 사용하는 경우 전원 제한을 적용합니다.

Wi-Fi 인식(NAN)

프레임워크는 NAN(Wi-Fi Aware)에 대한 채널 선택에 관여하지 않으며 프레임워크 작업이 수행되지 않습니다. 공급업체 드라이버/펌웨어는 NAN(Wi-Fi Aware) 채널 회피를 담당합니다.

알고리즘 비활성화

기본 알고리즘 구현을 비활성화하고 방지를 위해 안전하지 않은 채널 목록을 전달하려면 오버레이 config_wifiDefaultCoexAlgorithmEnabled 를 구성하십시오. 오버레이가 false로 설정되면 기본 알고리즘이 비활성화됩니다. 그런 다음 고유한 대역 외 독점 알고리즘을 사용하여 다음 시스템 API를 사용하여 프레임워크에 연결할 안전하지 않은 채널 목록을 생성할 수 있습니다.

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

구현 검증

Wi-Fi/셀룰러 coex 채널 회피 기능의 구현을 검증하려면 다음 테스트를 사용하십시오.

CTS 테스트

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

ACTS 테스트

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

VTS 테스트

  • wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)