Tránh kênh đồng tồn tại Wi-Fi/di động

Tính năng tránh kênh đồng thời Wi-Fi/dữ liệu di động (ra mắt 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ể xảy ra hiện tượng nhiễu từ hoặc đến các kênh di động. Trong đó có 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
  • 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 chip khi xử lý tình trạng tránh kênh
  • Thông tin chi tiết về việc triển khai tính năng tránh kênh
  • Các 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à LAA (Quyền truy cập được hỗ trợ có giấy phép), 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 có 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 điều biến lẫn nhau.

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

Tài liệu này gọi máy phát gây nhiễu là bên gây nhiễu và máy thu bị nhiễu là bên bị nhiễu. Kênh Wi-Fi là nguồn phát hoặc nạn nhân được gọi là kênh không an toàn.

Tính năng tránh trùng kênh Wi-Fi/dữ liệu di động cung cấp một phương pháp nhất quán để tránh trùng kênh, giảm nhu cầu về mã độc quyền khác với khung Wi-Fi. Ngoài ra, tính năng này cho phép các 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.

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. Có thể mô tả lược đồ tránh kênh Wi-Fi là một chuỗi gồm 4 bước trừu tượng:

  1. Báo cáo modem về sự thay đổi tần số mạng di động
  2. Thuật toán tránh trùng lặp tính toán các kênh Wi-Fi không an toàn
  3. Thuật toán tránh trùng lặp 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 thích hợp đối với Wi-Fi

Thủ đoạn lách luật về kênh

Hình 1. Thủ đoạn lách luật về kênh

Báo cáo thay đổi về tần số mạng 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 chỉ báo về quyền truy cập được hỗ trợ có giấy phép (LAA) và tính năng kết hợp sóng mang (CA).

Từ Android 12, các trường sau đây 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 sự giao thoa giữa các kênh di động và Wi-Fi, đồng thời xác định những kênh Wi-Fi nào không an toàn.

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

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ì một 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. Nhưng 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 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 hạn chế bắt buộc được biểu thị dưới dạng một mặt nạ bit chứa các giá trị cho việc có nên cấm một số kê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 đóng vai trò là khuyến nghị không sử dụng kênh đó cho mọi trường hợp sử dụng, nhưng các quy định hạn chế bắt buộc đánh dấu các trường hợp sử dụng cụ thể để bắt buộc 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 một kênh 2,4 GHz mặc định hoặc một kênh 5 GHz mặc định cho mỗi băng tần của ô 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ì không). 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 các 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 đè gồm 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ột mục nhập bảng cho biết rằng quá trình 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 bằng cách chỉ định một số kê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ụ thể.

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 (các kênh 5 GHz 40 MHz)
  • 80mhz (kênh 5 GHz 80 MHz)
  • 160mhz (Kênh 5 GHz 160 MHz)

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

Để xác định nhiễu kênh lân cận, thuật toán tránh xung đột đả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á một ngưỡng cụ thể.

Nhiễu kênh

Hình 2. Khoảng cách giữa kênh vi phạm và kênh bị vi phạm

Ngưỡng được xác định bằng cấu hình vật lý của thiết bị và giá trị ngưỡng được cung cấp trong mục 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 trong bảng và không cần tính toán các kênh không an toàn (thường là như vậy).

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

  • wifiVictimMhz: Ngưỡng khoảng cách MHz cho thiết bị Wi-Fi bị ảnh hưởng (đường lên của ô)
  • cellVictimMhz: Ngưỡng khoảng cách MHz cho nạn nhân của ô (đường xuống của ô)

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

  1. Đối với băng tần của kênh, hãy thử tìm một mục trong bảng tra cứu. Nếu không tìm thấy mục nào trong bảng, hãy trả về cá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ơ và nguồn gây 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 wifiVictimMhz xuất hiện và kênh di động có đường truyền lên và

    1. Nếu phần dưới 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 số cao nhất của đường lên của ô.
      2. Tìm kênh Wi-Fi 20 MHz đầu tiên có cạnh dưới trùng với 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ủa 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 lên của ô.
      2. Tìm kênh Wi-Fi đầu tiên có cạnh trên trùng với giới hạn.
      3. Đánh dấu kênh Wi-Fi, mọi kênh lớn hơn có chứa kênh đó (ví dụ: 40 Mhz, 80 Mhz) và mọi kênh cao hơn của cùng dải tần số là kênh không an toàn.
  4. Nếu cellVictimMhz xuất hiện và kênh ô có đường truyền xuống.

    1. Thực hiện bước 3 bằng cách dùng cellVictimMhz làm ngưỡng và so sánh với đường truyền xuống của ô thay vì đường truyền lên của ô.
  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 để tránh nhiễu kênh lân cận

Độ biến dạng sóng hài hoặc độ biến dạng điều biến lẫn nhau

Đối với hiện tượng méo hài hoặc điều biến lẫn nhau, công cụ coex sẽ tính toán phạm vi của tín hiệu hài hoặc điều biến lẫn nhau và đánh giá tỷ lệ phần trăm trùng lặp với một kênh có khả năng bị ảnh hưởng. 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à tình huống không an toàn. Việc tính toán tỷ lệ phần trăm chồng chéo của hài hoặc biến dạng điều biến lẫn nhau trên một kênh bị ảnh hưởng đượ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 sẽ xem xét độ méo hài của một kênh tải lên của ô gây hại 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à bậc hài $ N $.

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

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

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 điều chế liên pha, thuật toán sẽ xem xét hiện tượng méo điều chế liên pha của đường lên của ô và kênh Wi-Fi gây hại cho kênh đường xuống của ô. Sau đó, nó thay thế mức độ méo tiếng cao và mức độ méo tiếng thấp bằng các giá trị điều biến lẫn nhau dựa trên tần số đường lên của ô, tần số Wi-Fi và hai hệ số điều biến lẫn nhau $ M $, $ N $.

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

