Tránh kênh Wi-Fi / di động Coex

Tính năng tránh kênh Wi-Fi/mobile coex, được giới thiệu trong Android 12, xác định và tránh sử dụng các kênh Wi-Fi không an toàn trong trường hợp có thể có nhiễu từ/đến các kênh di động. Điều này bao gồm các giao diện như STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).

Trang này thảo luận về những điều sau đây:

  • Thông tin mà modem di động phải báo cáo cho hệ thống Android
  • Các thuật toán mà khung Wi-Fi sử dụng để tính toán các kênh Wi-Fi cần tránh
  • Bảng cấu hình mà nhà sản xuất thiết bị phải cung cấp cho Wi-Fi framework
  • API hệ thống, cấu hình và API HAL liên quan đến tính năng tránh kênh
  • Hành vi khung để xử lý việc tránh kênh
  • Hành vi của nhà cung cấp chip để xử lý việc tránh kênh
  • Chi tiết triển khai để tránh kênh
  • Kiểm tra để xác nhận hành vi tránh kênh

Lý lịch

Đối với các thiết bị có công nghệ di động như LTE, 5G NR và Quyền truy cập được cấp phép (LAA), các kênh di động đang sử dụng có thể gây nhiễu kênh Wi-Fi đang sử dụng. Điều này xảy ra khi các kênh di động và Wi-Fi nằm trong khoảng cách tần số ngắn (các kênh lân cận) hoặc khi có nhiễu điều hòa và xuyên điều chế.

Loại nhiễu này trở thành vấn đề khi một ăng-ten đang phát và một ăng-ten khác đang thu cùng lúc. Trong trường hợp này, ăng-ten phát làm ngập ăng-ten thu, ảnh hưởng đến chất lượng thu của nó.

Tài liệu này đề cập đến máy phát gây nhiễu là kẻ xâm lược và người nhận gặp phải sự can thiệp là nạn nhân . Kênh Wi-Fi là kẻ tấn công hoặc nạn nhân được coi là kênh không an toàn .

Tính năng tránh kênh coex di động/Wi-Fi cung cấp một cách tiếp cận nhất quán để tránh kênh, giảm nhu cầu về mã độc quyền tách khỏi khung Wi-Fi. Ngoài ra, tính năng này cho phép nhà sản xuất thiết bị định cấu hình, bật, tắt cũng như ghi đè tính năng này.

Tính năng này thực hiện việc tránh kênh bằng cách kiểm soát các kênh Wi-Fi. Sơ đồ tránh kênh Wi-Fi có thể được mô tả dưới dạng một chuỗi gồm bốn bước trừu tượng:

  1. Modem báo cáo sự thay đổi tần số di động
  2. Thuật toán tránh Coex tính toán các kênh Wi-Fi không an toàn
  3. Thuật toán tránh Coex thông báo cho dịch vụ Wi-Fi
  4. Khung hoặc trình điều khiển thực hiện hành động Wi-Fi thích hợp

Sơ đồ tránh kênh

Hình 1. Sơ đồ tránh kênh

Báo cáo sự thay đổi về tần số di động

Dịch vụ điện thoại báo cáo các kênh di động hiện đang được sử dụng. Khi tần số di động đang hoạt động thay đổi, modem sẽ báo cáo thông tin này cho dịch vụ điện thoại thông qua IRadio::PhysicalChannelConfig . Thông tin này bao gồm các chỉ dẫn về quyền truy cập được hỗ trợ được cấp phép (LAA) và tập hợp nhà cung cấp dịch vụ (CA).

Từ Android 12, các trường sau trong 1.6 IRadio::PhysicalChannelConfig cung cấp thông tin bắt buộc cho các công thức coex mà modem phải điền.

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

Tính toán các kênh Wi-Fi không an toàn

Khi modem báo cáo sự thay đổi về tần số di động, thuật toán kênh coex sẽ tính toán nhiễu giữa các kênh di động và Wi-Fi, đồng thời xác định nhóm kênh Wi-Fi nào không an toàn.

Có nhiều loại nhiễu đòi hỏi các công thức khác nhau: lân cậnđiều hòa/điều chế xuyên suốt . Do sự khác biệt về mặt vật lý trong ăng-ten và cách bố trí giữa các thiết bị, nên các dạng nhiễu lân cận và nhiễu điều chế/điều chế cho mỗi thiết bị cũng khác nhau. Để giải thích điều này, các nhà sản xuất thiết bị phải cung cấp bảng tra cứu để đưa các tham số vào công thức chung cho hai loại nhiễu. Các tham số này được xác định trên mỗi dải ô và được tham chiếu bởi các dải của các kênh ô đang hoạt động.

