Android 12에 적용된 Wi-Fi/이동통신망 공존 채널 회피 기능은 이동통신망 채널 간에 간섭이 있는 경우 안전하지 않은 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, Licensed Assisted Access(LAA)와 같은 이동통신망 기술이 적용된 기기에서는 사용 중인 이동통신망 채널이 사용 중인 Wi-Fi 채널에 간섭을 일으킬 수 있습니다. 이러한 현상은 이동통신망 채널과 Wi-Fi 채널 사이의 주파수 분리 길이가 짧거나(인접 채널) 고조파 상호변조 간섭이 발생한 경우 나타날 수 있습니다.
이러한 유형의 간섭은 안테나 하나는 신호를 송신하고 있고 동시에 다른 하나는 수신하고 있을 때 문제가 됩니다. 이때 신호를 송신하는 안테나가 수신하는 안테나를 플러딩하여 수신 품질에 영향을 줍니다.
이 문서에서는 간섭을 유발한 송신기를 공격자로, 간섭을 경험하는 수신기를 피해자로 칭합니다. 공격자 또는 피해자인 Wi-Fi 채널은 안전하지 않은 채널이라고 합니다.
Wi-Fi/이동통신망 공존 채널 회피 기능은 일관된 채널 회피 방식을 제공하여 Wi-Fi 프레임워크를 벗어나는 독점 코드를 사용해야 할 필요성을 줄여 줍니다. 이 기능은 또한 기기 제조업체가 기능을 구성, 사용 설정 및 사용 중지, 재정의할 수 있도록 지원합니다.
이 기능은 Wi-Fi 채널을 제어함으로써 채널 회피를 실행합니다. Wi-Fi 채널 회피 스킴은 다음과 같은 4가지 추상 단계로 설명할 수 있습니다.
- 모뎀이 이동통신망 주파수 변경을 보고
- 공존 회피 알고리즘이 안전하지 않은 Wi-Fi 채널을 계산
- 공존 회피 알고리즘이 Wi-Fi 서비스에 이 채널을 알림
- 프레임워크 또는 드라이버가 적절한 Wi-Fi 작업을 실행
그림 1. 채널 회피 스킴
이동통신망 주파수 변경 보고
전화 서비스가 현재 사용 중인 이동통신망 채널을 보고합니다. 이동통신망 동작 주파수가 변경되면 모뎀이 IRadio::PhysicalChannelConfig
를 통해 이 정보를 전화 서비스에 보고합니다.
Licensed Assisted Access(LAA)와 주파수 집성(CA)이 정보로 표시됩니다.
Android 12부터, 다음과 같은 1.6 IRadio::PhysicalChannelConfig
의 필드가 모뎀이 입력해야 하는 필수 공존 수식 정보를 제공합니다.
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 채널 계산
모뎀이 이동통신망 주파수 변경을 보고하면 공존 채널 알고리즘이 이동통신망과 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 채널)
인접 채널 간섭
인접 채널 간섭이 있는지 확인하기 위해, 공존 회피 알고리즘은 공격자 채널과 피해자 채널 간의 거리 ΔF가 지정된 임곗값 미만으로 떨어지지 않도록 합니다.
그림 2. 공격자 채널과 피해자 채널 간의 거리
임곗값은 기기의 물리적 구성과 조회 테이블 항목에 제공된 간섭 유발 대역 임곗값에 따라 결정됩니다. 간섭을 유발하지 않는 것으로 간주되는 대역은 테이블 항목을 갖지 않으며 안전하지 않은 채널을 계산할 필요가 없습니다(이는 대부분의 경우에 해당합니다).
인접 간섭 매개변수
wifiVictimMhz
: Wi-Fi 피해자(셀 업링크)의 MHz 거리 임곗값cellVictimMhz
: 셀 피해자(셀 다운링크)의 MHz 거리 임곗값
알고리즘은 각 활성 셀 채널을 대상으로 다음과 같이 동작합니다.
- 채널의 대역에 대응하는 조회 테이블 항목을 찾습니다. 테이블 항목이 없으면 이 셀 채널의 안전하지 않은 채널을 반환하지 않습니다.
- 이동통신망 대역을 기준으로 어느 Wi-Fi 대역이 위험에 노출되었고 간섭이 대역의 어느 쪽에서 발생하는지 식별합니다(예: 2.4GHz 저역 채널, 2.4GHz 고역 채널, 5GHz 저역 채널).
wifiVictimMhz
가 있고 셀 채널에 업링크가 있는 경우Wi-Fi 대역의 저역이 위험에 노출된 경우
- 셀 업링크의 가장 높은 주파수에 wifiVictimMhz를 더하여 안전하지 않은 채널의 상한을 찾습니다.
- 아래쪽 가장자리가 상한과 중첩되는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
- 이 Wi-Fi 채널, 이 채널을 포함하는 모든 대역폭 채널(예: 40MHz, 80MHz), 동일 대역을 갖는 모든 저역 채널을 안전하지 않은 채널로 표시합니다.
Wi-Fi 대역의 고역이 위험에 노출된 경우
- 셀 업링크의 가장 낮은 주파수에서 wifiVictimMhz를 빼서 안전하지 않은 채널의 하한을 찾습니다.
- 위쪽 가장자리가 하한과 중첩되는 첫 번째 Wi-Fi 채널을 찾습니다.
- 이 Wi-Fi 채널, 이 채널을 포함하는 모든 채널(예: 40MHz, 80MHz), 동일 대역을 갖는 모든 고역 채널을 안전하지 않은 채널로 표시합니다.
cellVictimMhz
가 있고 셀 채널에 다운링크가 있는 경우cellVictimMhz
를 임곗값으로 사용하여 3단계를 실행하고, 셀 업링크 대신 셀 다운링크를 기준으로 비교합니다.
계산된 안전하지 않은 채널에 테이블 항목의 전력 한도를 적용합니다.
그림 3. 인접 채널 간섭의 경우의 안전하지 않은 채널 계산
고조파/상호변조 왜곡
고조파/상호변조 왜곡의 경우 공존 엔진이 고조파/상호변조 신호의 범위를 계산하고 신호가 잠재적인 피해자 채널과 중첩되는 비율을 확인합니다. 중첩되는 비율이 중첩 임곗값을 초과하면 알고리즘은 이를 안전하지 않은 상황으로 판단합니다. 피해자 채널과 고조파/상호변조 왜곡의 중첩 비율은 다음 방정식을 사용하여 계산됩니다.
고조파 왜곡의 경우에는 알고리즘이 Wi-Fi 채널에 피해를 주는 셀 업링크 채널의 고조파 왜곡을 고려합니다. 그런 다음 셀 업링크 주파수와 고조파 차수 $ N $을 기준으로 고왜곡과 저왜곡을 고조파 값으로 대체합니다.
그림 4. 고조파 왜곡의 경우의 안전하지 않은 채널 계산
상호변조의 경우에는 알고리즘이 셀 다운링크 채널에 피해를 주는 Wi-Fi 채널과 셀 업링크의 상호변조 왜곡을 고려합니다. 그런 다음 셀 업링크 주파수, Wi-Fi 주파수, 두 개의 상호변조 계수 $ M $, $ N $을 기준으로 고왜곡과 저왜곡을 상호변조 값으로 대체합니다.
그림 5. 상호변조 왜곡의 경우의 안전하지 않은 채널 계산
조회 테이블에서 간섭을 유발하는 셀 대역별로 $ M $, $ N $ 값과 중첩 값을 지정할 수 있습니다. 대역에 간섭이 없는 경우 테이블에서 이 대역 항목의 값이 생략됩니다. Wi-Fi 2.4GHz 대역과 5GHz 대역에 각각 하나씩, 총 두 세트의 값을 독립적으로 정의할 수 있습니다.
인접 간섭 알고리즘과 마찬가지로, 알고리즘은 간섭을 유발하는 셀 대역에 정의된 동일한 전력 한도 값을 재사용합니다.
알고리즘은 각 활성 셀 채널을 대상으로 다음과 같이 동작합니다.
- 셀 채널의 대역에 대응하는 조회 테이블 항목을 찾습니다. 테이블 항목이 없으면 이 채널의 안전하지 않은 채널을 반환하지 않습니다.
매개변수가 정의된 경우 고조파에서 안전하지 않은 2.4GHz 채널을 찾습니다.
- 2.4GHz의 고조파 차수 N을 구합니다.
- N과 셀 업링크를 기준으로 고조파 고주파수와 고조파 저주파수를 계산합니다.
- 저역에서 발생한 고조파의 하한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
- 고조파와 Wi-Fi 채널의 중첩을 계산하고, 중첩이 2.4GHz Wi-Fi 중첩 임곗값을 초과하면 채널을 안전하지 않은 채널로 표시합니다.
- 고역에서 발생한 고조파의 상한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
- 고조파와 Wi-Fi 채널의 중첩을 계산하고, 중첩이 2.4GHz Wi-Fi 중첩 임곗값을 초과하면 채널을 안전하지 않은 채널로 표시합니다.
- 중간에 있는 모든 20MHz 채널을 안전하지 않은 채널로 표시합니다.
매개변수가 정의된 경우 고조파에서 안전하지 않은 5GHz 채널을 찾습니다.
- 5GHz의 고조파 차수 N을 구합니다. N이 0이면 5단계로 건너뜁니다.
- N과 셀 업링크를 기준으로 고조파 고주파수와 고조파 저주파수를 계산합니다.
안전하지 않은 20MHz 채널을 찾습니다.
- 저역에서 발생한 고조파의 하한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
- 고조파와 Wi-Fi 채널의 중첩을 계산하고, 중첩이 2.4GHz Wi-Fi 중첩 임곗값을 초과하면 채널을 안전하지 않은 채널로 표시합니다.
- 고역에서 발생한 고조파의 상한 내에 있는 첫 번째 20MHz Wi-Fi 채널을 찾습니다.
- 고조파와 Wi-Fi 채널의 중첩을 계산하고, 중첩이 2.4GHz Wi-Fi 중첩 임곗값을 초과하면 채널을 안전하지 않은 채널로 표시합니다.
- 중간에 있는 모든 20MHz 채널을 지정된 전력 한도를 갖는 안전하지 않은 채널로 표시합니다.
안전하지 않은 40MHz, 80MHz, 160MHz 채널을 찾습니다.
- 3a단계를 40MHz, 80MHz, 160MHz로 반복합니다.
- 채널과 고조파 가장자리의 중첩을 계산하는 대신, 채널을 구성하는 여러 작은 채널의 이미 계산된 중첩을 재사용합니다(예를 들어, 두 개의 20MHz 채널로 하나의 40MHz 채널이 구성되고 각 채널의 중첩이 30%와 90%라면 40MHz 채널의 평균 중첩은 60%입니다).
매개변수가 정의된 경우 상호변조에서 안전하지 않은 2.4GHz 채널을 찾습니다.
- 2.4GHz의 상호변조 계수 N, M을 구합니다.
각 2.4GHz Wi-Fi 채널을 대상으로:
- N, M, 셀 업링크, Wi-Fi 채널을 기준으로 상호변조 저주파수와 상호변조 고주파수를 계산합니다.
- 상호변조와 셀 다운링크의 중첩을 계산하고, 중첩이 2.4GHz 셀 중첩 임곗값을 초과하면 채널을 안전하지 않은 채널로 표시합니다.
매개변수가 정의된 경우 상호변조에서 안전하지 않은 5GHz 채널을 찾습니다.
- 5GHz Wi-Fi 채널과 5GHz 셀 중첩 임곗값을 사용하여 4단계를 반복합니다.
계산된 안전하지 않은 채널에 테이블 항목의 전력 한도를 적용합니다.
최종 결과
인접 간섭과 고조파 간섭의 안전하지 않은 채널의 두 집합이 계산된 후, 두 집합의 합집합을 구하고(충돌이 있는 경우 낮은 전력 하한 선택) 적용된 필수 제한사항이 없는 경우 집합에서 기본 채널을 삭제하여 최종 집합이 계산됩니다.
알고리즘은 다음과 같이 동작합니다.
- 모든 2.4GHz Wi-Fi 채널이 안전하지 않은 채널로 표시되었다면 집합에서 기본 2.4GHz Wi-Fi 채널을 삭제합니다.
- 모든 5GHz Wi-Fi 채널이 안전하지 않은 채널로 표시되었다면 집합에서 기본 5GHz Wi-Fi 채널을 삭제합니다.
- 안전하지 않은 채널의 최종 집합을 반환합니다.
조회 테이블 형식
조회 테이블은 오버레이 가능한 config 문자열 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)의 경우, 각 업링크/다운링크의 고조파/상호변조 범위는 독립적으로 간섭을 유발할 만한 충분한 중첩을 생성하지 않을 수도 있지만 업링크와 다운링크가 결합되면 충분한 중첩을 생성할 수도 있습니다. 알고리즘은 각 고조파/상호변조 범위를 독립적으로 고려하여, 반환된 안전하지 않은 채널들의 합집합을 구합니다. 상호변조 경우 이는 모든 DL의 상호변조 범위를 모든 UL의 상호변조 범위에서 평가하는 것을 의미합니다.
알고리즘은 PCELL/PSCELL/SCELL을 구분하지 않고 모두 동일하게 취급합니다.
License Assisted Access
License Assisted Access(LAA)는 대역 번호 46으로 식별됩니다. 알고리즘은 이 대역을 다른 대역과 비슷하게 취급합니다. 이 경우에는 조회 테이블에 전체 5Ghz 채널을 재정의 목록으로 설정할 수 있습니다.
이동통신사 요구사항에 따라, 채널 회피 알고리즘은 전체 5GHz Wi-Fi 대역을 대상으로 SoftAP 및 Wi-Fi Direct(P2P)에 필수 제한사항을 설정합니다. 알고리즘이 이 사용 사례를 처리할 수 있으려면 이동통신사 config 값 restrict_5g_softap_wifi_direct_for_laa
를 정의해야 합니다. 셀 채널이 LAA를 사용하고 restrict_5g_softap_wifi_direct_for_laa
가 true
이면 알고리즘은 전체 5Ghz 대역을 포함하여 안전하지 않은 채널 집합을 반환하고 SoftAP 및 Wi-Fi Direct(P2P)에 필수 제한사항 플래그를 설정합니다.
Wi-Fi 서비스에 알림
공존 채널 알고리즘이 안전하지 않은 채널을 계산한 후에 시스템 앱에 안전하지 않은 채널과 제한사항을 제공하려면 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);
SoftAP
SoftAP는 안전하지 않은 채널 회피의 주요 사용 사례입니다. 다음 섹션에서는 ACS를 사용하여 채널 회피를 적용할 수 있는 주요 SoftAp 시나리오를 설명합니다. 각 시나리오에는 채널 회피 알고리즘과 드라이버 또는 펌웨어의 동작이 설명되어 있습니다.
ACS가 사용 설정된 상태로 SoftAP 시작(아직 SoftAP가 실행되지 않음)
채널이 안전하지 않고 SoftAP 제한이 있는 경우
- 프레임워크가 ACS 목록에서 안전하지 않은 채널을 삭제합니다.
- 목록이 비어 있는 경우 프레임워크가 SoftAP를 중지합니다.
채널이 안전하지 않고 제한이 없는 경우
- 공급업체 드라이버/펌웨어가 안전하지 않은 채널보다 안전한 채널에 높은 우선순위를 부여합니다.
ACS가 사용 설정된 상태로 SoftAP가 실행 중이고 안전하지 않은 채널이 업데이트된 경우
SoftAP 채널이 안전하지 않고 SoftAP 제한이 있는 경우
- 프레임워크가 안전하지 않은 채널을 삭제하여 ACS 목록을 업데이트합니다.
- 목록이 비어 있으면 프레임워크가 SoftAP를 닫습니다.
SoftAP 채널이 안전하지 않고 제한이 없는 경우
- 프레임워크가 아무런 작업도 수행하지 않습니다. 회피가 가능하지 않은 경우 공급업체 드라이버/펌웨어가 안전하지 않은 채널 회피 또는 전력 한도 적용을 처리합니다.
Wi-Fi Direct(P2P)
Wi-Fi Direct(P2P) 제한이 있는 안전하지 않은 채널이 있는 경우
- 프레임워크가 HAL 메서드
ISupplicantP2pIface::setDisallowedFrequencies()
를 사용하여wpa_supplicant
에 안전하지 않은 채널을 회피하라고 요청합니다.
- 프레임워크가 HAL 메서드
제한이 없는 안전하지 않은 채널이 있는 경우
- Wi-Fi Direct(P2P) 제한이 없는 안전하지 않은 채널이 사용되고 있는 경우 공급업체 드라이버/펌웨어가 전력 한도를 적용합니다.
Wi-Fi Aware(NAN)
프레임워크는 Wi-Fi Aware(NAN)의 채널 선택에 개입하지 않으며 어떠한 프레임워크 작업도 실행되지 않습니다. 공급업체 드라이버/펌웨어가 Wi-Fi Aware(NAN) 채널 회피를 담당합니다.
알고리즘 사용 중지
기본 알고리즘 구현을 사용 중지하고 회피를 위해 자체 안전하지 않은 채널 목록을 전달하려면 오버레이 config_wifiDefaultCoexAlgorithmEnabled
를 구성합니다. 오버레이를 false로 설정하면 기본 알고리즘이 사용 중지됩니다. 그러면 자체 대역 외 독점 알고리즘을 사용하여 안전하지 않은 채널 목록을 생성하고 다음 시스템 API를 사용하여 프레임워크에 전달할 수 있습니다.
public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
int coexRestrictions);
구현 확인
Wi-Fi/이동통신망 공존 채널 회피 기능의 구현을 확인하려면 다음 테스트를 사용하세요.
CTS 테스트
WifiManagerTest.java
testCoexMethodsShouldFailNoPermission()
testListenOnCoexUnsafeChannels()
ACTS 테스트
WifiManagerTest.py
test_set_get_coex_unsafe_channels()
VTS 테스트
wifi_chip_hidl_test.cpp
TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)