تزامن STA/STA في شبكة 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 مزوّدة بتقنية DBS‏ 2x2+2x2.

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

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

في حال استيفاء هذه المتطلبات الأساسية، يمكنك تنفيذ ميزة "الاستجابة المتزامنة لأجهزة STA/STA في 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 الأساسية.

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

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

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

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

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

التحقّق من اتصال الإنترنت وشبكة Wi-Fi

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

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

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

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

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

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

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

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

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

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

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

تتوفّر ميزة توفُّر عدة شبكات في الوقت نفسه مع إمكانية الاتصال بالإنترنت لنظام التشغيل 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 التالي:

  • مجموعة أدوات اختبار العمل: MultiStaConcurrencyMultiInternetWifiNetworkTest

إرشادات حول شرائح Wi-Fi الخاصة بالمورّدين

بالنسبة إلى مورّدي شرائح Wi-Fi، يُرجى اتّباع الإرشادات التالية للسماح بحالة الصعوبات المتزامنة في Wi-Fi STA/STA.

يجب أن تتيح شريحة 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 بمعدل 1×1+1×1 إن أمكن ذلك بسبب التأثير المفرط على جودة الاتصال. بدلاً من ذلك، يُفضّل استخدام "مركز عملائي".
    • يجب أن يكون بالإمكان ضبط دورة عمل وحدة التحكّم في الجهد (MCC) من خلال برنامج التشغيل أو البرامج الثابتة لأجل الوظائف المختلفة. لا يحدِّد إطار العمل دورة عمل وحدة التحكّم في حدود الجلسة بشكل مباشر، ولكنّه يطلب هذه المعلومات باستخدام StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • في حال استخدام "مركز عملائي"، ننصحك بمدّة التشغيل التالية بين الربط الأساسي والربط الثانوي:

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