Giới hạn công suất tối đa có thể được xác định trong bảng tra cứu. Nếu giới hạn công suất tối đa được xác định, kênh không an toàn sẽ truyền với giới hạn công suất được cung cấp. Nếu không có giới hạn nguồn, kênh sẽ truyền hết công suất.

Nhìn chung, tính năng tránh kênh sử dụng phương pháp nỗ lực tối đa để tránh các kênh Wi-Fi không an toàn nhằm tối ưu hóa hiệu suất. Nhưng trong một số trường hợp nhất định (ví dụ: do yêu cầu của nhà cung cấp dịch vụ), đối với một số giao diện nhất định, bắt buộc phải tránh các kênh không an toàn cho một số băng tần di động nhất định. Trong những trường hợp như vậy, các hạn chế bắt buộc được biểu thị dưới dạng mặt nạ bit chứa các giá trị về việc có nên cấm một số kênh nhất định như Wi-Fi Direct (P2P), SoftAp và Wi-Fi Aware (NAN) hay không. Mặc dù kênh không an toàn hoạt động như một khuyến nghị không nên sử dụng kênh đó cho tất cả các trường hợp sử dụng, nhưng các hạn chế bắt buộc đánh dấu các trường hợp sử dụng cụ thể để tránh bắt buộc.

Nếu mọi kênh của băng tần 2,4 GHz hoặc 5 GHz được đánh dấu là không an toàn thì bảng tra cứu có thể xác định kênh 2,4 GHz mặc định hoặc kênh 5 GHz mặc định trên mỗi dải ô gây nhiễu là lựa chọn an toàn nhất. Các kênh mặc định này không được báo cáo là kênh không an toàn khi phần còn lại của băng tần được báo cáo là không an toàn.

ghi đè danh sách

Cách tiếp cận mang tính công thức bị hạn chế trong trường hợp nhiễu phụ thuộc nhiều vào băng thông (và do đó các kênh có băng thông lớn hơn có thể không an toàn nhưng các kênh có băng thông nhỏ hơn thì không). Trong các trường hợp, chẳng hạn như với LAA, sẽ có ích nếu bỏ qua việc tính toán và sử dụng danh sách các kênh không an toàn được chỉ định.

Để thực hiện việc này, bạn có thể chỉ định danh sách ghi đè các kênh không an toàn trong bảng tra cứu cho một số mục nhập nhất định. Danh sách ghi đè trong một mục trong bảng biểu thị rằng phép tính cho kênh ô cụ thể đó bị bỏ qua và các kênh Wi-Fi không an toàn cho kênh ô phù hợp được chỉ định bởi danh sách ghi đè.

Đối với các trường hợp nhạy cảm với băng thông, bạn có thể tránh chọn lọc các băng thông nhất định bằng cách chỉ định các kênh nhất định có băng thông nhất định trong danh sách ghi đè. Điều này là do mỗi số kênh Wi-Fi tương ứng với một băng thông được chỉ định.

Danh sách ghi đè được thể hiện bằng danh sách số kênh hoặc từ khóa danh mục được xác định trước cho từng băng tần Wi-Fi:

2g loại:

  • all (toàn bộ băng tần 2,4 GHz)

Các loại 5g:

  • all (toàn bộ băng tần 5 GHz)
  • 20mhz (kênh 5 GHz 20 MHz)
  • 40mhz (kênh 5 GHz 40 MHz)
  • 80mhz (kênh 5 GHz 80 MHz)
  • 160mhz (kênh 5 GHz 160 MHz)

Nhiễu kênh lân cận

Để xác định nhiễu kênh lân cận, thuật toán tránh coex đảm bảo khoảng cách ΔF giữa kênh xâm lược và kênh nạn nhân không vượt quá ngưỡng được chỉ định.

Nhiễu kênh

Hình 2. Khoảng cách giữa kênh kẻ xâm lược và kênh nạn nhân

