Đồng thời Wi-Fi STA/STA

Android 12 giới thiệu tính năng đồng thời Wi-Fi STA/STA, cho phép các thiết bị kết nối đồng thời với hai mạng Wi-Fi. Tính năng tùy chọn này cho phép các chức năng sau.

  • Make-Before-break : Thiết bị tạo kết nối với mạng Wi-Fi mới trước khi ngắt kết nối hiện có. Điều này mang lại sự chuyển tiếp mượt mà hơn khi chuyển đổi giữa các mạng Wi-Fi
  • Kết nối Internet và chỉ cục bộ đồng thời : Thiết bị kết nối với mạng chỉ cục bộ mà không làm gián đoạn kết nối cung cấp Internet chính của thiết bị.
  • Kết nối Internet và hạn chế đồng thời : Thiết bị kết nối với mạng bị hạn chế (chỉ khả dụng với một số ứng dụng đặc quyền nhất định) mà không làm gián đoạn kết nối cung cấp Internet chính của thiết bị.
  • (Android 13 trở lên) Nhiều mạng đồng thời có kết nối internet : Thiết bị kết nối với hai mạng, cả hai mạng đều không bị hạn chế và khả dụng cho tất cả các ứng dụng, đồng thời cung cấp kết nối Internet.

Trang này mô tả hoạt động của thiết bị khi bật tính năng này cũng như chi tiết triển khai dành cho nhà sản xuất và nhà cung cấp thiết bị.

Thực hiện

Các thiết bị phải hỗ trợ những điều sau để triển khai đồng thời Wi-Fi STA/STA:

  • Chip hoặc chương trình cơ sở Wi-Fi phải hỗ trợ hai kết nối STA đồng thời. Phần sụn phải hỗ trợ tất cả các kết hợp kênh và băng tần cho cả hai kết nối. Để tránh các vấn đề về hiệu suất, chúng tôi khuyên bạn nên sử dụng chip Wi-Fi có khả năng 2x2+2x2 DBS.

  • Thiết bị phải hỗ trợ các API sau trong quá trình triển khai AIDL hoặc HIDL của IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Sự kết hợp giao diện Wi-Fi HAL phải có hai giao diện STA đồng thời được hiển thị bằng định dạng thông số kỹ thuật như [{STA} <= 2, ...] . Để biết thêm thông tin, hãy xem Đồng thời đa giao diện Wi-Fi .

Nếu những điều kiện tiên quyết đó được đáp ứng, hãy triển khai đồng thời Wi-Fi STA/STA bằng cách thực hiện như sau:

  1. Bật riêng một hoặc nhiều chức năng bằng cách sử dụng lớp phủ tài nguyên thời gian chạy (bị tắt theo mặc định).

    • Tạo trước khi nghỉ : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Kết nối internet và chỉ cục bộ đồng thời : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Kết nối internet và hạn chế đồng thời : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Nhiều mạng đồng thời có kết nối internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Xác thực từng cách triển khai như được mô tả trong các phần tương ứng bên dưới.

Để hỗ trợ tốt hơn cho hoạt động đồng thời của Wi-Fi STA/STA, chúng tôi khuyên các khung và ứng dụng do OEM tùy chỉnh nên sử dụng phương thức NetworkCallback#onCapabilitiesChanged() thay vì WifiManager#getConnectionInfo() , phương thức này chỉ trả về WifiInfo cho một mạng duy nhất và không được dùng nữa trong Android 12 . Để biết thêm thông tin, hãy xem API yêu cầu mạng Wi-Fi để kết nối ngang hàng .

Làm trước khi nghỉ

Chức năng tạo trước khi ngắt cho phép các thiết bị kết nối với mạng Wi-Fi mới trong khi vẫn duy trì kết nối mạng Wi-Fi hiện có, chỉ ngắt kết nối khỏi mạng cũ khi kết nối thành công với mạng Wi-Fi mới và có quyền truy cập internet.

Trường hợp sử dụng tạm dừng giải quyết các vấn đề sau trong Android 11 trở xuống, trong đó thiết bị phải ngắt kết nối khỏi mạng Wi-Fi hiện có trước khi kết nối với mạng mới (ngắt trước khi thực hiện).

  • Khi kết nối với mạng mới, thiết bị có thể phát hiện ra rằng mật khẩu Wi-Fi đã lưu không chính xác hoặc mạng mới không có quyền truy cập internet. Điều này buộc thiết bị phải chuyển về mạng cũ, dẫn đến một khoảng thời gian đáng kể không có kết nối Wi-Fi.

  • Mạng cũ bị ngắt kết nối đột ngột, điều đó có nghĩa là tất cả các ổ cắm đều bị đóng. Các ứng dụng thường không phản ứng tốt khi mất kết nối đột ngột và điều này có thể khiến người dùng gặp phải tình trạng mất kết nối Internet trong vài giây cho đến khi kết nối mới được thiết lập hoàn toàn.

  • Mạng mặc định thay đổi hai lần, từ mạng Wi-Fi cũ sang mạng di động, sau đó từ mạng di động sang mạng Wi-Fi mới. Điều này khiến ứng dụng phản ứng hai lần với những thay đổi của mạng. Thiết bị cũng phải dành một khoảng thời gian ngắn để sử dụng dữ liệu di động.

