Tránh dùng kênh coex/Wi-Fi

Tính năng tránh kênh coex/Wi-Fi (được giới thiệu trong Android 12) giúp 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ể bị nhiễu từ các kênh di động hoặc bị nhiễu. 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 nội dung sau:

  • Thông tin mà modem di động phải báo cáo cho khung 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
  • Các bảng cấu hình mà nhà sản xuất thiết bị phải cung cấp cho khung Wi-Fi
  • 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 của khung để xử lý việc tránh kênh
  • Hành vi của nhà cung cấp khối để xử lý việc tránh kênh
  • Thông tin chi tiết về cách triển khai để tránh kênh bị giới hạn
  • Các thử nghiệm để xác thực hành vi tránh né kênh

Thông tin khái quát

Đối với các thiết bị có công nghệ di động như LTE, 5G NR và Truy cập có hỗ trợ được cấp phép (LAA), các kênh di động đang sử dụng có thể gây nhiễu cho kênh Wi-Fi đang sử dụng. Điều này xảy ra khi 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 hài và nhiễu giao điều biến.

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

Trong tài liệu này, thiết bị phát gây nhiễu là đối tượng gây nhiễu và thiết bị nhận bị 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 gọi là kênh không an toàn.

Tính năng tránh kênh đồng thời Wi-Fi/di động cung cấp một phương pháp nhất quán để tránh kênh, giảm nhu cầu sử dụng mã độc quyền khác vớ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 và 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. Lược đồ tránh kênh Wi-Fi có thể được mô tả là một loạt 4 bước trừu tượng:

  1. Modem báo cáo sự thay đổi về 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 đồng thời 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

Lược đồ tránh kênh

Hình 1. Lược đồ tránh kênh

Báo cáo sự thay đổi về tần suất của mạng di động

Dịch vụ điện thoại báo cáo các kênh di động đang được sử dụng. Khi tần số di động 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ỉ báo cho quyền truy cập có hỗ trợ được cấp phép (LAA) và tính năng tổng hợp nhà mạng (CA).

Kể 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 đồng tồn tại 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 mức độ can thiệp 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: nhiễu lân cận và nhiễu hình sin/tương tác. Do sự khác biệt về hình dạng ăng ten và bố cục giữa các thiết bị, nên các mẫu nhiễu hài/tương tác và nhiễu lân cận của mỗi thiết bị là khác nhau. Để tính đến điều này, nhà sản xuất thiết bị phải cung cấp một bảng tra cứu để cắm các tham số vào công thức chung cho hai loại nhiễu. Các thông số này được xác định theo băng tần của ô và được tham chiếu theo các băng tần của kênh ô đang hoạt động.

Bạn có thể xác định giới hạn công suất tối đa trong bảng tra cứu. Nếu bạn xác định giới hạn công suất tối đa, thì 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 công suất, kênh sẽ truyền ở công suất tối đa.

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 hoá hiệu suất. Tuy nhiên, trong một số trường hợp nhất định (ví dụ: do yêu cầu của nhà mạng), một số giao diện 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. Trong những trường hợp như vậy, các quy định 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ị cho việc có 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 là kênh mà bạn không nên sử dụng cho mọi trường hợp sử dụng, nhưng các quy định hạn chế bắt buộc sẽ đánh dấu các trường hợp sử dụng cụ thể mà bạn bắt buộc phải tránh.

Nếu mọi kênh trong 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 một kênh 2,4 GHz mặc định hoặc một kênh 5 GHz mặc định cho mỗi dải ô nhiễu là lựa chọn an toàn nhất. Những 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.

Danh sách ghi đè

Phương pháp theo 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ì an toàn). Trong một số trường hợp, chẳng hạn như với LAA, bạn nên bỏ qua các phép tính và sử dụng danh sách kênh không an toàn được chỉ định.

Để làm việc này, bạn có thể chỉ định một 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ất định. Danh sách ghi đè trong mục nhập bảng cho biết rằng tính toán cho kênh ô cụ thể đó sẽ bị bỏ qua và các kênh Wi-Fi không an toàn cho kênh ô trùng khớp sẽ được chỉ định theo danh sách ghi đè.

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

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

Danh mục 2g:

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

Danh mục 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 80 MHz 5 GHz)
  • 160mhz (kênh 5 GHz 160 MHz)

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

Để xác định khả năng can 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 thực và kênh bị hại không nằm dưới ngưỡng đã chỉ định.

Sự can thiệp vào kênh

Hình 2. Khoảng cách giữa kênh của bên gây sự và kênh của nạn nhân

Ngưỡng này được xác định theo 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 cho 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 bảng và không cần tính toán các kênh không an toàn (đây là trường hợp hầu hết thời gian).