Ngưỡng được xác định bởi cấu hình vật lý của thiết bị và giá trị ngưỡng được cung cấp trong mục nhập bảng tra cứu trên mỗi băng tần gây nhiễu. Các băng tần được coi là không gây nhiễu sẽ không có mục nhập trong bảng và các kênh không an toàn không cần phải tính toán (đây là phần lớn thời gian).

Các tham số nhiễu lân cận

  • wifiVictimMhz : Ngưỡng khoảng cách MHz cho nạn nhân Wi-Fi (đường lên di động)
  • cellVictimMhz : Ngưỡng khoảng cách MHz cho nạn nhân của ô (đường xuống ô)

Thuật toán hoạt động như sau đối với từng kênh ô đang hoạt động:

  1. Đối với băng tần của kênh, hãy cố gắng tìm mục nhập trong bảng tra cứu. Nếu không tìm thấy mục nhập bảng nào, trả về không có kênh nào không an toàn cho kênh ô đó.
  2. Dựa trên băng tần di động, xác định băng tần Wi-Fi nào đang gặp nguy hiểm và nhiễu đến từ phía nào của băng tần (ví dụ: các kênh 2,4 GHz thấp hơn, các kênh 2,4 GHz cao hơn, các kênh 5 GHz thấp hơn).
  3. Nếu có wifiVictimMhz và kênh di động có đường lên và

    1. Nếu phần dưới của băng tần Wi-Fi gặp nguy hiểm

      1. Tìm giới hạn trên của các kênh không an toàn bằng cách thêm wifiVictimMhz vào tần số cao nhất của đường lên ô.
      2. Tìm kênh Wi-Fi 20 Mhz đầu tiên có cạnh dưới vượt quá giới hạn.
      3. Đánh dấu kênh Wi-Fi, mọi kênh có băng thông lớn hơn chứa kênh đó (ví dụ: 40 Mhz, 80 Mhz) và mọi kênh thấp hơn có cùng băng tần với kênh không an toàn.
    2. Nếu phần trên của băng tần Wi-Fi gặp nguy hiểm

      1. Tìm giới hạn dưới của các kênh không an toàn bằng cách trừ wifiVictimMhz cho tần số thấp nhất của đường lên ô.
      2. Tìm kênh Wi-Fi đầu tiên có cạnh trên vượt quá giới hạn.
      3. Đánh dấu kênh Wi-Fi, mọi kênh lớn hơn chứa kênh đó (ví dụ: 40M hz, 80 Mhz) và mọi kênh cao hơn có cùng băng tần với kênh không an toàn.
  4. Nếu có cellVictimMhz và kênh di động có đường xuống.

    1. Thực hiện bước 3 bằng cách sử dụng cellVictimMhz làm ngưỡng và so sánh với đường xuống của ô thay vì đường lên của ô.
  5. Áp dụng giới hạn nguồn của mục trong bảng cho các kênh không an toàn đã được tính toán.

Tính toán kênh không an toàn

Hình 3. Tính toán kênh không an toàn cho nhiễu kênh lân cận

Biến dạng sóng hài/điều chế

Đối với hiện tượng méo hài/xuyên điều chế, công cụ coex tính toán phạm vi của tín hiệu hài/xuyên điều chế và đánh giá phần trăm trùng lặp mà nó có với kênh nạn nhân tiềm năng. Nếu sự chồng chéo vượt quá ngưỡng chồng chéo, thuật toán sẽ coi đây là tình huống không an toàn. Việc tính toán phần trăm chồng lấp của méo hài/điều chế xuyên trên kênh nạn nhân được thực hiện theo phương trình sau:

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

Trong trường hợp méo hài, thuật toán xem xét méo hài của kênh đường lên di động làm nạn nhân cho các kênh Wi-Fi. Sau đó, nó thay thế độ méo cao và độ méo thấp bằng các giá trị hài dựa trên tần số đường lên của ô và mức độ hài $ N $.

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

Tính toán kênh không an toàn méo sóng hài

Hình 4. Tính toán kênh không an toàn cho biến dạng sóng hài

Trong trường hợp xuyên điều chế, thuật toán xem xét độ méo xuyên điều chế của đường lên ô và kênh Wi-Fi làm nạn nhân của kênh đường xuống ô. Sau đó, nó thay thế độ méo cao và độ méo thấp bằng các giá trị xuyên điều chế dựa trên tần số đường lên của ô, tần số Wi-Fi và hai hệ số xuyên điều chế $ M $, $ N $.

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

Biến dạng xuyên điều chế tính toán kênh không an toàn

