Wi-Fi STA/STA การทำงานพร้อมกัน

Android 12 เปิดตัว Wi-Fi STA/STA พร้อมกัน ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi สองเครือข่ายพร้อมกันได้ คุณสมบัติเสริมนี้เปิดใช้งานฟังก์ชันต่อไปนี้

  • ทำก่อนเบรก : อุปกรณ์ทำการเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ก่อนที่จะตัดการเชื่อมต่อที่มีอยู่ ส่งผลให้การเปลี่ยนผ่านราบรื่นขึ้นเมื่อสลับระหว่างเครือข่าย Wi-Fi
  • การเชื่อมต่อท้องถิ่นเท่านั้นและอินเทอร์เน็ตพร้อมกัน : อุปกรณ์เชื่อมต่อกับเครือข่ายเฉพาะท้องถิ่นเท่านั้น โดยไม่รบกวนการเชื่อมต่อหลักของอุปกรณ์
  • การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน : อุปกรณ์เชื่อมต่อกับเครือข่ายแบบจำกัด (ใช้ได้เฉพาะกับแอปที่มีสิทธิ์ใช้งานบางแอปเท่านั้น) โดยไม่รบกวนการเชื่อมต่อหลักของอุปกรณ์
  • (Android 13 หรือสูงกว่า) ใช้งานหลายเครือข่ายพร้อมกันด้วยการเชื่อมต่ออินเทอร์เน็ต : อุปกรณ์เชื่อมต่อกับสองเครือข่ายซึ่งทั้งสองเครือข่ายไม่จำกัดและใช้ได้กับทุกแอป และให้การเชื่อมต่ออินเทอร์เน็ต

หน้านี้อธิบายลักษณะการทำงานของอุปกรณ์เมื่อเปิดใช้งานคุณสมบัตินี้และรายละเอียดการใช้งานสำหรับผู้ผลิตและผู้จำหน่ายอุปกรณ์

การนำไปปฏิบัติ

อุปกรณ์ต้องรองรับสิ่งต่อไปนี้เพื่อใช้งาน Wi-Fi STA/STA พร้อมกัน:

  • ชิป Wi-Fi หรือเฟิร์มแวร์ต้องรองรับการเชื่อมต่อ STA สองรายการพร้อมกัน เฟิร์มแวร์ต้องรองรับการรวมช่องสัญญาณและแบนด์ทั้งหมดสำหรับการเชื่อมต่อทั้งสอง เพื่อหลีกเลี่ยงปัญหาด้านประสิทธิภาพ เราขอแนะนำให้ใช้ชิป Wi-Fi ที่รองรับ 2x2+2x2 DBS

  • อุปกรณ์จะต้องรองรับ API ต่อไปนี้ในการใช้งาน AIDL หรือ HIDL ของ IWifiChip

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • การรวมอินเทอร์เฟซ HAL Wi-Fi ต้องมีอินเทอร์เฟซ STA พร้อมกันสองอินเทอร์เฟซที่ใช้รูปแบบข้อกำหนด เช่น [{STA} <= 2, ...] สำหรับข้อมูลเพิ่มเติม โปรดดู การทำงานพร้อมกันหลายอินเทอร์เฟซ Wi-Fi

หากตรงตามข้อกำหนดเบื้องต้นเหล่านั้น ให้ใช้ Wi-Fi STA/STA พร้อมกันโดยดำเนินการดังต่อไปนี้:

  1. เปิดใช้งานฟังก์ชันอย่างน้อย 1 รายการโดยใช้ การซ้อนทับทรัพยากรรันไทม์ (ปิดใช้งานโดยค่าเริ่มต้น)

    • ทำก่อนเบรก : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน : config_wifiMultiStaRestrictedConcurrencyEnabled
    • พร้อมกันหลายเครือข่ายด้วยการเชื่อมต่ออินเทอร์เน็ต : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. ตรวจสอบการใช้งานแต่ละรายการตามที่อธิบายไว้ในส่วนที่เกี่ยวข้องด้านล่าง