Tham số nhiễu lân cận

  • wifiVictimMhz: Ngưỡng khoảng cách MHz cho nạn nhân Wi-Fi (lên mạng di động)
  • cellVictimMhz: Ngưỡng khoảng cách MHz cho nạn nhân bị tấn công qua sóng di động (đường truyền xuống của sóng di động)

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

  1. Đối với băng tần của kênh, hãy tìm mục nhập bảng tra cứu. Nếu không tìm thấy mục trong bảng, hệ thống sẽ trả về giá trị không có kênh 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 có nguy cơ bị nhiễu 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 tế bào có đường truyền lên và

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

      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 suất cao nhất của đường truyền lên của tế bào.
      2. Tìm kênh Wi-Fi 20 MHz đầu tiên có cạnh dưới trùng lặp với giới hạn.
      3. Đánh dấu kênh Wi-Fi, mọi kênh 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ù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 có nguy cơ

      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 xuống tần suất thấp nhất của đường liên kết lên của ô.
      2. Tìm kênh Wi-Fi đầu tiên có cạnh trên trùng lặp với 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ụ: 40 MHz, 80 MHz) và mọi kênh cao hơn cùng băng tần với kênh không an toàn.
  4. Nếu có cellVictimMhz và kênh tế bào có đường truyền 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 truyền xuống của tế bào thay vì đường truyền lên của tế bào.
  5. Áp dụng giới hạn công suất của mục trong bảng cho các kênh không an toàn đã 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 do nhiễu của kênh lân cận

méo hài hoà hoặc nội điều chế

Để hiện tượng méo hài hoà hoặc nội điều chế, công cụ coex tính toán phạm vi của tín hiệu sóng hài hoặc tín hiệu nội điều chế và đánh giá tỷ lệ phần trăm chồng chéo với kênh nạn nhân tiềm ẩn. Nếu mức độ trùng lặp vượt quá ngưỡng trùng lặp, thì thuật toán sẽ coi đây là một tình huống không an toàn. Việc tính toán tỷ lệ phần trăm trùng lặp của sự méo hài hoặc méo do giao điều chế trên kênh nạn nhân được thực hiện bằng 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 sự méo hài của kênh truyền tải lên của tế bào gây hại cho các kênh Wi-Fi. Sau đó, hàm này sẽ 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 truyền lên của ô và độ hài $ N $.

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

Độ biến dạng sóng hài không an toàn trong tính toán kênh

Hình 4. Tính toán kênh không an toàn cho độ méo sóng hài

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

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

Độ méo do giao thoa trong quá trình 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 do giao thoa

Bạn có thể chỉ định $ M $, $ N $ và các giá trị trùng lặp trong bảng tra cứu cho mỗi băng tần của ô gây nhiễu. Nếu một băng tần không có nhiễu, thì các giá trị sẽ bị xoá khỏi bảng cho mục nhập băng tần đó. Bạn có thể xác định độc lập hai nhóm giá trị này cho băng tần Wi-Fi 2,4 GHz và 5 GHz.

Tương tự như thuật toán nhiễu lân cận, thuật toán này sử dụng lại cùng một giá trị giới hạn công suất được xác định cho mỗi băng tần gây nhiễu.

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

  1. Đối với dải tần của kênh ô, hàm này sẽ cố gắng tìm một mục nhập bảng tra cứu. Nếu không tìm thấy mục nhập trong bảng, hãy trả về không có kênh 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 đã xác định được tham số.

    1. Tìm bậc hài hoà N cho 2,4 GHz.
    2. Tính toán tần số cao điều hoà và tần số thấp điều hoà dựa trên N và đường truyền 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 từ bên dưới.
    4. Tính độ trùng lặp 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 độ trùng lặp vượt quá ngưỡng trùng lặp 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 độ 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 mức trùng lặp 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 đã xác định được tham số.

    1. Tìm bậc hài hoà N cho 5 GHz. Nếu N là 0, hãy chuyển sang bước 5.
    2. Tính toán tần số cao điều hoà và tần số thấp điều hoà dựa trên N và đường truyền 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 từ bên dưới.
      2. Tính toán mức độ trùng lặp 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 mức độ trùng lặp vượt quá ngưỡng trùng lặp 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 mức độ trùng lặp 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 mức độ trùng lặp vượt quá ngưỡng trùng lặp 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 đã 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 độ trùng lặp của các kênh trên cạnh hài hoà, hãy sử dụng lại các phần trùng lặp đã tính toán từ các kênh thành phần nhỏ hơn (ví dụ: nếu 2 kênh 20 Mhz tạo thành một kênh 40 Mhz và có tỷ lệ chồng chéo là 30% và 90%, thì giá trị trung bình trùng lặp là 60% cho kênh 40 Mhz).
  4. Tìm các kênh 2,4 GHz không an toàn do hiện tượng giao thoa nếu các tham số được xác định.

    1. Tìm hệ số giao điều biến 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ố thấp và tần số cao của hiện tượng giao thoa dựa trên N, M, đường truyền lên của tế bào và kênh Wi-Fi.
      2. Tính toán sự chồng chéo của nội dung điều chế so với đường liên kết xuống của ô và đánh dấu kênh là không an toàn nếu mức độ 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 nội đ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 công suất của mục trong bảng cho các kênh không an toàn đã tính toán.