Hình 5. Tính toán kênh không an toàn cho hiện tượng méo xuyên điều chế

Bạn có thể chỉ định $ M $, $ N $ và các giá trị chồng lấp trong bảng tra cứu trên mỗi dải ô gây nhiễu. Nếu không có nhiễu đối với một băng tần thì các giá trị sẽ bị bỏ qua khỏi bảng cho mục nhập băng tần đó. Hai bộ giá trị này cho băng tần Wi-Fi 2,4 GHz và 5 GHz có thể được xác định độc lập.

Tương tự như thuật toán can thiệp lân cận, thuật toán sử dụng lại cùng một giá trị giới hạn công suất được xác định trên mỗi dải ô gây nhiễu.

Thuật toán hoạt động như sau đối với từng kênh ô đang hoạt động:

  1. Đối với băng tần của kênh di động, nó cố gắng tìm mục nhập trong bảng tra cứu. Nếu không tìm thấy mục nhập bảng nào, trả về không có kênh nào không an toàn cho kênh này.
  2. Tìm các kênh 2,4 GHz không an toàn từ sóng hài nếu các tham số được xác định.

    1. Tìm mức độ hài hòa N cho 2,4 GHz.
    2. Tính toán tần số hài hòa cao và tần số hài hòa thấp dựa trên N và đường lên của ô.
    3. Tìm kênh Wi-Fi 20 MHz đầu tiên nằm trong giới hạn dưới của sóng hài phát ra từ bên dưới.
    4. Tính toán sự chồng chéo của sóng hài trên kênh Wi-Fi và đánh dấu kênh là không an toàn nếu sự chồng chéo vượt quá ngưỡng chồng chéo Wi-Fi 2,4 GHz.
    5. Tìm kênh Wi-Fi 20 MHz đầu tiên nằm trong giới hạn trên của sóng hài phát ra từ phía trên.
    6. Tính toán sự chồng chéo của sóng hài trên kênh Wi-Fi và đánh dấu kênh là không an toàn nếu sự chồng chéo vượt quá ngưỡng chồng chéo Wi-Fi 2,4 GHz.
    7. Đánh dấu mọi kênh 20 MHz ở giữa là kênh không an toàn.
  3. Tìm các kênh 5 GHz không an toàn từ sóng hài nếu các tham số được xác định.

    1. Tìm mức độ hài hòa N cho 5 GHz. Nếu N bằng 0 thì chuyển sang bước 5.
    2. Tính toán tần số hài hòa cao và tần số hài hòa thấp dựa trên N và đường lên của ô.
    3. Tìm các kênh 20 Mhz không an toàn.

      1. Tìm kênh Wi-Fi 20 MHz đầu tiên nằm trong giới hạn dưới của sóng hài phát ra từ bên dưới.
      2. Tính toán sự chồng chéo của sóng hài trên kênh Wi-Fi và đánh dấu kênh là không an toàn nếu sự chồng chéo vượt quá ngưỡng chồng chéo Wi-Fi 2,4 GHz.
      3. Tìm kênh Wi-Fi 20 MHz đầu tiên nằm trong giới hạn trên của sóng hài phát ra từ phía trên.
      4. Tính toán sự chồng chéo của sóng hài trên kênh Wi-Fi và đánh dấu kênh là không an toàn nếu sự chồng chéo vượt quá ngưỡng chồng chéo Wi-Fi 2,4 GHz.
      5. Đánh dấu mọi kênh 20 MHz ở giữa là kênh không an toàn với giới hạn nguồn được chỉ định.
    4. Tìm các kênh 40 MHz, 80 MHz, 160 MHz không an toàn

      1. Lặp lại bước 3a nhưng với 40 MHz, 80 MHz, 160 MHz.
      2. Thay vì tính toán độ chồng lấp của các kênh trên cạnh hài, hãy sử dụng lại độ chồng chéo được tính toán từ các kênh thành phần nhỏ hơn (ví dụ: nếu hai kênh 20 Mhz tạo thành kênh 40 Mhz và có độ chồng chéo 30% và 90% thì mức trung bình là 60 % trùng lặp cho kênh 40 Mhz).
  4. Tìm các kênh 2,4 GHz không an toàn từ quá trình xuyên điều chế nếu các tham số được xác định.

    1. Tìm hệ số xuyên điều chế N, M cho 2,4 GHz.
    2. Đối với mỗi kênh Wi-Fi 2,4 GHz:

      1. Tính toán tần số xuyên điều chế thấp và tần số cao xuyên điều chế dựa trên N, M, đường lên của ô và kênh Wi-Fi.
      2. Tính toán sự chồng chéo của điều chế xuyên qua đường xuống của ô và đánh dấu kênh là không an toàn nếu sự chồng chéo vượt quá ngưỡng chồng chéo ô 2,4 GHz.
  5. Tìm các kênh 5 GHz không an toàn từ quá trình xuyên điều chế nếu các tham số được xác định.

    1. Lặp lại bước 4 bằng cách sử dụng kênh Wi-Fi 5 GHz và ngưỡng chồng chéo ô 5 GHz.
  6. Áp dụng giới hạn nguồn của mục trong bảng cho các kênh không an toàn đã được tính toán.