เพื่อรองรับการทำงานพร้อมกันของ Wi-Fi STA/STA ได้ดียิ่งขึ้น เราขอแนะนำให้เฟรมเวิร์กและแอปที่ OEM กำหนดเองใช้วิธี NetworkCallback#onCapabilitiesChanged() แทน WifiManager#getConnectionInfo() ซึ่งจะส่งคืนเฉพาะ WifiInfo สำหรับเครือข่ายเดียวและเลิกใช้งานใน Android 12 สำหรับข้อมูลเพิ่มเติม โปรดดู API คำขอเครือข่าย Wi-Fi สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์

ทำ-ก่อน-พัก

ฟังก์ชัน make-before-break ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ในขณะที่ยังคงรักษาการเชื่อมต่อเครือข่าย Wi-Fi ที่มีอยู่ โดยตัดการเชื่อมต่อจากเครือข่ายเก่าเมื่อเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่ได้สำเร็จและมีการเข้าถึงอินเทอร์เน็ตเท่านั้น

กรณีการใช้งานแบบ make-before-break แก้ไขปัญหาต่อไปนี้ใน Android 11 หรือต่ำกว่า โดยที่อุปกรณ์จะต้องยกเลิกการเชื่อมต่อจากเครือข่าย Wi-Fi ที่มีอยู่ก่อนที่จะเชื่อมต่อกับเครือข่ายใหม่ (break-before-make)

  • เมื่อเชื่อมต่อกับเครือข่ายใหม่ อุปกรณ์อาจพบว่ามีการบันทึกรหัสผ่าน Wi-Fi ไม่ถูกต้อง หรือเครือข่ายใหม่ไม่มีการเข้าถึงอินเทอร์เน็ต ซึ่งจะบังคับให้อุปกรณ์เปลี่ยนกลับไปใช้เครือข่ายเก่า ส่งผลให้ต้องใช้เวลานานมากหากไม่มีการเชื่อมต่อ Wi-Fi

  • เครือข่ายเก่าถูกตัดการเชื่อมต่อกะทันหัน ซึ่งหมายความว่าซ็อกเก็ตทั้งหมดจะถูกปิด แอปมักจะตอบสนองได้ไม่ดีต่อการสูญเสียการเชื่อมต่ออย่างกะทันหัน และอาจทำให้ผู้ใช้ประสบปัญหาหากไม่มีการเชื่อมต่ออินเทอร์เน็ตไม่กี่วินาทีจนกว่าการเชื่อมต่อใหม่จะเสร็จสมบูรณ์

  • เครือข่ายเริ่มต้นจะเปลี่ยนสองครั้ง จากเครือข่าย Wi-Fi เก่าไปเป็นเครือข่ายมือถือ จากนั้นจากเครือข่ายมือถือไปเป็นเครือข่าย Wi-Fi ใหม่ ซึ่งทำให้แอปตอบสนองต่อการเปลี่ยนแปลงเครือข่ายสองครั้ง อุปกรณ์ต้องใช้เวลาช่วงสั้นๆ ในการใช้ข้อมูลเซลลูลาร์

ขั้นตอนการสร้างก่อนหยุดจะใช้เฉพาะกับสวิตช์เครือข่าย Wi-Fi อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการเท่านั้น สวิตช์เครือข่ายที่เริ่มต้นโดยผู้ใช้ใช้โฟลว์การแบ่งก่อนสร้างแบบเดิม โดยที่เครือข่ายก่อนหน้านี้ถูกตัดการเชื่อมต่อโดยสมบูรณ์ก่อนที่เครือข่ายใหม่จะเชื่อมต่อ ในบางกรณี โฟลว์การแบ่งก่อนสร้างจะใช้แม้ในสวิตช์อัตโนมัติที่เริ่มต้นโดยระบบปฏิบัติการ ตัวอย่างเช่น เมื่อสลับระหว่างสองเครือข่ายที่กำหนดค่าให้ใช้ที่อยู่ MAC จากโรงงาน

แอปสามารถตรวจสอบได้ว่าอุปกรณ์รองรับกรณีการใช้งานนี้หรือไม่โดยใช้ WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API

กำลังตรวจสอบการทำก่อนหยุดพัก