Tính toán sự điều biến lẫn nhau của 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 điều biến lẫn nhau

Bạn có thể chỉ định các giá trị $ M $, $ N $ và giá trị chồng chéo trong bảng tra cứu cho mỗi băng tần ô gây nhiễu. Nếu không có nhiễu cho một dải tần, thì các giá trị sẽ bị bỏ qua trong bảng cho mục nhập dải tần đó. Bạn có thể xác định độc lập 2 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 của ô 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 băng tần của kênh di động, ứng dụng sẽ cố gắng tìm một mục trong bảng tra cứu. Nếu không tìm thấy mục nào trong bảng, hãy trả về danh sách 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 các tham số được xác định.

    1. Tìm bậc hài N cho tần số 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 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 mức độ 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 độ 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 đến từ phía trên.
    6. Tính toán mức độ 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 độ 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 bậc hài N cho tần số 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 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 đến từ bên dưới.
      2. Tính toán mức độ 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 độ 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 đến từ phía trên.
      4. Tính toán mức độ 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 độ 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 công suất được chỉ định.
    4. Tìm thấy 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 mức độ chồng chéo của các kênh trên cạnh hài, hãy sử dụng lại mức độ chồng chéo đã 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 một kênh 40 Mhz và có mức độ chồng chéo là 30% và 90%, thì mức độ chồng chéo 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 từ hiện tượng điều chế liên pha nếu các tham số được xác định.

    1. Tìm các hệ số điều biến liên tục 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 của hiện tượng điều biến lẫn nhau và tần số cao của hiện tượng điều biến lẫn nhau dựa trên N, M, đường lên của ô và kênh Wi-Fi.
      2. Tính toán mức độ chồng chéo của hiện tượng điều biến liên tần số trên đường 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 của ô 2,4 GHz.
  5. Tìm các kênh 5 GHz không an toàn từ hiện tượng điều chế liên pha 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 các kênh Wi-Fi 5 GHz và ngưỡng trùng lặp của ô 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 lân cận và nhiễu hài, nhóm kênh cuối cùng được tính bằng cách lấy hợp của cả hai nhóm (và chọn giới hạn công suất thấp hơn nếu có xung đột), đồng thời xoá các kênh mặc định khỏi nhóm nếu không có hạn chế bắt buộc nào được áp dụng.

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

  1. Nếu mọi kênh Wi-Fi 2,4 GHz đều được đá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 bộ.
  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 bộ.
  3. Trả về nhóm 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 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 kết hợp sóng mang (CA), các dải hài hoặc điều chế liên tiếp cho mỗi đường lên hoặc đường xuống có thể không tạo ra đủ độ chồng chéo để gây nhiễu một cách độc lập, nhưng có thể tạo ra đủ độ chồng chéo khi kết hợp. Thuật toán sẽ xem xét từng phạm vi điều hoà hoặc điều chế lẫn nhau một cách độc lập và lấy hợp của các kênh không an toàn được trả về. Đối với trường hợp điều chế liên pha, điều này có nghĩa là đánh giá phạm vi điều chế liên pha 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 chúng là như nhau.

Giấy phép truy cập có hỗ trợ

Quyền truy cập được hỗ trợ theo giấy phép (LAA) được xác định là băng tần số 46. Thuật toán sẽ 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 toàn bộ các kênh 5 Ghz 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ị carrierconfig 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, 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 về 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 các ứ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 đâ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 đượ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 thao tác 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 rằng những kênh đó không được sử dụng. Phần này mô tả hành vi của dịch vụ Wi-Fi trong các trường hợp khác nhau.

Thông báo cho tài xế

Vì người lái xe đóng vai trò chính trong việc thực hiện tránh kênh, nên việc truyền đạt các kênh không an toàn cho người lái xe và phần mềm cơ sở là điều cần thiết. Để 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ở.

Khởi động SoftAP khi 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 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ó hạn chế

    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 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 tắc hạn chế 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ó hạn chế

    1. Khung 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 công suất nếu không thể tránh.

Wi-Fi Direct (P2P)

  1. Nếu có các kênh không an toàn có hạn chế 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ó những kênh không an toàn nhưng không bị hạn chế.

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

Wi-Fi Aware (NAN)

Khung này không tham gia vào việc chọn kênh cho Wi-Fi Aware (NAN) và không có hành động nào của khung được thực hiện. Trình điều khiển hoặc 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).

Tắt thuật toán

Nếu bạn muốn tắt chế độ triển khai thuật toán mặc định và truyề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 false, thuật toán mặc định sẽ bị vô hiệu hoá. 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 để kết nối với khung bằng cách sử dụ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 trùng lặp kênh Wi-Fi/mạng di động, hãy sử dụng các kiểm thử sau.

Các bài kiểm thử CTS

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

Kiểm tra ACTS

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

Kiểm thử VTS

  • Nếu bạn triển khai AIDL: 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)