Kết quả cuối cùng

Sau khi tính toán cả hai bộ kênh không an toàn do nhiễu lân cận và nhiễu sóng hài, bộ cuối cùng được tính bằng cách lấy sự kết hợp của cả hai bộ (và chọn giới hạn công suất thấp hơn nếu có xung đột) và loại bỏ các kênh mặc định khỏi bộ nếu có không áp dụng hạn chế bắt buộc.

Thuật toán hoạt động như sau:

  1. Nếu mọi kênh Wi-Fi 2,4 GHz được đánh dấu là kênh không an toàn, hãy xóa kênh Wi-Fi 2,4 GHz mặc định khỏi bộ.
  2. Nếu mọi kênh Wi-Fi 5 GHz đều bị đánh dấu là kênh không an toàn, hãy xóa kênh Wi-Fi 5 GHz mặc định khỏi bộ.
  3. Trả về tập hợp cuối cùng của các kênh không an toàn.

Dạng bảng tra cứu

Các bảng tra cứu được thể hiện trong một tệp XML nằm trong chuỗi cấu hình có thể xếp chồng config_wifiCoexTableFilepath và được xác định bởi XSD sau.


<?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>

Bảng XML mẫu

Sau đây là một bảng tra cứu XML mẫu:


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

Tập hợp nhà cung cấp dịch vụ

Đối với tập hợp sóng mang (CA), phạm vi điều chế/điều chế cho mỗi đường lên/đường xuống có thể không tạo ra đủ sự chồng lấp để gây nhiễu một cách độc lập, nhưng có thể tạo ra sự chồng chéo đủ khi kết hợp. Thuật toán xem xét từng phạm vi điều chế/điều chế một cách độc lập và lấy sự kết hợp của các kênh không an toàn được trả về. Đối với trường hợp xuyên điều chế, điều này có nghĩa là đánh giá phạm vi xuyên điều chế của mỗi UL trên mỗi DL.

Thuật toán không phân biệt giữa PCELL/PSCELL/SCELL và coi chúng như nhau.

Quyền truy cập được hỗ trợ giấy phép

Quyền truy cập được hỗ trợ giấy phép (LAA) được xác định là băng tần #46. Thuật toán xử lý băng tần này tương tự như các băng tần khác. Trong trường hợp này, toàn bộ kênh 5 GHz có thể được đặt làm danh sách ghi đè trong bảng tra cứu.

Tùy thuộc vào yêu cầu của nhà mạng, thuật toán tránh kênh đặt ra các hạn chế bắt buộc đối với SoftAP và Wi-Fi Direct (P2P) cho toàn bộ băng tần Wi-Fi 5 GHz. Để thuật toán xử lý trường hợp sử dụng này, bạn phải xác định giá trị cấu hình sóng mang restrict_5g_softap_wifi_direct_for_laa . Nếu kênh di động nằm trên LAA và restrict_5g_softap_wifi_direct_for_laatrue , thuật toán sẽ trả về tập hợp các kênh không an toàn với toàn bộ băng tần 5 GHz và đặt cờ hạn chế bắt buộc cho SoftAP và Wi-Fi Direct (P2P).

Thông báo dịch vụ Wi-Fi

Sau khi thuật toán kênh coex đã tính toán các kênh không an toàn, để cung cấp cho ứng dụng hệ thống của bạn các kênh không an toàn và các hạn chế của chúng, hãy sử dụng cấu trúc dữ liệu @SystemApi sau được xác định trong khung 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();
}