Luồng thực hiện trước khi ngắt chỉ được sử dụng cho các chuyển mạch mạng Wi-Fi tự động do HĐH khởi tạo. Bộ chuyển mạch mạng do người dùng thực hiện sử dụng quy trình ngắt trước khi thực hiện kế thừa, trong đó mạng trước đó bị ngắt kết nối hoàn toàn trước khi mạng mới được kết nối. Trong một số trường hợp nhất định, quy trình ngắt trước khi thực hiện được sử dụng ngay cả trong các công tắc tự động do HĐH khởi tạo, chẳng hạn như khi chuyển đổi giữa hai mạng được cấu hình để sử dụng địa chỉ MAC gốc.

Các ứng dụng có thể kiểm tra xem thiết bị có hỗ trợ trường hợp sử dụng này hay không bằng cách sử dụng API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Xác thực thực hiện trước khi nghỉ

Để xác thực việc triển khai của bạn, hãy kích hoạt chuyển đổi mạng Wi-Fi tự động (bằng cách đảm bảo có sẵn mạng có cường độ tín hiệu mạnh hơn mạng hiện được kết nối) và xác minh rằng thiết bị vẫn duy trì kết nối hiện có trong khi kết nối với mạng mới. Để xem trạng thái của cả hai giao diện Wi-Fi và xác minh rằng cả hai đều được kết nối, hãy sử dụng lệnh sau.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Nếu mạng mới không có kết nối, thiết bị sẽ cố gắng kết nối với mạng trong khi vẫn duy trì kết nối với mạng hiện có và hủy bỏ nỗ lực khi phát hiện mạng mới không có internet. Sau đó, thiết bị sẽ tiếp tục sử dụng kết nối hiện có làm mạng Wi-Fi chính.

Kết nối Internet và chỉ cục bộ đồng thời

Chức năng kết nối internet và chỉ cục bộ đồng thời cho phép các thiết bị kết nối với một kết nối chỉ cục bộ, chẳng hạn như kết nối với thiết bị IoT, đồng thời với mạng cung cấp internet chính. Chức năng này cải thiện trải nghiệm người dùng khi kết nối trực tiếp với các thiết bị IoT, chẳng hạn như máy ảnh, điều này có thể thực hiện được thông qua API WifiNetworkSpecifier được thêm vào Android 10.

Trong Android 11 trở xuống, các thiết bị ngắt kết nối khỏi mạng Wi-Fi chính khi kết nối với thiết bị IoT, dẫn đến mất kết nối Internet (trừ khi thiết bị có sẵn loại phương tiện truyền tải khác, chẳng hạn như dữ liệu di động).

Các ứng dụng có thể kiểm tra xem thiết bị có hỗ trợ chức năng này hay không bằng cách sử dụng API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Để biết thêm thông tin về những thay đổi đối với chức năng kết nối Internet và chỉ cục bộ đồng thời trong Android 12, hãy xem API yêu cầu mạng Wi-Fi để kết nối ngang hàng .

Xác thực kết nối Internet và chỉ cục bộ

Để xác thực chức năng này, hãy sử dụng các bài kiểm tra CTS và ACTS sau:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • HÀNH ĐỘNG: WifiStaConcurrencyNetworkRequestTest

Kết nối Internet và hạn chế đồng thời

Chức năng kết nối internet và hạn chế đồng thời cho phép thiết bị kết nối đồng thời với mạng Wi-Fi chính cho người dùng và mạng Wi-Fi bị hạn chế chỉ khả dụng cho một số ứng dụng nhất định.

Các ứng dụng có thể kiểm tra xem thiết bị có hỗ trợ chức năng này hay không bằng cách sử dụng API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Để cho phép thiết bị kết nối với mạng Wi-Fi bị hạn chế thứ cấp, hãy làm theo các bước sau:

  1. Thêm đề xuất mạng Wi-Fi với setOemPaid hoặc setOemPrivate được đặt thành true.

  2. Trong ConnectivityManager , gửi NetworkRequest với các khả năng tương ứng:

Khi thiết bị phát hiện kết quả quét với mạng khớp với đề xuất riêng của OEM hoặc đề xuất riêng của OEM, thiết bị sẽ tự động kết nối với mạng đó dưới dạng mạng phụ.

Xác thực đồng thời bị hạn chế và kết nối internet

Để xác thực chức năng này, hãy sử dụng các bài kiểm tra CTS và ACTS sau:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • HÀNH ĐỘNG: WifiStaConcurrencyNetworkRequestTest

Đồng thời nhiều mạng có kết nối internet

Có sẵn cho Android 13 trở lên, tính năng nhiều mạng đồng thời có kết nối Internet cho phép thiết bị kết nối đồng thời với hai mạng (AP) mà cả hai mạng đều không bị hạn chế (tất cả các ứng dụng đều có quyền truy cập) và cung cấp quyền truy cập Internet.

