التزامن بين محطة Wi-Fi الأساسية ومحطة Wi-Fi

يقدّم نظام التشغيل Android 12 ميزة "الاستجابة المتزامنة لأجهزة STA/STA في شبكة Wi-Fi"، التي تتيح للأجهزة الاتصال بشبكتَي Wi-Fi في الوقت نفسه. تفعِّل هذه الميزة الاختيارية الوظائف التالية.

  • الربط قبل القطع: يتصل الجهاز بشبكة Wi-Fi جديدة قبل قطع الاتصال بالشبكة الحالية. ويؤدي ذلك إلى عمليات انتقال أكثر سلاسة عند التبديل بين شبكات Wi-Fi.
  • الاتصال بالإنترنت والشبكة المحلية في الوقت نفسه: يتصل الجهاز بشبكة محلية فقط بدون إيقاف اتصاله الإنترنت الأساسي.
  • الاتصال المتزامن بشبكة محظورة والإنترنت: يتم ربط الجهاز بشبكة محظورة (تتوفّر لبعض التطبيقات المميّزة فقط) بدون إيقاف الاتصال الأساسي بالإنترنت على الجهاز.
  • (الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث) شبكات متعددة في الوقت نفسه مع اتصال بالإنترنت: يتصل الجهاز بشبكتَين غير محدودتَين ومتاحتَين لجميع التطبيقات، وتوفّر اتصالاً بالإنترنت.

توضِّح هذه الصفحة سلوك الجهاز عند تفعيل هذه الميزة و تفاصيل التنفيذ لصنّاع الأجهزة وبائعيها.

التنفيذ

يجب أن تتيح الأجهزة ما يلي من أجل تنفيذ التزامن بين محطة Wi-Fi الأساسية ومحطة Wi-Fi العميلة:

  • يجب أن تتيح شريحة Wi-Fi أو البرامج الثابتة اتصالَين متزامنين بنقطة اتصال STA. يجب أن تتيح البرامج الثابتة جميع مجموعات القنوات والنطاقات لكلتا الطريقتَين. لتجنُّب مشاكل الأداء، ننصحك باستخدام chip Wi-Fi ‎2x2+2x2 DBS.

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

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

في حال استيفاء هذه المتطلبات الأساسية، يمكنك تنفيذ التزامن بين محطة Wi-Fi الأساسية/التابعة من خلال تنفيذ الخطوات التالية:

  1. يمكنك تفعيل دالة واحدة أو أكثر بشكلٍ فردي باستخدام تراكبات موارد وقت التشغيل (تكون غير مفعّلة تلقائيًا).

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

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

الإنشاء قبل الانهيار

تسمح وظيفة 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 التي تمت إضافتها في نظام التشغيل Android 10.

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

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

لمزيد من المعلومات عن التغييرات التي طرأت على وظيفة الربط المتزامن بالإنترنت والربط المحلي فقط في Android 12، يُرجى الاطّلاع على Wi-Fi Network Request API للربط بين الأجهزة.

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

للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyWifiNetworkSpecifierTest CTS.

الاتصال المحدود بالإنترنت في الوقت نفسه

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

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

لتفعيل إمكانية اتصال جهاز بشبكات Wi-Fi الثانوية المحظورة، اتّبِع الخطوات التالية:

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

  2. في ConnectivityManager، أرسِل NetworkRequest يتضمّن الإمكانات التالية:

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

التحقّق من الاتصال بالإنترنت واتصالات الأجهزة المحظورة المتزامنة

للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS.

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

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

يمكن للتطبيقات التحقّق مما إذا كانت هذه الميزة متاحة على الجهاز باستخدام الطريقة 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 الأساسية ومحطة Wi-Fi.

يجب أن تتيح شريحة Wi-Fi إمكانية الاتصال بجهازَي STA متزامنين. وهذا يعني أنّه يتوافق مع ما يلي:

  • تحتوي كل واجهة STA على عنوان MAC فريد يمكن للإطار العمل برمجته.
  • يمكن إنشاء واجهة STA الثانوية وإزالتها بشكل ديناميكي.
  • يمكن توصيل كل محطة تمكين الوصول (STA) بمعرّف SSID مختلف (إما ضمن نطاقها نفسه أو نطاق مختلف).
  • يمكن توصيل كل محطة تمكين الوصول (STA) بمعرّف SSID نفسه (إما ضمن نطاقها نفسه أو نطاق مختلف). يجب أبدًا عدم ربط محطتَي العمل بوحدة التحكّم في حدود الجلسة نفسها.

يجب أن تعمل الميزات المهمة على أساس كل واجهة، ويجب أن تكون متوفرة في الواجهة الأساسية. في ما يلي قائمة بهذه الخصائص العميقة الأهمية:

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

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

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: ‎70% أساسي، و‎30% ثانوي
      • DUAL_STA_NON_TRANSIENT_UNBIASED: ‎50% أساسي و‎50% ثانوي