واي فاي 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.

  • يجب أن يدعم الجهاز واجهات برمجة التطبيقات التالية في تطبيق AIDL أو HIDL الخاص بـ IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • يجب أن تحتوي مجموعة واجهة HAL Wi-Fi على واجهتي STA متزامنتين مكشوفتين باستخدام تنسيق مواصفات مثل [{STA} <= 2, ...] . لمزيد من المعلومات، راجع تزامن Wi-Fi متعدد الواجهات .

إذا تم استيفاء هذه المتطلبات المسبقة، فقم بتنفيذ تزامن Wi-Fi STA/STA عن طريق القيام بما يلي:

  1. تمكين وظيفة واحدة أو أكثر بشكل فردي باستخدام تراكبات موارد وقت التشغيل (يتم تعطيلها افتراضيًا).

    • جعل قبل الفاصل : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • الاتصال المتزامن المحلي فقط والإنترنت : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • الاتصال المتزامن المقيد بالإنترنت : config_wifiMultiStaRestrictedConcurrencyEnabled
    • شبكات متعددة متزامنة مع اتصال بالإنترنت : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. تحقق من صحة كل تطبيق كما هو موضح في الأقسام الخاصة به أدناه.

لدعم توافق Wi-Fi STA/STA بشكل أفضل، نوصي بأن تستخدم أطر العمل والتطبيقات المخصصة من قبل OEM أسلوب NetworkCallback#onCapabilitiesChanged() بدلاً من WifiManager#getConnectionInfo() ، الذي يُرجع WifiInfo فقط لشبكة واحدة وتم إهماله في Android 12 لمزيد من المعلومات، راجع واجهة برمجة تطبيقات طلب شبكة Wi-Fi للاتصال من نظير إلى نظير .

صنع قبل الاستراحة

تتيح وظيفة Make-before-break للأجهزة الاتصال بشبكة Wi-Fi جديدة مع الحفاظ على اتصال شبكة Wi-Fi الحالية، ولا يتم قطع الاتصال بالشبكة القديمة إلا عندما تتصل بنجاح بشبكة Wi-Fi الجديدة ولديها إمكانية الوصول إلى الإنترنت.

تعالج حالة الاستخدام "الإنشاء قبل الانفصال" المشكلات التالية في نظام التشغيل Android 11 أو الإصدارات الأقدم، حيث يجب أن ينقطع الجهاز عن شبكة Wi-Fi الموجودة قبل الاتصال بشبكة جديدة (الفصل قبل التصنيع).

  • عند الاتصال بشبكة جديدة، قد يكتشف الجهاز أن لديه كلمة مرور 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 الأساسية.

اتصال محلي متزامن فقط واتصال بالإنترنت

تتيح وظيفة الاتصال المحلي فقط واتصال الإنترنت المتزامنة للأجهزة الاتصال باتصال محلي فقط، مثل الاتصال بجهاز إنترنت الأشياء، بالتزامن مع الشبكة الأساسية التي توفر الإنترنت. تعمل هذه الوظيفة على تحسين تجربة المستخدم عند الاتصال مباشرة بأجهزة إنترنت الأشياء، مثل الكاميرات، وهو أمر ممكن من خلال WifiNetworkSpecifier API المضافة في Android 10.

في Android 11 والإصدارات الأقدم، تنقطع الأجهزة عن شبكة Wi-Fi الأساسية عند الاتصال بجهاز IoT، مما يؤدي إلى فقدان الاتصال بالإنترنت (ما لم يكن الجهاز مزودًا بنوع نقل آخر متاح، مثل البيانات الخلوية).

يمكن للتطبيقات التحقق مما إذا كانت هذه الوظيفة مدعومة على الجهاز باستخدام WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API.

لمزيد من المعلومات حول التغييرات التي تم إجراؤها على وظيفة الاتصال المحلي فقط واتصال الإنترنت المتزامنة في Android 12، راجع واجهة برمجة تطبيقات طلب شبكة Wi-Fi للاتصال من نظير إلى نظير .

التحقق من صحة الاتصال المحلي فقط والاتصال بالإنترنت

للتحقق من صحة هذه الوظيفة، استخدم اختبارات CTS وACTS التالية:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • الأفعال: WifiStaConcurrencyNetworkRequestTest

المتزامنة المقيدة والاتصال بالإنترنت

تتيح وظيفة الاتصال المقيد والاتصال بالإنترنت للجهاز الاتصال بشكل متزامن بشبكة Wi-Fi أساسية للمستخدم وشبكة Wi-Fi مقيدة متاحة فقط لتطبيقات محددة.

يمكن للتطبيقات التحقق مما إذا كانت هذه الوظيفة مدعومة على الجهاز باستخدام WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API.

لتمكين جهاز من الاتصال بشبكات Wi-Fi الثانوية المقيدة، اتبع الخطوات التالية:

  1. أضف اقتراحات شبكة Wi-Fi مع setOemPaid أو setOemPrivate على true.

  2. في ConnectivityManager ، قم بتقديم طلب NetworkRequest بالإمكانيات المقابلة:

عندما يكتشف الجهاز نتائج المسح باستخدام شبكة تتطابق مع اقتراح OEM المدفوع أو اقتراح OEM الخاص، فإنه يتصل به تلقائيًا كشبكة ثانوية.

التحقق من صحة الاتصال المتزامن والمقيد بالإنترنت

للتحقق من صحة هذه الوظيفة، استخدم اختبارات CTS وACTS التالية:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • الأفعال: WifiStaConcurrencyNetworkRequestTest

شبكات متعددة متزامنة مع اتصال بالإنترنت

متاحة لنظام Android 13 أو أعلى، تتيح ميزة الشبكات المتعددة المتزامنة مع الاتصال بالإنترنت للجهاز الاتصال بشكل متزامن بشبكتين (APs) وكلاهما غير مقيد (جميع التطبيقات لديها إمكانية الوصول) وتوفر الوصول إلى الإنترنت.

يمكن للتطبيقات التحقق مما إذا كانت هذه الميزة مدعومة على الجهاز باستخدام طريقة 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 : يحدد الاتصال المتزامن المحلي فقط واتصال الإنترنت أو وظيفة الاتصال المتزامن المقيد والاتصال بالإنترنت . يجب إعطاء الأولوية لجودة كلا الاتصالين بالتساوي.
  • نظرًا لأن STAs المتزامنة المزدوجة يمكن أن تؤدي إلى أوضاع تشغيل MCC وSCC وDBS، يجب أن يختار تطبيق البائع أفضل تكوين راديو عندما يستدعي إطار العمل IWifiChip.setMultiStaUseCase() للإشارة إلى الوظيفة. فيما يلي إرشادات عامة:

    • يُفضل استخدام 2x2+2x2 DBS إذا كان ذلك متاحًا.
    • تجنب 1x1+1x1 DBS إن أمكن بسبب التأثير الزائد على جودة الاتصال. بدلاً من ذلك، تفضل مركز عملائي (MCC).
    • يجب أن تكون دورة عمل MCC قابلة للتكوين بواسطة برنامج التشغيل أو البرنامج الثابت لمختلف الوظائف. لا يقوم إطار العمل بتعيين دورة عمل مركز عملائي مباشرة، ولكنه يستعلم عن هذه المعلومات باستخدام StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • في حالة استخدام مركز عملائي (MCC)، نوصي بدورات العمل التالية بين التوصيلات الأساسية والثانوية:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% أساسي، 30% ثانوي.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% ابتدائي، 50% ثانوي.