Kết quả cuối cùng

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

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

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

Định dạng bảng tra cứu

Các bảng tra cứu được biểu thị trong tệp XML nằm trong chuỗi cấu hình có thể phủ config_wifiCoexTableFilepath, và được xác định bằng XSD sau đây.


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

Ví dụ về bảng XML

Sau đây là ví dụ về bảng tra cứu 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>

Tổng hợp sóng mang

Đối với tính năng gộp sóng mang (CA), các dải hài hoặc giao điều biến cho mỗi đường truyền lên hoặc đường truyền xuống có thể không tạo ra đủ mức độ trùng lặp để gây nhiễu độc lập, nhưng có thể tạo ra đủ mức độ trùng lặp khi kết hợp. Thuật toán xem xét từng dải hài hoặc dải giao điều biến một cách độc lập và lấy tập hợp hợp nhất của các kênh không an toàn được trả về. Đối với trường hợp nội điều chế, có nghĩa là đánh giá phạm vi nội đ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 hoặc SCELL và coi các giá trị này là bằng nhau.

Truy cập nhờ giấy phép

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

Tuỳ thuộc vào yêu cầu của nhà mạng, thuật toán tránh kênh sẽ đặ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 của nhà mạng restrict_5g_softap_wifi_direct_for_laa. Nếu kênh di động trên LAA và restrict_5g_softap_wifi_direct_for_laatrue, thì 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, đồng thời đặt các 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 đồng tồn tại tính toán các kênh không an toàn, để cung cấp cho ứng dụng hệ thống các kênh không an toàn và các hạn chế của các kênh đó, hãy sử dụng cấu trúc dữ liệu @SystemApi sau đây đượ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 và lệnh gọi lại WifiManager @SystemApi sau đây để cho phép các ứng dụng nhận 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 thao tác với Wi-Fi

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

Thông báo cho trình điều khiển

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 bạn cần phải 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ở. Để thực hiện việc này, hãy sử dụng API HAL IWifiChip sau đây.

Đố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 trình bày các trường hợp SoftAp chính mà bạn có thể áp dụng tính năng tránh kênh bằng ACS. Các tình huống này 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ở.

Bắt đầu SoftAP khi bật ACS (chưa có SoftAP nào đang hoạt động)

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

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

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

SoftAP đang hoạt động với ACS được bật 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ó quy định hạn chế về SoftAP

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

    1. Khung sẽ không thực hiện hành động nào. Trình điều khiển hoặc chương trình cơ sở của nhà cung cấp sẽ xử lý việc tránh các kênh không an toàn hoặc áp dụng giới hạn nguồn nếu không thể tránh.

Wi-Fi Direct (P2P)

  1. Nếu có các kênh không an toàn bị 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 cách sử dụng phương thức HAL ISupplicantP2pIface::setDisallowedFrequencies().
  2. Nếu có các kênh không an toàn nhưng không bị hạn chế.

    1. Trình điều khiển hoặc phần mềm của nhà cung cấp sẽ áp dụng giới hạn nguồn nếu bạn sử dụng một kênh không an toàn không có giới hạn Wi-Fi Direct (P2P).

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

Khung này không tham gia vào việc lựa chọn kênh cho Wi-Fi Aware (NAN) và không có hành động nào trong khung được thực hiện. Trình điều khiển hoặc phần mềm của nhà cung cấp chịu trách nhiệm tránh kênh Wi-Fi Aware (NAN).

Tắt 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à truyền danh sách kênh không an toàn của riêng bạn để tránh, hãy định cấu hình lớp phủ config_wifiDefaultCoexAlgorithmEnabled. Nếu lớp phủ được đặt thành false, thì thuật toán mặc định sẽ bị tắt. Sau đó, bạn có thể 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 cần chuyển vào khung bằng cách sử dụng API hệ thống sau đây.

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

Xác thực cách triển khai

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

Kiểm thử CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Kiểm thử ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Kiểm thử 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)