Sử dụng các phương thức WifiManager @SystemApi và gọi lại sau để cho phép ứng dụng nhận các giá trị cập nhật khi các kênh không an toàn thay đổi.

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

Thực hiện hành động Wi-Fi

Khi dịch vụ Wi-Fi nhận được thông tin về tập hợp các kênh không an toàn, nó sẽ thực hiện hành động thích hợp để đảm bảo tránh được các kênh đó. Phần này mô tả hoạt động của dịch vụ Wi-Fi trong các tình huống khác nhau.

Thông báo cho người lái xe

Vì trình điều khiển có vai trò chính trong việc thực hiện việc tránh kênh nên việc truyền các kênh không an toàn đến trình điều khiển và chương trình cơ sở là điều cần thiết. Để thực hiện việc này, hãy sử dụng API IWifiChip HAL sau.

Đối với AIDL:

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

Đối với HIDL (1.5 trở lên):

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

SoftAP

SoftAP là trường hợp sử dụng chính để tránh kênh không an toàn. Phần sau đây phác thảo các kịch bản SoftAp chính trong đó việc tránh kênh có thể được áp dụng với ACS. Các tình huống mô tả hành vi của thuật toán tránh kênh và trình điều khiển hoặc chương trình cơ sở.

Khởi động SoftAP với ACS được bật (chưa có SoftAP nào hoạt động)

  1. Nếu các kênh không an toàn và có hạn chế SoftAP

    1. Khung này loại bỏ các kênh không an toàn khỏi danh sách ACS.
    2. Nếu danh sách trống, khung sẽ dừng SoftAP.
  2. Nếu các kênh không an toàn và không có hạn chế

    1. Trình điều khiển/chương trình cơ sở của nhà cung cấp ưu tiên các kênh an toàn hơn các kênh không an toàn.

SoftAP đã cập nhật tính năng hỗ trợ ACS và các kênh không an toàn đã được cập nhật

  1. Nếu kênh SoftAP không an toàn và có hạn chế SoftAP

    1. Khung cập nhật danh sách ACS bằng cách loại bỏ các kênh không an toàn.
    2. Nếu danh sách trống, khung sẽ đóng SoftAP.
  2. Nếu kênh SoftAP không an toàn và không có hạn chế

    1. Không có hành động nào được thực hiện bởi khuôn khổ. Trình điều khiển/chương trình cơ sở của nhà cung cấp xử lý việc tránh các kênh không an toàn hoặc áp dụng nắp nguồn nếu việc tránh không khả thi.

Wi-Fi trực tiếp (P2P)

  1. Nếu có các kênh không an toàn có hạn chế về Wi-Fi Direct (P2P).

    1. Khung yêu cầu wpa_supplicant tránh các kênh không an toàn bằng phương thức HAL ISupplicantP2pIface::setDisallowedFrequencies() .
  2. Nếu có các kênh không an toàn mà không có hạn chế.

    1. Trình điều khiển/chương trình cơ sở của nhà cung cấp áp dụng nắp nguồn nếu sử dụng kênh không an toàn không có hạn chế Wi-Fi Direct (P2P).

Nhận biết Wi-Fi (NAN)

Khung này không liên quan đến việc chọn kênh cho Wi-Fi Aware (NAN) và không có hành động khung nào được thực hiện. Trình điều khiển/chương trình cơ sở của nhà cung cấp chịu trách nhiệm tránh kênh Wi-Fi Aware (NAN).

Vô hiệu hóa thuật toán

Nếu bạn muốn tắt việc triển khai thuật toán mặc định và chuyển danh sách các kênh không an toàn của riêng mình để tránh, hãy định cấu hình lớp phủ config_wifiDefaultCoexAlgorithmEnabled . Nếu lớp phủ được đặt thành sai thì thuật toán mặc định sẽ bị tắt. Sau đó, bạn có thể sử dụng thuật toán độc quyền ngoài băng tần của riêng mình để tạo danh sách các kênh không an toàn để dẫn thẳng vào khung bằng API hệ thống sau.

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

Xác thực việc thực hiện

Để xác thực việc triển khai tính năng tránh kênh coex di động/Wi-Fi của bạn, hãy sử dụng các thử nghiệm sau.

xét nghiệm CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

bài kiểm tra ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

kiểm tra VTS

  • Nếu AIDL được triển khai: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • Nếu HIDL được triển khai: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)