Các ứng dụng có thể kiểm tra xem tính năng này có được hỗ trợ trên thiết bị hay không bằng phương pháp WifiManager#isStaConcurrencyForMultiInternetSupported() .

Nếu tính năng này được hỗ trợ, các ứng dụng có đặc quyền có thể kích hoạt tính năng này bằng phương thức WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Tính năng này có các chế độ sau:

Để truy vấn chế độ tính năng hiện đang hoạt động, hãy sử dụng phương thức WifiManager#getStaConcurrencyForMultiInternetMode() .

Khi tính năng này được bật, hãy làm theo các bước sau để yêu cầu mạng Wi-Fi cung cấp Internet bổ sung.

  1. Tạo trình xác định mạng Wi-Fi bằng cách sử dụng WifiNetworkSpecifier.Builder . Chọn một băng tần cho bộ chỉ định bằng phương thức setBand() . Không chỉ định SSID hoặc BSSID vì mạng bổ sung cho băng tần được chỉ định sẽ được chọn bởi khung Wi-Fi.

  2. Sử dụng ConnectivityManager , tạo NetworkRequest với khả năng NET_CAPABILITY_INTERNET .

  3. Thêm thông số xác định vào yêu cầu mạng cùng với phiên bản NetworkCallback để theo dõi trạng thái của yêu cầu và đưa ra yêu cầu tới ConnectivityManager . Nếu mạng đã lưu với băng tần được yêu cầu có sẵn trong kết quả quét và kết nối với mạng thành công, NetworkCallback.onAvailable() sẽ được gọi trên đối tượng gọi lại.

Xác thực đồng thời nhiều mạng có kết nối internet

Để xác thực chức năng này, hãy sử dụng thử nghiệm CTS sau:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Nguyên tắc về chip Wi-Fi của nhà cung cấp

Đối với nhà cung cấp chip Wi-Fi, hãy sử dụng các nguyên tắc sau để hỗ trợ đồng thời Wi-Fi STA/STA.

Chip Wi-Fi phải hỗ trợ kết nối STA kép đồng thời. Điều này có nghĩa là nó hỗ trợ như sau:

  • Mỗi giao diện STA có một MAC duy nhất được lập trình theo khung.
  • Giao diện STA thứ cấp có thể được tạo và hủy động.
  • Mỗi STA có thể được kết nối với một SSID khác nhau (trong cùng một băng tần hoặc một băng tần khác).
  • Mỗi STA có thể được kết nối với cùng một SSID (trong cùng một băng tần hoặc một băng tần khác). Hai STA không bao giờ được kết nối với cùng một BSSID.

Các tính năng quan trọng phải hoạt động trên cơ sở từng giao diện và chúng phải có sẵn trên giao diện chính. Sau đây là danh sách các tính năng quan trọng này:

  • Chuyển vùng phải được hỗ trợ trên ít nhất giao diện chính (được đặt bằng IWifiChip.setMultiStaPrimaryConnection() ). Nếu chuyển vùng được hỗ trợ trên cả hai giao diện, các quyết định trên một kết nối không được xung đột với kết nối đồng thời thứ hai. Ví dụ: một giao diện không được chuyển sang BSSID của kết nối kia.

  • APF (và các loại giảm tải khác như ARP và NS) phải được hỗ trợ trên ít nhất giao diện chính (được đặt bằng IWifiChip.setMultiStaPrimaryConnection() ).

  • Số liệu thống kê lớp liên kết phải hoạt động trên cơ sở từng giao diện.

Sau đây là các cách triển khai chip Wi-Fi được đề xuất cho các tình huống đồng thời khác nhau:

  • Chip Wi-Fi phải cho phép khung gọi IWifiChip.setMultiStaUseCase() bằng một trong các hằng số sau để chỉ định chức năng hiện tại:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Chỉ định chức năng Make-Before-Break. Chất lượng của kết nối chính phải được ưu tiên hơn kết nối phụ.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Chỉ định kết nối internet và chỉ cục bộ đồng thời hoặc chức năng kết nối internet và hạn chế đồng thời . Chất lượng của cả hai kết nối phải được ưu tiên như nhau.
  • Vì STA kép đồng thời có thể dẫn đến các chế độ hoạt động MCC, SCC và DBS nên việc triển khai của nhà cung cấp phải chọn cấu hình vô tuyến tốt nhất khi khung gọi IWifiChip.setMultiStaUseCase() để biểu thị chức năng. Sau đây là những hướng dẫn chung:

    • 2x2+2x2 DBS được ưu tiên nếu có.
    • Tránh 1x1+1x1 DBS nếu có thể vì ảnh hưởng quá nhiều đến chất lượng kết nối. Thay vào đó, hãy ưu tiên MCC.
    • Chu kỳ nhiệm vụ MCC phải được trình điều khiển hoặc chương trình cơ sở cấu hình cho các chức năng khác nhau. Khung này không trực tiếp đặt chu kỳ nhiệm vụ MCC mà truy vấn thông tin này bằng cách sử dụng StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Nếu sử dụng MCC, chúng tôi khuyến nghị các chu kỳ hoạt động sau đây giữa các kết nối chính và phụ:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% chính, 30% phụ.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% chính, 50% phụ.