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

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

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

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

การดำเนินการ

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

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

  • อุปกรณ์ต้องรองรับ API ต่อไปนี้ใน ผู้จำหน่าย HAL เวอร์ชัน 1.5

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

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

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

    • ทำก่อนพัก : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • การเชื่อมต่อภายในเครื่องและอินเทอร์เน็ตพร้อม กัน: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • การเชื่อมต่ออินเทอร์เน็ตและ จำกัด พร้อมกัน : config_wifiMultiStaRestrictedConcurrencyEnabled
  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 ใหม่ ทำให้แอปตอบสนองต่อการเปลี่ยนแปลงเครือข่ายสองครั้ง อุปกรณ์ยังต้องใช้เวลาช่วงสั้นๆ โดยใช้ข้อมูลเครือข่ายมือถือ

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

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

ตรวจสอบ make-befor-break

ในการตรวจสอบการใช้งานของคุณ ให้เปิดใช้งานสวิตช์เครือข่าย 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

แนวทางชิป Wi-Fi ของผู้จำหน่าย

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

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

  • อินเทอร์เฟซ STA แต่ละรายการมี MAC ที่ไม่ซ้ำกันซึ่งตั้งโปรแกรมได้โดยเฟรมเวิร์ก
  • อินเทอร์เฟซ STA สำรองสามารถสร้างและทำลายแบบไดนามิกได้
  • STA แต่ละ STA สามารถเชื่อมต่อกับ SSID ที่แตกต่างกัน (ภายในแบนด์เดียวกันหรือแบนด์อื่น)
  • STA แต่ละ 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%