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

Tính năng tránh kênh đồng tồn tại Wi-Fi/di động đượ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ừ hoặc đến các kênh di động. 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ề việc triển khai tính năng tránh kênh
  • Kiểm thử để xác thực hành vi tránh 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 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 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.

Tài liệu này gọi bộ phát gây nhiễu là kẻ tấn công và bộ thu bị nhiễu 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 đồng thời 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ố hoạt động của mạng di độ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 kênh di động và kênh 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 từ thiết bị lân cận cho 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 (ví dụ: do yêu cầu của nhà mạng), 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. 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 của băng tần 2,4 GHz hoặc 5 GHz đều đượ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 cho mỗi băng tần gây 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)

Sự can thiệp của kênh lân cận

Để xác định mức độ can thiệp của kênh lân cận, thuật toán tránh đồng tồn tại đảm bảo khoảng cách ΔF giữa kênh gây nhiễu và kênh bị nhiễu không vượt quá ngưỡng đã chỉ định.

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

Hình 2. Khoảng cách giữa kênh gây phiền toái và kênh bị hại

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 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 (tải lên qua mạng di động)
  • cellVictimMhz: Ngưỡng khoảng cách MHz cho nạn nhân bị theo dõi qua điện thoại di động (đường truyền xuống của điện thoại di động)

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

  1. Đối với dải 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 nhập bảng, hàm sẽ trả về kết quả 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 thấp hơn của băng tần Wi-Fi có nguy cơ

      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 cho tần số thấp nhất của đường truyền lên qua mạng di động.
      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 sóng hài hoặc độ méo do giao thoa

Đối với hiện tượng méo hài hoặc méo nội suy, công cụ coex sẽ tính toán phạm vi của tín hiệu hài hoặc nội suy và đánh giá tỷ lệ phần trăm trùng lặp của tín hiệu đó với một 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ầ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 không có nhiễu cho 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 đó. 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 đối với mỗi kênh ô đang hoạt động:

  1. Đối với dải tần số của kênh ô, hàm này sẽ 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 nào trong bảng, hàm này sẽ trả về kết quả 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ừ các sóng hài nếu các tham số được xác định.

    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 thấp hơn của sóng hài phát ra 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 độ 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.
    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ừ các sóng hài nếu các tham số được xác định.

    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 phát ra 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 công suất đã 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 điều hoà, hãy sử dụng lại độ trùng lặp đã tính toán từ các kênh cấu thành nhỏ hơn (ví dụ: nếu hai kênh 20 Mhz tạo thành một kênh 40 Mhz và có độ trùng lặp 30% và 90%, thì độ trùng lặp trung bình 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 mức độ chồng chéo của hiện tượng giao thoa trên đường truyền xuống của tế bào 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 của tế bào 2,4 GHz.
  5. Tìm các kênh 5 GHz không an toàn do hiện tượng giao thoa 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 đều được đánh dấu là kênh không an toàn, hãy xoá kênh Wi-Fi 5 GHz mặc định khỏi nhóm kênh.
  3. Trả về tập hợp kênh không an toàn cuối cùng.

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

Bảng tra cứu được biểu thị trong một 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.


<?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 này 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 giao thoa, điều này có nghĩa là đánh giá phạm vi giao thoa của mọi UL trên mọi DL.

Thuật toán này 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.

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

Quyền truy cập được hỗ trợ bằng 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 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 tế bào ở chế độ 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 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 đồ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 hành động liên quan đến Wi-Fi

Khi nhận được thông tin về tập hợp các 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 các 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 đóng vai trò chính trong việc tránh kênh, nên bạn cần truyền các kênh không an toàn đến trình điều khiển và phần mềm. Để thực hiện việc này, hãy sử dụng API HAL IWifiChip 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 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ế

    1. Trình điều khiển hoặc phần mềm 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 đ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ế đối với 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 được.

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 này 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).

Wi-Fi Aware (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ể sử dụng thuật toán độc quyền bên ngoài kênh của riêng mình để tạo danh sách các kênh không an toàn nhằm kết nối với khung bằng API hệ thống sau.

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

Xác thực quá trình 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)