ในการตรวจสอบการใช้งานของคุณ ให้ทริกเกอร์สวิตช์เครือข่าย Wi-Fi อัตโนมัติ (โดยตรวจสอบให้แน่ใจว่ามีเครือข่ายที่มีความแรงของสัญญาณที่แรงกว่าเครือข่ายที่เชื่อมต่ออยู่ในปัจจุบัน) และตรวจสอบว่าอุปกรณ์รักษาการเชื่อมต่อที่มีอยู่ในขณะที่เชื่อมต่อกับเครือข่ายใหม่ หากต้องการดูสถานะของอินเทอร์เฟซ Wi-Fi ทั้งสองและตรวจสอบว่าเชื่อมต่อทั้งคู่แล้ว ให้ใช้คำสั่งต่อไปนี้

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

หากเครือข่ายใหม่ไม่มีการเชื่อมต่อ อุปกรณ์จะพยายามเชื่อมต่อกับเครือข่ายโดยยังคงรักษาการเชื่อมต่อกับเครือข่ายที่มีอยู่ และยกเลิกความพยายามเมื่อตรวจพบว่าเครือข่ายใหม่ไม่มีอินเทอร์เน็ต จากนั้นอุปกรณ์จะใช้การเชื่อมต่อที่มีอยู่เป็นเครือข่าย Wi-Fi หลักต่อไป

การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน

ฟังก์ชัน การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน ทำให้อุปกรณ์สามารถเชื่อมต่อกับการเชื่อมต่อเฉพาะท้องถิ่น เช่น การเชื่อมต่อกับอุปกรณ์ IoT พร้อมกันกับเครือข่ายที่ให้บริการอินเทอร์เน็ตหลัก ฟังก์ชันนี้ปรับปรุงประสบการณ์ผู้ใช้เมื่อเชื่อมต่อโดยตรงกับอุปกรณ์ IoT เช่น กล้อง ซึ่งสามารถทำได้ผ่าน WifiNetworkSpecifier API ที่เพิ่มใน Android 10

ใน Android 11 และต่ำกว่า อุปกรณ์จะยกเลิกการเชื่อมต่อกับเครือข่าย Wi-Fi หลักเมื่อเชื่อมต่อกับอุปกรณ์ IoT ส่งผลให้สูญเสียการเชื่อมต่ออินเทอร์เน็ต (เว้นแต่ว่าอุปกรณ์นั้นมีประเภทการรับส่งข้อมูลอื่นที่ใช้งานได้ เช่น ข้อมูลมือถือ)

แอปสามารถตรวจสอบได้ว่าฟังก์ชันนี้ได้รับการสนับสนุนบนอุปกรณ์หรือไม่โดยใช้ WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงฟังก์ชันการเชื่อมต่อภายในเครื่องและอินเทอร์เน็ตพร้อมกันใน Android 12 โปรดดู API คำขอเครือข่าย Wi-Fi สำหรับการเชื่อมต่อแบบเพียร์ทูเพียร์

กำลังตรวจสอบการเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ต

ในการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS และ ACTS ต่อไปนี้:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • การกระทำ: WifiStaConcurrencyNetworkRequestTest

การเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน

ฟังก์ชัน การเชื่อมต่ออินเทอร์เน็ตแบบจำกัดพร้อมกัน ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi หลักสำหรับผู้ใช้และเครือข่าย Wi-Fi แบบจำกัดได้พร้อมกันซึ่งมีให้บริการเฉพาะบางแอปเท่านั้น

แอปสามารถตรวจสอบได้ว่าฟังก์ชันนี้ได้รับการสนับสนุนบนอุปกรณ์หรือไม่โดยใช้ WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API

หากต้องการเปิดใช้งานอุปกรณ์เพื่อเชื่อมต่อกับเครือข่าย Wi-Fi รองที่ถูกจำกัด ให้ทำตามขั้นตอนเหล่านี้:

  1. เพิ่ม คำแนะนำเครือข่าย Wi-Fi โดยตั้ง setOemPaid หรือ setOemPrivate เป็นจริง

  2. ใน ConnectivityManager ให้ยื่น NetworkRequest ด้วยความสามารถที่เกี่ยวข้อง:

เมื่ออุปกรณ์ตรวจพบผลการสแกนด้วยเครือข่ายที่ตรงกับคำแนะนำที่ OEM จ่ายหรือคำแนะนำส่วนตัวของ OEM อุปกรณ์จะเชื่อมต่อกับเครือข่ายรองโดยอัตโนมัติ

กำลังตรวจสอบการเชื่อมต่อแบบจำกัดและอินเทอร์เน็ตพร้อมกัน

ในการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS และ ACTS ต่อไปนี้:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • การกระทำ: WifiStaConcurrencyNetworkRequestTest

พร้อมกันหลายเครือข่ายพร้อมการเชื่อมต่ออินเทอร์เน็ต

ใช้งานได้กับ Android 13 ขึ้นไป โดยหลายเครือข่ายพร้อมฟีเจอร์การเชื่อมต่ออินเทอร์เน็ต ช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย (AP) สองเครือข่ายพร้อมกัน ซึ่งทั้งสองเครือข่ายไม่จำกัด (แอปทั้งหมดมีสิทธิ์เข้าถึง) และให้การเข้าถึงอินเทอร์เน็ต

แอปสามารถตรวจสอบได้ว่าอุปกรณ์รองรับฟีเจอร์นี้หรือไม่โดยใช้เมธอด WifiManager#isStaConcurrencyForMultiInternetSupported()

หากคุณสมบัตินี้ได้รับการสนับสนุน แอพที่มีสิทธิ์จะสามารถเปิดใช้งานคุณสมบัตินี้ได้โดยใช้เมธอด WifiManager#setStaConcurrencyForMultiInternetMode(int mode) คุณลักษณะนี้มีโหมดดังต่อไปนี้:

หากต้องการค้นหาโหมดฟีเจอร์ที่ใช้งานอยู่ในปัจจุบัน ให้ใช้เมธอด WifiManager#getStaConcurrencyForMultiInternetMode()

เมื่อเปิดใช้งานคุณสมบัตินี้ ให้ใช้ขั้นตอนต่อไปนี้เพื่อขอเครือข่าย Wi-Fi ที่ให้บริการอินเทอร์เน็ตเพิ่มเติม

  1. สร้างตัวระบุเครือข่าย Wi-Fi โดยใช้ WifiNetworkSpecifier.Builder เลือกแบนด์สำหรับตัวระบุโดยใช้เมธอด setBand() อย่าระบุ SSID หรือ BSSID เนื่องจากเครือข่ายเพิ่มเติมสำหรับแบนด์ที่ระบุถูกเลือกโดยเฟรมเวิร์ก Wi-Fi

  2. ใช้ ConnectivityManager สร้าง NetworkRequest ด้วยความสามารถ NET_CAPABILITY_INTERNET

  3. เพิ่มตัวระบุลงในคำขอเครือข่ายพร้อมกับอินสแตนซ์ NetworkCallback เพื่อติดตามสถานะของคำขอ และออกคำขอไปยัง ConnectivityManager หากเครือข่ายที่บันทึกไว้พร้อมกับแบนด์ที่ร้องขอมีอยู่ในผลการสแกน และการเชื่อมต่อกับเครือข่ายสำเร็จ NetworkCallback.onAvailable() จะถูกเรียกใช้บนออบเจ็กต์การติดต่อกลับ

ตรวจสอบหลายเครือข่ายพร้อมกันด้วยการเชื่อมต่ออินเทอร์เน็ต

เมื่อต้องการตรวจสอบฟังก์ชันนี้ ให้ใช้การทดสอบ CTS ต่อไปนี้:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

แนวทางปฏิบัติเกี่ยวกับชิป Wi-Fi ของผู้จำหน่าย

สำหรับผู้จำหน่ายชิป Wi-Fi ให้ใช้แนวทางต่อไปนี้เพื่อรองรับการทำงานพร้อมกันของ Wi-Fi STA/STA

ชิป Wi-Fi ต้องรองรับการเชื่อมต่อ STA พร้อมกันแบบคู่ ซึ่งหมายความว่ารองรับสิ่งต่อไปนี้:

  • อินเทอร์เฟซ STA แต่ละตัวมี MAC ที่ไม่ซ้ำกันซึ่งสามารถตั้งโปรแกรมได้โดยเฟรมเวิร์ก
  • อินเทอร์เฟซ STA รองสามารถสร้างและทำลายแบบไดนามิกได้
  • STA แต่ละตัวสามารถเชื่อมต่อกับ SSID ที่แตกต่างกันได้ (ไม่ว่าจะอยู่ในแบนด์เดียวกันหรือต่างแบนด์ก็ตาม)
  • STA แต่ละตัวสามารถเชื่อมต่อกับ SSID เดียวกันได้ (ไม่ว่าจะอยู่ในแบนด์เดียวกันหรือต่างแบนด์ก็ตาม) STA ทั้งสองจะต้อง ไม่ เชื่อมต่อกับ BSSID เดียวกัน

คุณลักษณะที่สำคัญจะต้องทำงานบนพื้นฐานต่ออินเทอร์เฟซ และต้องพร้อมใช้งานบนอินเทอร์เฟซหลัก ต่อไปนี้เป็นรายการคุณลักษณะที่สำคัญเหล่านี้:

  • การโรมมิ่งต้องได้รับการสนับสนุนบนอินเทอร์เฟซหลักอย่างน้อย (ตั้งค่าโดยใช้ IWifiChip.setMultiStaPrimaryConnection() ) หากการโรมมิ่งได้รับการสนับสนุนบนอินเทอร์เฟซทั้งสอง การตัดสินใจในการเชื่อมต่อหนึ่งจะต้องไม่ขัดแย้งกับการเชื่อมต่อที่เกิดขึ้นพร้อมกันครั้งที่สอง ตัวอย่างเช่น อินเทอร์เฟซหนึ่งต้องไม่โรมมิ่งไปยัง BSSID ของการเชื่อมต่ออื่น

  • ต้องรองรับ APF (และออฟโหลดอื่นๆ เช่น ARP และ NS) บนอินเทอร์เฟซหลักเป็นอย่างน้อย (ตั้งค่าโดยใช้ IWifiChip.setMultiStaPrimaryConnection() )

  • สถิติเลเยอร์ลิงก์ต้องดำเนินการตามอินเทอร์เฟซแต่ละส่วน

ต่อไปนี้คือการใช้งานชิป Wi-Fi ที่แนะนำสำหรับสถานการณ์การทำงานพร้อมกันที่แตกต่างกัน:

  • ชิป Wi-Fi ต้องอนุญาตให้เฟรมเวิร์กเรียก IWifiChip.setMultiStaUseCase() ด้วยค่าคงที่ค่าใดค่าหนึ่งต่อไปนี้เพื่อระบุฟังก์ชันปัจจุบัน:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : ระบุฟังก์ชัน Make-Before-Break คุณภาพของการเชื่อมต่อหลักจะต้องจัดลำดับความสำคัญมากกว่าการเชื่อมต่อรอง
    • DUAL_STA_NON_TRANSIENT_UNBIASED : ระบุ การเชื่อมต่อเฉพาะท้องถิ่นและอินเทอร์เน็ตพร้อมกัน หรือฟังก์ชัน การเชื่อมต่ออินเทอร์เน็ตแบบจำกัดและจำกัดพร้อมกัน คุณภาพของการเชื่อมต่อทั้งสองจะต้องจัดลำดับความสำคัญเท่ากัน
  • เนื่องจาก STA ที่ใช้งานพร้อมกันแบบคู่สามารถนำไปสู่โหมดการทำงาน MCC, SCC และ DBS ได้ การใช้งานผู้จำหน่ายจึงต้องเลือกการกำหนดค่าวิทยุที่ดีที่สุดเมื่อเฟรมเวิร์กเรียก IWifiChip.setMultiStaUseCase() เพื่อระบุฟังก์ชัน ต่อไปนี้เป็นแนวทางทั่วไป:

    • แนะนำให้ใช้ 2x2+2x2 DBS หากมี
    • หลีกเลี่ยง 1x1+1x1 DBS หากเป็นไปได้ เนื่องจากมีผลกระทบต่อคุณภาพการเชื่อมต่อมากเกินไป ให้เลือก MCC แทน
    • รอบหน้าที่ของ MCC จะต้องกำหนดค่าโดยไดรเวอร์หรือเฟิร์มแวร์สำหรับฟังก์ชันต่างๆ กรอบงานไม่ได้ตั้งค่ารอบหน้าที่ของ MCC โดยตรง แต่สอบถามข้อมูลนี้โดยใช้ StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
    • หากใช้ MCC เราขอแนะนำรอบการทำงานต่อไปนี้ระหว่างการเชื่อมต่อหลักและรอง:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : หลัก 70%, รอง 30%
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% หลัก, 50% รอง